打印
[STM32F1]

stm32f10x.h头文件中关于AHB外设基址的定义

[复制链接]
1604|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
tgwfcc|  楼主 | 2016-5-16 18:04 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
今天偶然看到在stm32f10x.h中定义了这样两句:
#define AHBPERIPH_BASE        (PERIPH_BASE + 0x20000)
#define SDIO_BASE             (PERIPH_BASE + 0x18000)
然后去翻了手册,发现AHB的地址是从0x4001 8000开始的,

头文件为什么这样定义呢?
沙发
FAQ| | 2016-5-16 18:59 | 只看该作者
你想让头文件定义成啥样?

使用特权

评论回复
板凳
734774645| | 2016-5-16 23:22 | 只看该作者
头文件那是人家设计单片机的人做的,没有什么为什么吧

使用特权

评论回复
地板
戈卫东| | 2016-5-16 23:34 | 只看该作者
因为ST的模块都是在0x40000000开始的地址

使用特权

评论回复
5
tgwfcc|  楼主 | 2016-5-17 09:20 | 只看该作者
本帖最后由 tgwfcc 于 2016-5-17 11:22 编辑
FAQ 发表于 2016-5-16 18:59
你想让头文件定义成啥样?

它为什么不是这样呢?
#define AHBPERIPH_BASE        (PERIPH_BASE + 0x18000)
#define SDIO_BASE             (AHBPERIPH_BASE+ 0x00)

使用特权

评论回复
6
tgwfcc|  楼主 | 2016-5-17 09:21 | 只看该作者
戈卫东 发表于 2016-5-16 23:34
因为ST的模块都是在0x40000000开始的地址

这个没错,不过这个和我说的没关系吧,

使用特权

评论回复
7
popeye021| | 2016-5-17 11:10 | 只看该作者
tgwfcc 发表于 2016-5-17 09:20
它为什么不是这样呢?
#define AHBPERIPH_BASE        (PERIPH_BASE + 0x18000)
#define SDIO_BASE       ...

按你这个定义,SDIO_BASE是多少?从datasheet看,应该是多少?

使用特权

评论回复
8
tgwfcc|  楼主 | 2016-5-17 11:24 | 只看该作者
popeye021 发表于 2016-5-17 11:10
按你这个定义,SDIO_BASE是多少?从datasheet看,应该是多少?

刚才那个写错了,
#define AHBPERIPH_BASE        (PERIPH_BASE + 0x18000)
#define SDIO_BASE             (AHBPERIPH_BASE+ 0x00)   //和AHB外设基址一致
手册上SDIO的地址就是PERIPH_BASE + 0x18000,0x4001 8000,

使用特权

评论回复
9
popeye021| | 2016-5-17 13:59 | 只看该作者
tgwfcc 发表于 2016-5-17 11:24
刚才那个写错了,
#define AHBPERIPH_BASE        (PERIPH_BASE + 0x18000)
#define SDIO_BASE           ...

其他外设地址定义有没有用到AHBPERIPH_BASE?
如果用到了,也许只是别人懒得改

使用特权

评论回复
10
tgwfcc|  楼主 | 2016-5-17 14:29 | 只看该作者
popeye021 发表于 2016-5-17 13:59
其他外设地址定义有没有用到AHBPERIPH_BASE?
如果用到了,也许只是别人懒得改 ...

AHB外设的定义是用的AHBPERIPH_BASE,相当于AHBPERIPH_BASE 的基址就是从0x4002 0000(DMA1)开始的

#define DMA1_BASE             (AHBPERIPH_BASE + 0x0000)
#define DMA1_Channel1_BASE    (AHBPERIPH_BASE + 0x0008)
#define DMA1_Channel2_BASE    (AHBPERIPH_BASE + 0x001C)
#define DMA1_Channel3_BASE    (AHBPERIPH_BASE + 0x0030)
#define DMA1_Channel4_BASE    (AHBPERIPH_BASE + 0x0044)
#define DMA1_Channel5_BASE    (AHBPERIPH_BASE + 0x0058)
#define DMA1_Channel6_BASE    (AHBPERIPH_BASE + 0x006C)
#define DMA1_Channel7_BASE    (AHBPERIPH_BASE + 0x0080)
#define DMA2_BASE             (AHBPERIPH_BASE + 0x0400)
#define DMA2_Channel1_BASE    (AHBPERIPH_BASE + 0x0408)
#define DMA2_Channel2_BASE    (AHBPERIPH_BASE + 0x041C)
#define DMA2_Channel3_BASE    (AHBPERIPH_BASE + 0x0430)
#define DMA2_Channel4_BASE    (AHBPERIPH_BASE + 0x0444)
#define DMA2_Channel5_BASE    (AHBPERIPH_BASE + 0x0458)
#define RCC_BASE              (AHBPERIPH_BASE + 0x1000)
#define CRC_BASE              (AHBPERIPH_BASE + 0x3000)

#define FLASH_R_BASE          (AHBPERIPH_BASE + 0x2000) /*!< Flash registers base address */
#define OB_BASE               ((uint32_t)0x1FFFF800)    /*!< Flash Option Bytes base address */

#define ETH_BASE              (AHBPERIPH_BASE + 0x8000)

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

34

主题

260

帖子

4

粉丝