stm32学习笔记之寄存器、地址空间映射

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lyb8010/article/details/91414130

一、相关概念:

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

猜你喜欢

转载自blog.csdn.net/lyb8010/article/details/91414130