【【萌新的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),以此类

推。

相关推荐
irislinAmelia3 小时前
缺陷检测AI关键点在哪
人工智能·嵌入式硬件·1024程序员节
宝绿特塑业再生科技3 小时前
改性HDPE再生颗粒在户外家具挤出发泡板材中的色差控制与高品质价值重构
经验分享·科技·学习·生活·1024程序员节·户外家具
糖糖单片机设计4 小时前
基于 STM32 的植物生长环境监控系统
stm32·单片机·嵌入式硬件
创界工坊工作室4 小时前
56-基于STC89C52的智能声控饮水机设计
stm32·单片机·嵌入式硬件·51单片机·proteus
LCG米4 小时前
STM32 DMA 多通道链式传输实测:请求仲裁顺序错位根因、半满中断乒乓与高速并发搬运落地
stm32·单片机·嵌入式·1024程序员节
hkj88084 小时前
stm32 ADC DMA 循环模式配合双缓冲分块(Ping-Pong)
stm32·单片机·嵌入式硬件
andrsted6 小时前
练题簿在线免费刷题:让整理过的资料,变成能反复练习的题库
学习·微信小程序·小程序·学习方法·刷题·1024程序员节
POMAGTOR6 小时前
【磁吸式连接器选型工程解析:结构原理、应用场景与选型可靠性要点】
网络·嵌入式硬件
Alsn867 小时前
Windows 安装 Ollama 及本地模型部署
学习·1024程序员节
RFID科技的魅力8 小时前
2026 年 RFID 资产标签批量制作怎么做?RFID 标签打印机实操指南
运维·人工智能·嵌入式硬件·物联网