【【萌新的STM32学习-5 寄存器地址计算】】

萌新的STM32学习-5 寄存器地址计算

寄存器映射的两个问题
1.地址怎么计算
2.映射的方法

为了方便代码的编写及使用,我们将寄存器地址分为三个部分

1.总线基地址 :(BUS_BASE_ADDR)

2.外设基于总线基地址的偏移量
(PERIPH_OFFSET)
3.寄存器相对于外设基地址的偏移量

寄存器地址=总线基地址+外设基于总线基地址的偏移量+寄存器相对于外设基地址的偏移量
把上面三个加起来
在这里插入图片描述
APB1总线基地址也叫外设基地址
PERIPH_OFFSET
在这里插入图片描述
在这里插入图片描述
GPIOA是挂在APB2上的

了解到这些之后我们可以计算寄存器地址
假设有一个寄存器GPIOA_ODR
1.获取外设挂在那个总线上 —查系统结构图
2.获取总线基地址 APB2 总线基地址
0x40010000
3.获取外设地址偏移量,GPIOA相对于APB2 的总线偏移量 是0x800
4.获取寄存器地址的偏移量,ODR相对于GPIOA外设基地址的偏移量是0x0c
在这里插入图片描述
在这里插入图片描述
现在介绍的方法是用结构体的形式映射,因为结构体依次排布 那么他的内存空间也是依次的 你观察前面的信息就能看出来 只要我们再设置的时候确定基地址的位置 就能找准其他的地址量
在这里插入图片描述
在这里插入图片描述
以上三部分代码,就完成了STM32F103内部GPIOA~GPIOG的寄存器映射,其原理其实是
比较简单的,包括两个核心知识点:1,结构体地址自增;2,地址强制转换;
结构体地址自增,我们第一步就定义了GPIO_TypeDef结构体类型,其成员包括:CRL、CRH、
IDR、ODR、BSRR、BRR和LCKR,每个成员是uint32_t类型,也就是4个字节,这样假设:CRL
地址是0的话,CRH就是0X04,IDR就是0X08,ODR就是0X0C,以此类推。
地址强制转换,以GPIOB为例,GPIOB外设的基地址为:GPIOB_BASE(0X4001 0C00),
我们使用GPIO_TypeDef将该地址强制转换为GPIO结构体类型指针:GPIOB,这样GPIOB->CRL
的地址就是:GPIOB_BASE(0X4001 0C00),GPIOB->CRH的地址就是:GPIOB_BASE + 0X04
(0X4001 0C04),GPIOB->IDR的地址就是:GPIOB_BASE + 0X08(0X4001 0C08),以此类
推。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值