Stm32内存映射学习笔记

b13a2e9e527c476a82478042611755de.png

一 微控制器的内存计算

1.1 stm32的内存

Stm32的存储单元是1字节(8跟数据线)

由于有32根地址线 所以寻址范围为2的32次方

所以内存等于2的32次方*1byte   约等  4GByte

下面的图是举例

458a50388143478db6a68f29061c7161.png

 1.2地址线与数据线

地址线计算寻址范围 寻址范围= 2的地址线次方 

数据线计算存储单元 存储单元=数据线/8    字节

二 stm32的寄存器

2.1寄存器分类

a3497bc3a05f4ebfb3bd861a6e5e067f.png

分为内核寄存器与外设寄存器 其中内核是以arm为架构的芯片 根据其他厂商对不同外设生成了其他芯片 如stm32gd32ch32

2.2寄存器映射277be58a22ca4c619633409056b78ca6.png

如图

2.3寄存器描述d5f46bacd70f487cb3d87cca0afc7615.png 

 如图

寄存器位表可以查找到寄存器地址 方便库对寄存机进行映射

01933987013c4b829ecb57877a279dfc.png

其中 偏移量是对于某个基地址比较 类似一主机多从机的关系 所有偏移量都对比一个基地址 而基地址不固定

寄存器地址为

该外设总线的基地址+外设偏移量+外设寄存器偏移量

下图为例

f8bbdf0947464d5e9f2c33e24eefcc9c.png 2.3.1hal库中的寄存器映射4ed2ff28347146358f8a2d61f67fb39c.png

 如图为一个正常的按地址寻找寄存器 并赋值

使用指针强转找到为4001080C的地址 取值赋值

24582dff1ec147c2acb4851a7444aa9c.png

根据上面的寄存器描述可以发现每个寄存器之间的偏移量为四个字节 如果使用 一个都是四个字节的变量的结构体 可以实现自动向下寻址1ad0fc3f82554114a7889256bb1d37d4.png

3c8bfaff60af47cf8b72d5cbaf49934c.png

上面三个图的映射思路:

1初始化一个结构体 对应手册包含了各种寄存器

2将这个结构体的定义进行寄存器地址映射 再通过宏定义讲结构体变为结构体指针 

3通过结构体中的变量大小可以自动的进行地址映射进而进行操控

0532fa4388ae4b38bcbb5b320eb4f871.png

补充... 

  • 7
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值