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

[复制链接]
1792|9
 楼主| tgwfcc 发表于 2016-5-16 18:04 | 显示全部楼层 |阅读模式
今天偶然看到在stm32f10x.h中定义了这样两句:
#define AHBPERIPH_BASE        (PERIPH_BASE + 0x20000)
#define SDIO_BASE             (PERIPH_BASE + 0x18000)
然后去翻了手册,发现AHB的地址是从0x4001 8000开始的,
QQ图片20160516180101.png
头文件为什么这样定义呢?
FAQ 发表于 2016-5-16 18:59 | 显示全部楼层
你想让头文件定义成啥样?
734774645 发表于 2016-5-16 23:22 | 显示全部楼层
头文件那是人家设计单片机的人做的,没有什么为什么吧
戈卫东 发表于 2016-5-16 23:34 | 显示全部楼层
因为ST的模块都是在0x40000000开始的地址
 楼主| 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)
 楼主| tgwfcc 发表于 2016-5-17 09:21 | 显示全部楼层
戈卫东 发表于 2016-5-16 23:34
因为ST的模块都是在0x40000000开始的地址

这个没错,不过这个和我说的没关系吧,
popeye021 发表于 2016-5-17 11:10 | 显示全部楼层
tgwfcc 发表于 2016-5-17 09:20
它为什么不是这样呢?
#define AHBPERIPH_BASE        (PERIPH_BASE + 0x18000)
#define SDIO_BASE       ...

按你这个定义,SDIO_BASE是多少?从datasheet看,应该是多少?
 楼主| 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,
popeye021 发表于 2016-5-17 13:59 | 显示全部楼层
tgwfcc 发表于 2016-5-17 11:24
刚才那个写错了,
#define AHBPERIPH_BASE        (PERIPH_BASE + 0x18000)
#define SDIO_BASE           ...

其他外设地址定义有没有用到AHBPERIPH_BASE?
如果用到了,也许只是别人懒得改
 楼主| 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

粉丝
快速回复 在线客服 返回列表 返回顶部