下面是库函数操作RCC流程,看完后有我的疑问:偏移地址的理解

1,库函数直接操作:RCC库函数操作  RCC_APB2PeriphClockCmd ()
RCC->APB2ENR |= RCC_APB2Periph:       //->为结构体运算符,指向RCC结构体内成员APB2ENR
问题引导:RCC中APB2ENR变量和APB2ENR寄存器的关系

2,库函数过程定义—RCC_TypeDef成员定义
成员如下:                             
01078   __IO uint32_t CR;         
01079   __IO uint32_t CFGR;       
01080   __IO uint32_t CIR;      
01081   __IO uint32_t APB2RSTR;
01082   __IO uint32_t APB1RSTR;
01083   __IO uint32_t AHBENR;
01084   __IO uint32_t APB2ENR;
01085   __IO uint32_t APB1ENR;
01086   __IO uint32_t BDCR;
01087   __IO uint32_t CSR;     
} RCC_TypeDef;

结构体中申请了10个32位的变量,其中包含APB2ENR变量

3,底层操作:地址定义
#define RCC                 ((RCC_TypeDef *) RCC_BASE)
((RCC_TypeDef *) RCC_BASE):表示在RCC_BASE基地址申请了一个结构体,结构体RCC_TypeDef包含10个Uint32成员 CR,CFGR……;他们在基地址上开辟了连续的10个32变量的存储空间,
上面宏定义把RCC宏定义到stm32RCC寄存器的分配的存储器单元的首地地址,

问题来了: 库函数结构体RCC_TypeDef定义了10个32位的变量,,刚好10个寄存器也是32位的,似乎变量和寄存器对应,但是偏移地址怎么理解。

解答:偏移地址 是对基地址而言,寄存器的绝对地址是基地址加偏移地址。所以一般外设定义时,将基地址赋给变量即可。。而结构体里的分量正好对着偏移地址了。

以RTC的映像地址举个例子:

在stm32f10x.h中可以找到如下定义:
#define PERIPH_BASE           ((uint32_t)0x40000000) /*!< Peripheral base address in the alias region */
#define APB1PERIPH_BASE       PERIPH_BASE
#define RTC_BASE              (APB1PERIPH_BASE + 0x2800)

最新文章

  1. for xml path 将单表中一个字段用逗号分隔
  2. foreach为什么要实现IEnumerable接口而不是直接用IEnumerator接口
  3. 利用GBDT模型构造新特征
  4. JS思维之路菜鸟也能有大能量(2)--模拟数组合并concat
  5. myeclipse10安装findbugs
  6. Check the difficulty of problems
  7. 关于this指向思考
  8. saltstack实战2--远程执行之模块(Modules)
  9. 自己动手写一个编译器Tiny语言解析器实现
  10. PHP 16: MySql的数据库访问
  11. 【转】安卓布局:layout_weight的理解
  12. JS base64 加密和解密
  13. 自行搭建私有云ownCloud,启用SSL,其他配置
  14. 咖啡师之路:第一日一杯Espresso
  15. python模块学习:os模块
  16. iOS监听模式系列之本地通知Notification
  17. ML.NET 发布0.11版本:.NET中的机器学习,为TensorFlow和ONNX添加了新功能
  18. 【网络】IP子网划分详解
  19. HDU/HDOJ 2087 剪花布条
  20. centos7 go ENV 部署

热门文章

  1. IplImage转为Mat的方法
  2. 光标显示样式 css 中 cursor 属性使用
  3. IDEA 打包jar
  4. 使用g++ 编译C++程序
  5. MSMQ学习笔记二——创建Message Queue队列
  6. node.js 练习1
  7. 遍历ResultSet,行列要从1开始
  8. 移除input number上的spinner
  9. 第24章 SPI—读写串行FLASH—零死角玩转STM32-F429系列
  10. web的监听器,你需要知道这些...