STM32 地址偏移问题

就举一个例子哦 其他类推

我就举STM32  里面一个结构体吧!

//以下函数或者定义不是在一起的,我只是把他们拉出来,也说明是相关联的!#define     __I     volatile const      /*!< defines 'read only' permissions只读      */
#define     __O     volatile            /*!< defines 'write only' permissions 只写    */
#define     __IO    volatile            /*!< defines 'read / write' permissions可读写 */
typedef unsigned           int uint32_t;
#define PERIPH_BASE           ((uint32_t)0x40000000) /*!< Peripheral base address in the alias region片1基地址 */
#define APB2PERIPH_BASE       (PERIPH_BASE + 0x10000)//片1地址+偏移地址
#define GPIOB_BASE            (APB2PERIPH_BASE + 0x0C00)//桥2地址+偏移地址 每个GPIOx偏移地址不一样//然后定义结构体
typedef struct
{__IO uint32_t CRL; //地址偏移0x00//注意是32位 占用4个字节  因此每次+4__IO uint32_t CRH; //地址偏移0x04__IO uint32_t IDR; //地址偏移0x08__IO uint32_t ODR; //地址偏移0x0C__IO uint32_t BSRR;//地址偏移0x10__IO uint32_t BRR; //地址偏移0x14__IO uint32_t LCKR;//地址偏移0x18
} GPIO_TypeDef;//注意一下 此时GPIOB是一个指针并初始化了,初始化为GPIOB_BASE,指针类型为(GPIO_TypeDef *)
//并不是GPIOB_BASE的地址 ,是把GPIOB_BASE强制转换为指针 此时GPIOB指向的地址为GPIOB_BASE
#define GPIOB               ((GPIO_TypeDef *) GPIOB_BASE)

 值得注意的是 CRL CRH IDR ...这7个变量,在库文件没有具体的值!说白了没有明显的初始化!其实已经初始化了。

具体怎么初始化的呢?以我的理解,如果有疑问请大佬指正!

//经过查技术资料//GPIOB  的指向地址为:             0x40010C00 //库文件是这样调取 结构体GPIO_TypeDef 的变量的
//调取之前我先说明一件事情
//就是结构体GPIO_TypeDef 里面的变量CRL CRH IDR...具体值是什么?
//首先上面已经说明GPIOB是一个指针,也就是说GPIOB是一个指针,不信可以看具体例程GPIOB->BRR = (((uint32_t)0x01) << pinpos);//随便找的,也只有指针才能这样调取->//说完这个,由于GPIOB是指针 并且指向0x40010C00
//其中CRL CRH IDR...都是定义的是  __IO uint32_t 类型的
//由于结构体定义变量,变量是连续的(但不和数组像)typedef struct
{__IO uint32_t CRL; //地址偏移0x00//注意是32位 占用4个字节  因此每次+4__IO uint32_t CRH; //地址偏移0x04__IO uint32_t IDR; //地址偏移0x08__IO uint32_t ODR; //地址偏移0x0C__IO uint32_t BSRR;//地址偏移0x10__IO uint32_t BRR; //地址偏移0x14__IO uint32_t LCKR;//地址偏移0x18
} GPIO_TypeDef;//这样GPIOB->CLR 指向的地址0x40010C00
//然后GPIOB->CRH 偏移是0x04  指向的地址为(0x40010C00+0x04)0x40010C04
//以此类推....
//这样CRL CRH IDR... 指向的地址已经确定。
//只要GPIO_TypeDef* 确定 地址也就确定了。

STM32 地址偏移问题及怎么运用相关推荐

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

    前段时间第一次接触stm32地址偏移的概念时,非常的困惑,以GPIO寄存器为例,为什么相邻寄存器的偏移地址是0x04? 答:首先大家要弄明白两个概念 1. 寄存器地址 != 内存空间,寄存器地址只是内 ...

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

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

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

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

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

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

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

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

  6. 【patch】x64dbg_2018_10_11导出的内存补丁文件内容如何理解地址偏移(va内存,Rva相对,Fva文件)

    最近分析了一个程序,导出的一个文件 导出菜单 补丁文件gdul4.5.0.5.1337内容: >gdul_win64.exe 0000000000077D32:7E->EB 使用winhe ...

  7. STM32寄存器的简介、地址查找,与直接操作寄存器

    什么是寄存器 提到单片机,就不得不提到寄存器.根据百度百科介绍,寄存器是中央处理器内的组成部分.寄存器是有限存贮容量的高速存贮部件,它们可用来暂存指令.数据和地址. 简单来说,寄存器就是存放东西的东西 ...

  8. 基于8086CPU微处理器的汇编学习之段地址与偏移地址的分析

    人的记忆总是不靠谱的,早在几年前就看过汇编语言,由于没有总结下来资料,所以忘记了很多,所以重新梳理下汇编方面的知识,与君共勉. ------------------------------------ ...

  9. 计算机基地址和偏移地址概念

    首先必须明白 cpu和内存的区别: ·cpu是中央处理器,内存是物理数据存放的地方.cpu不直接存放数据而是通过内存来存放数据. ·cpu和内存之间通过20条地址总线相连接,地址总线就是cpu通过地址 ...

最新文章

  1. RabbitMQ工作线程代码
  2. (75)Verilog HDL系统函数和任务:$readmemh
  3. 支持向量回归预测怎么做_机器学习如何在油气开发预测中发挥作用?
  4. java+tomcat(apr,native)
  5. C++总结:static_cast ,reinterpret_cast
  6. 并发数 = QPS*平均响应时间(转)
  7. JDBC 常用的类和接口--一学就会(欢迎转载)
  8. 基于pt100的温度测量系统设计 c语言程序 四臂电桥,基于PT100热电阻传感器的温度采集系统设计资料...
  9. C# IE环境 - 重置IE( 注册表)
  10. 在MAC下如何显示隐藏文件夹
  11. FOR ALL ENTRIES IN
  12. 导入导出专栏(poi,jxls)
  13. 计算机科学与技术专业为什么要学物理,「物理」一定要好的14个大学专业
  14. 国密(3)- 预主密钥/主密钥计算和Finished消息的加解密
  15. 手游自动化测试基础:方法及流程
  16. SafePoint是什么
  17. jodd发送http请求(util)
  18. Cocos2dx 集成CryptoPP
  19. 使用图片制作3D背景
  20. java.security Cipher 对象详细介绍

热门文章

  1. ACM-ICPC 2018 徐州赛区网络预赛 D. Easy Math
  2. 第二天 PYTHON 基本数据类型 - 数字 - 字符串
  3. [Ubuntu]使用dict/dictd英文字典
  4. Map 3D中程序设置地图中心点
  5. mysql从青铜到王者_青铜到王者,快速提升你MySQL数据库的段位!
  6. Redis添加主节点
  7. Redis操作ZSet相关API
  8. Nacos支持配置的动态更新
  9. RabbitMQ队列持久化
  10. SpringBoot底层注解-@ImportResource导入Spring配置文件