前段时间第一次接触stm32地址偏移的概念时,非常的困惑,以GPIO寄存器为例,为什么相邻寄存器的偏移地址是0x04?
答:首先大家要弄明白两个概念
1、 寄存器地址 != 内存空间,寄存器地址只是内存空间的编号,它不占据寄存器的物理空间,根据这个编号CPU可以改变寄存器内部的实参(利用指针)。
2、stm32中的内存单元为一个字节(8位),寄存器占据32位的内存空间(4个内存单元)。
以GPIO两个相邻寄存器为例,如下图所示:
将0x04转换为我们熟悉的十进制数等于4,“偏移地址:0x04”的意思就是:在空间上偏移4个内存单元

/································以下为原答案,作为错误理解演示·······················/
困惑1:当时以为,0x04是一个十六进制数,由8个二进制数组成,所以偏移地址实际上偏移了8位。然而教学视频上一再强调,偏移地址0x04是偏移了4个字节(32位)。
解惑1:由于产生困惑1的时候,C语言的基础不好,连基本的进制转换都会头晕,所以去补了补C语言的基础知识。粗略看了C语言基础后感觉豁然开朗,认为0x01是2个十六进制数一共是8位,那4个0x01等于0x04就是32位,然后就又困惑了。
困惑2:既然2个十六进制数可以表示8位,那0x02可以表示8位,偏移32位就是4个0x02相加等于0x08,为什么相邻寄存器偏移地址不是0x08?
解惑2:地址的偏移是一个空间上的概念,而我将十六进制的地址理解成单纯的数值,实际上它表示内存空间。stm32将32位的内存空间作为一个内存单元,所以相邻寄存器之间的地址相差32位(4个字节)。2个十六进制数可以表示8位(一个字节),4个十六进制数表示32位(4个字节)。这里的0x01并不是一个单纯的十六进制数,而是表示基地址后第一个8位的内存空间,0x04表示前四个连续的8位的内存地址,也就是基地址后的32位的内存空间,所以相邻寄存器的地址偏移量是0x04。
困惑3:当我写完解惑2后以为自己全明白了,然后突然困惑了,为什么不直接使用偏移地址0x0000 0001表示基地址之后的第一个32位空间,救救孩子吧!
解惑3:(只是猜测)我们现在所看到的stm32的寄存器地址,实际上都是最初的基地址0x0000 0000由字节偏移得到的。偏移量0x04叫做字节偏移,那么偏移量0x0000 0001就是字偏移。如果使用字偏移作为地址的偏移规则,那么我们现在所看到的地址数值,比如GPIOA基地址0x4001 0800数值上应该会小很多,但它们表示的内存空间理论上都是相同的。

