一 微控制器的内存计算
1.1 stm32的内存
Stm32的存储单元是1字节(8跟数据线)
由于有32根地址线 所以寻址范围为2的32次方
所以内存等于2的32次方*1byte 约等 4GByte
下面的图是举例
1.2地址线与数据线
地址线计算寻址范围 寻址范围= 2的地址线次方
数据线计算存储单元 存储单元=数据线/8 字节
二 stm32的寄存器
2.1寄存器分类
分为内核寄存器与外设寄存器 其中内核是以arm为架构的芯片 根据其他厂商对不同外设生成了其他芯片 如stm32gd32ch32
2.2寄存器映射![277be58a22ca4c619633409056b78ca6.png](https://img-blog.csdnimg.cn/277be58a22ca4c619633409056b78ca6.png)
如图
2.3寄存器描述
如图
寄存器位表可以查找到寄存器地址 方便库对寄存机进行映射
其中 偏移量是对于某个基地址比较 类似一主机多从机的关系 所有偏移量都对比一个基地址 而基地址不固定
寄存器地址为
该外设总线的基地址+外设偏移量+外设寄存器偏移量
下图为例
2.3.1hal库中的寄存器映射![4ed2ff28347146358f8a2d61f67fb39c.png](https://img-blog.csdnimg.cn/4ed2ff28347146358f8a2d61f67fb39c.png)
如图为一个正常的按地址寻找寄存器 并赋值
使用指针强转找到为4001080C的地址 取值赋值
根据上面的寄存器描述可以发现每个寄存器之间的偏移量为四个字节 如果使用 一个都是四个字节的变量的结构体 可以实现自动向下寻址
上面三个图的映射思路:
1初始化一个结构体 对应手册包含了各种寄存器
2将这个结构体的定义进行寄存器地址映射 再通过宏定义讲结构体变为结构体指针
3通过结构体中的变量大小可以自动的进行地址映射进而进行操控
补充...