一、相关概念:
1、寄存器:中央处理器内的组成部分。寄存器是有限存贮容量的高速存贮部件,它们可用来暂存指令、数据和地址。
2、寄存器的地址:STM32给不同的寄存器分配了不同的地址
3、STM32的IO端口有八种模式:
1)、输入浮空 5)、开漏输出
2)、输入上拉 6)、推挽输出
3)、输入下拉 7)、推挽复用
4)、模拟输入 8)、开漏复用
每个IO口都有七个寄存器来控制:
CHL、CHR :端口配置寄存器(32位)
IDR、ODR :数据寄存器(32位)
BSRR :置位/复位寄存器(32位)
BRR :复位寄存器(16位)
LCKR :所存寄存器(32位)
其中,比较常用的IO端口寄存器为CRL,CRH,IDR,ODR
4、线性地址到物理地址的映射:
逻辑地址(虚拟地址) --- 分段 --> 线性地址 --- 分页 ---> 物理地址
线性地址(Linear Address)是逻辑地址到物理地址变换之间的中间层。在分段部件中逻辑地址是段中的偏移地址,然后加上基地址就是线性地址。
如果没有启用分页机制,线性地址就是物理地址,分段式 x86 CPU 必须启用的,不能关闭 (stm32没有查到有分页机置)
线性地址概念:https://baike.baidu.com/item/%E7%BA%BF%E6%80%A7%E5%9C%B0%E5%9D%80/9013682?fr=aladdin
5、GPIOA各个寄存器的实际地址
寄存器 偏移地址 实际地址=基地址+偏移地址
GPIOA->CRL 0x00 0x40010800+0x00
GPIOA->CRH; 0x04 0x40010800+0x04
GPIOA->IDR; 0x08 0x40010800+0x08
GPIOA->ODR 0x0c 0x40010800+0x0c
GPIOA->BSRR 0x10 0x40010800+0x10
GPIOA->BRR 0x14 0x40010800+0x14
GPIOA->LCKR 0x18 0x40010800+0x18
6、每个GPIO端口有:
两个32位配置寄存器 GPIOx_CRL GPIOx_CRH
两个32位数据寄存器 GPIOx_IDR GPIOx_ODR
一个32位置位/复位寄存器 GPIOx_BSRR
一个16位复位寄存器 GPIOx_BRR
一个32位锁定寄存器 GPIOx_LCKR
7、stm32三大总线: AHB总线,APB1总线,APB2总线
不同的外设挂载在不同的总线上边。比如GPIO,串口1,ADC以及部分定时器挂载在APB2总线上
8、Cortex-M3 与中密度stm32的存储器映射对比
STM32F1的存储器的映射 |
Cortex-M3的存储器映射 |
9、逻辑地址、线性地址、物理地址:https://www.cnblogs.com/X-W-LIU/p/3455734.html
10、每一组GPIO端口有10组寄存器配置,有些IO口有16个引脚,32位就是每两位控制一个引脚:https://ke.qq.com/webcourse/index.html#cid=279403&term_id=100330877&taid=1965359855059819&vid=n1423jlur6g
二、寄存器及寄存器映射
1、参考网址:
https://www.jianshu.com/p/684c5d9dfd7a 寄存器及寄存器映射
https://www.cnblogs.com/mrgsf/p/6868041.html STM32 存储器映射和寄存器映射
三、标准C运算符
参考网址:https://www.w3cschool.cn/c/c-operators.html