当前位置: 首页 > news >正文

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个字节,如下所示。

地址范围         寄存器     字节位置
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个偏移单位 

http://www.dtcms.com/a/268196.html

相关文章:

  • 探寻《答案之书》:在随机中寻找生活的指引
  • Python 中 Pendulum 库的详细使用:更精确的日期时间处理
  • Ubuntu20.04安装mujoco210, mujoco-py时的报错处理
  • 深度特征提取在LIDC-IDRI数据集多分类任务中的优化细节
  • 【数据治理】要点整理-《信息技术服务治理第3部分:绩效评价》GB/T 34960.3-2017
  • MyBatis实战指南(九)MyBatis+JSP+MySQL 前端页面实现数据库的增加与删除显示数据
  • std::vector<bool>有什么特殊的吗
  • 基于拓扑结构检测的LDPC稀疏校验矩阵高阶环检测算法matlab仿真
  • Redis集群和 zookeeper 实现分布式锁的优势和劣势
  • leetcode71.简化路径
  • WPF学习笔记(26)CommunityToolkit.Mvvm与MaterialDesignThemes
  • 如何正确规范的开发术语自己的TYPECHO插件
  • AI做美观PPT:3步流程+工具测评+避坑指南
  • LeetCode 算法题解:链表与二叉树相关问题 打打卡
  • ubuntu 20.04 安装中文输入法 (sougou pin yin)
  • std::forward作用
  • day53
  • 微服务负载均衡全解析:从原理到实践
  • 【Note】《Kafka: The Definitive Guide》第三章: Kafka 生产者深入解析:如何高效写入 Kafka 消息队列
  • HarmonyOS学习6 --- 数据存储
  • windows系统安装mongoDB且创建集合植入初始化数据
  • vue事件处理-按键修饰符
  • 闲庭信步使用图像验证平台加速FPGA的开发:第一课——由测试平台到验证平台
  • CSS06:字体样式
  • 数据结构---链表结构体、指针深入理解(三)
  • Petalinux工程如何离线编译
  • C++ 中左值和右值
  • 论文评价指标之(n-gram、BLEU、MRR、ANLS)
  • python库 maya 库的各种案例的使用详解(人性化的日期时间处理)
  • 使用Python将PDF转换成word、PPT