stm32地址偏移:为什么相邻寄存器的地址偏移量是0x04?相关推荐

  1. 简单解释:STM32参考手册的地址偏移和复位值

    如图所示: 1.STM32是将32位作为一个内存单元,所以相邻寄存器之间相差32位. 2个十六进制数可以表示8位(一个字节),4个16进制数才可以表示32位(4个字节),地址偏移0x01实际上只偏移了 ...

  2. gg修改器偏移量修改_烧饼修改器地址偏移计算器功能使用说明

    烧饼修改器2.5版本即将在11月份推出,该版本强化了加速器,支持更多的游戏:新增了强制加速模式,支持3D游戏:最大的特色就是新增了地址偏移计算器,修改起来更加的方便,下面演示地址偏移计算器功能的详细使 ...

  3. 【STM32存储器映射-寄存器基地址-偏移】

    前言 在学习STM32的时候,我们看到很多的寄存器编程, 比方说LED灯: //GPIOB.5端口输出高电平GPIOB->ODR|=1<<5; //PB.5 输出高GPIOE-> ...

  4. STM32 地址偏移问题及怎么运用

    STM32 地址偏移问题 就举一个例子哦 其他类推 我就举STM32  里面一个结构体吧! //以下函数或者定义不是在一起的,我只是把他们拉出来,也说明是相关联的!#define __I volati ...

  5. 关于在Windows64上编译程序出现相邻变量地址偏移相差32字节问题

    最近看到粉丝向我提交的问题,他本想写一段程序,就是通过变量A获取变量B的地址并打印 代码如下: #include <stdio.h>int test(int a,int b){int* p ...

  6. GPIO寄存器的地址怎么寻找?

    由上图知,GPIOC的地址就是在这个PERIPH_BASE地址的基础上偏移得到得. 我们可以一步一步的计算一下GPIOC的地址是多少. 0x40000000 + 0x10000 + 0x1000 == ...

  7. 【笔记】汇编..寄存器和地址的概述

    /*权展开式原来是这样 FF -> 1111 1111*/[本章重点]1.14个16位寄存器,8个8位寄存器2.8086/8088七种寻址方式3.8086/8088各种指令 汇编和cpu的关系. ...

  8. 树莓派4B 寄存器基地址查询

    树莓派4B 寄存器基地址查询 树莓派4B的datasheet在我看来非常混乱复杂,尤其是地址映射方面.单datasheet就有两个版本而且还自相矛盾.为了查找到确定的物理地址,使用官方提供的函数进行读 ...

  9. 【汇编语言】寄存器和地址

    寄存器和地址 文章目录 寄存器和地址 一.寄存器 (1)透明寄存器 (2)可编程寄存器 1.通用寄存器 2.专用寄存器 二.地址 (1)存储模型 (2)存储空间分段管理 (3)物理地址与逻辑地址 1. ...

最新文章

  1. 操作系统【逻辑空间、物理空间与页表大小的关系】【分页地址映射(方法+例题)】
  2. 电子词典系统vc++_电子词典系统
  3. Virtualbox桥接网卡设置
  4. 学习笔记(24):Python网络编程并发编程-进程与线程的区别
  5. Spring Data JPA 从入门到精通~EntityManager介绍
  6. 15分钟,教你用Python爬网站数据,并用BI可视化分析!
  7. (139)FPGA面试题-FPGA设计中的速度和面积互换原则
  8. TensorFlow2.0:模型的保存与加载
  9. 深入了解VPP关键技术有哪些?
  10. asp.net ashx导出excel到前台
  11. w3wp oracle连接数高,分析案例:應用服務器W3WP進程CPU持續超過百分之九十(Oracle客戶端Bug)...
  12. 分片报文的最后一片_分片报文攻击防范 - CloudEngine 12800, 12800E V200R005C10 配置指南-安全 - 华为...
  13. Atitit webservice之道 艾提拉著 目录 1. 基本说明Web Service 1 2. 基本概念与内部构成 2 2.1. Web services要使用两种技术: XML SOAP
  14. 如何使用c语言制作微信小程序,不懂代码如何制作微信小程序?微信小程序的步骤?...
  15. 栈——栈的定义及基本操作(初始化、判空、进栈、出栈、遍历栈、销毁栈等)
  16. 分享一个查看外网IP的工具
  17. python中倒背如流_倒背如流中倒背是什么意思古代有种背书方法是倒背,倒
  18. 【PPT】《使用ChatGPT一键制作带自动配图的PPT演讲稿》- 知识点目录
  19. python下的考勤签到系统
  20. IP数据报的检验(计算机网络)

热门文章

  1. css阴影怎么添加,css如何为div添加阴影效果
  2. 计算机bios设置翻译,电脑bios 中文翻译 详细图文教程
  3. 十大经典排序之冒泡排序
  4. MATLAB-dxf文件的绘制
  5. ipad文件管理怎么添加服务器,ipad文件夹在哪里 怎么管理
  6. 抠图软件哪个最好用?这三款亲测简单、有效、功能强
  7. 神奇的运放--你都了解了吗?
  8. Android历史版本详解
  9. 大学生兼职平台设计思路
  10. lombok 的 val 与 var