stm32地址偏移:为什么相邻寄存器的地址偏移量0x04表示4个字节?

初学stm32,不是很理解为什么类似如下图所示的地址偏移0x04表示四个字节的偏移,转换为十进制的话,0x04=4;转换为二进制,0x04=00000100,怎么都不会是四个字节,32位!

后来在网上查阅资料后发现,我可能混淆了0x04这个16进制数值本身,首先从为什么相邻寄存器的地址偏移量是0x04开始分析,有如下两个原因:

1. 32位处理器架构

  • STM32是32位处理器
  • 每个寄存器都是32位宽度(4个字节)
  • 即使某些寄存器只使用部分位,仍按32位分配空间

2. 内存对齐要求

  • 字对齐:32位数据必须存储在能被4整除的地址上
  • 性能优化:对齐的内存访问比非对齐访问快得多
  • 硬件简化:简化地址解码逻辑

所以地址偏移需要设置为4个字节。其次最重要的是,在stm32中每个地址单位代表1个字节,

  1. 从0x40020000到0x40020004,地址相差了4
  2. 在16进制中,0x04 = 4(十进制)
  3. 所以0x04的偏移实际上是4个字节,不是1个字节

总的来说,相邻寄存器的地址偏移量0x04并不只是一个数字,它是有单位的,代表偏移量为0x04个地址单位,也就是4个字节,如下所示。

TypeScript 复制代码
地址范围         寄存器     字节位置
0x40020000 ┐
0x40020001 │    CRL      4个字节
0x40020002 │    (32位)   
0x40020003 ┘

0x40020004 ┐              ← 这里开始下一个寄存器
0x40020005 │    CRH      4个字节  
0x40020006 │    (32位)
0x40020007 ┘

关键要点就是记住这个公式:

地址偏移量(16进制) = 实际字节数(10进制)

0x04 = 4字节偏移

0x08 = 8字节偏移

0x0C = 12字节偏移

而并非

❌ 0x04 = 1个字节偏移

❌ 0x04 = 第4个偏移单位

相关推荐
艾芯微科技11 小时前
SKY13370‑374LF|0.5‑6GHz SPDT 射频开关,WLAN/LTE 射频前端实用器件
网络·单片机·嵌入式硬件·集成测试·51单片机
jianqiang.xue12 小时前
收官:从v0.1到“研发新常态“,一套嵌入式智能体的落地与边界
stm32·单片机·物联网·架构·esp32
HUI-47413 小时前
EG1131|SOT23‑6 30V/1.5A 电流模式同步降压 DC‑DC,小体积消费类电源优选
嵌入式硬件·硬件工程
天空'之城13 小时前
单片机基础核心知识点汇总(三十)
单片机·嵌入式硬件
笨笨饿13 小时前
#137_死机恢复现场_Armino平台AP系统swd调试
git·python·stm32·单片机·嵌入式硬件·物联网·vim
linnux领域13 小时前
面包板供电“插哪都不亮“?一个暗断点引发的排查——硬件新手三板斧
单片机·嵌入式硬件·esp32·arduino·面包板·硬件入门
Jaixln_HRF13 小时前
芯维尔CN8010 1.2A/6V同步降压转换器芯片,集成350/230mΩ MOSFET与1.5MHz高频,用于汽车电子/IoT/便携仪器
嵌入式硬件·物联网·硬件工程
ACP广源盛1392462567315 小时前
M6/M5 Pro Mac mini 端侧 AI 落地@ACP#IX6024 PCIe2.0 交换芯片在轻量化 AI 服务中的机会与应用场景
大数据·数据库·人工智能·嵌入式硬件·macos·开源
深圳市恒锐丰科技杨生15 小时前
EG2124A 260V 三相独立半桥栅极驱动芯片|BLDC 外置 MOS 三相桥驱动方案
嵌入式硬件·硬件工程
学linux的QQ蛋16 小时前
吃透传输层:UDP 无连接、TCP 可靠传输、套接字函数、粘包问题详解
单片机·tcp/ip·udp