片上外设区分为四条总线,根据外设速度的不同,不同总线挂载着不同的外设,APB1挂载低速外设,APB2和AHB挂载高速外设。相应总线的最低地址我们称为该总线的基地址,总线基地址也是挂载在该总线上的首个外设的地址。APB1总线的地址最低,因此片上外设就从这这个地址开始,也称外设基地址。

总线基地址

从存储器映射那张图的Block2可以看到,分为4大块,每块都有一个起始地址,这个起始地址就是基地址,然后到下一块起始地址的时候就会和前一块地址出现偏差,这个差值就是偏移量,即相对基地址的偏移量。如下图所示。

从上图可以看到APB1总线基地址是0x4000 0000,相对外设基地址的偏移量是0,所以此总线也是外设Block2的基地址。

外设基地址

每条总线上都会挂接着很多的外设,这些外设也会有自己的地址范围,XXX 外设的首个地址即最低地址就是XXX外设的基地址,也称作XXX边界地址。有关STM32F1xx 外设的具体边界地址可以参考《STM32F1xx 中文参考手册》P28页, 里面有详细的介绍。 这里我们就以GPIO外设来讲解外设基地址。其他的外设也是同样分析。GPIO外设基地址如下图所示。

从图中可以知道,外设GPIOx都是挂接在APB2总线上,属于高速的外设,而APB2总线的基地址是0x4001 0000,故GPIOA的相对APB2总线的地址偏移是800。

外设寄存器地址

XXX外设的寄存器就分布在其对应的外设地址范围内。这里我们以GPIO外设为例,GPIO是通用输入输出端口的简称,可以通过软件来控制其输入和输出。GPIO有很多个寄存器,每一个都有特定的功能。每个寄存器为32bit,占四个字节,这些寄存器都是按顺序依次排列在外设的基地址上。寄存器的位置都以相对该外设基地址的偏移地址来描述。这里我们以GPIOC端口为例,来说明GPIO都有哪些寄存器,如下图所示。

这里就以GPIOC_BSRR寄存器来教大家如何看《STM32F1xx 中文参考手册》内寄存器的说明。 如果想要了解更多的寄存器内容, 可以参考《STM32F1xx中文参考手册》相应寄存器外设部分。首先我们需要打开参考手册,找到GPIO外设章节,里面会有一个GPIO寄存器,只要找到我们所要查找的寄存器即可,如下图所示。

下面我们就对上图进行分析,带领大家这么获取其中的信息。

A.红色框 4 表示的我们所查找寄存器的名称,寄存器GPIOx_BSRR内的x表示的是STM32GPIO端口,范围是A-E,也就是说在GPIOA、GPIOB等端口中都有这个寄存器。

B.红色框5表示的是相对GPIOx地址的偏移值,比如现在我们使用的是GPIOC外设,其基地址是0x40011000,那么本寄存器GPIOx_BSRR地址=0x40011000+0x10=0x40011010。对于其他的GPIO外设也是一个原理。

C.红色框6和7表示的是寄存器的位表。其中6表示寄存器编号,因为一个寄存器是32bit,所以范围是0-31。7表示的是相应位的权限,w:只写,r:只读,rw:可读可写。本寄存器位权限是w,所以只能写,如果试图读本寄存器,是无法保证读取到它真正内容的。而有的寄存器位权限为只读,一般是用于表示STM32 外设的某种工作状态的,由STM32硬件自动更改,通过读取那些寄存器位来判断外设的工作状态。

D.红色框 8 是寄存器位功能说明。这个也是寄存器说明中最重要的部分,它详细介绍了寄存器每一个位的功能。例如本寄存器中有两种寄存器位,分别为BRy及BSy,其中的y数值表示的是管脚号,可以是0-15。如BR0、BS0用于控制GPIOx的第0个引脚,若 x 表示GPIOC,那就是控制GPIOC的第0引脚,而BR1、BS1就是控制GPIOC第1个引脚。

其中BRy引脚的说明是“ 0:不会对相应的ODRx位执行任何操作;1:对相应ODRx位进行复位”。这里的“复位”是将该位设置为0的意思,而“置位”表示将该位设置为1;说明中的ODRx是另一个寄存器的寄存器位,我们只需要知道ODRx位为1的时候,对应的引脚x输出高电平,为0的时候对应的引脚输出低电平即可。感兴趣的可以查询该寄存器GPIOx_ODR的说明来了解。

所以,如果对BR0写入“ 1”的话,那么GPIOx的第0个引脚就会输出“低电平”,但是对BR0写入“0”的话,却不会影响ODR0位,所以引脚电平不会改变。要想该引脚输出“高电平”,就需要对“BS0”位写入“1”,寄存器位BSy与BRy是相反的操作。

嵌入式开发直播课 - 深度剖析STM32:时钟系统 - 创客学院直播室​www.makeru.com.cn

寄存器相互映射是什么意思_STM32入门系列-STM32外设地址映射相关推荐

  1. esp32 rtc 时钟设置不对_STM32入门系列-STM32时钟系统,STM32时钟树

    时钟对于单片机来说是非常重要的,它为单片机工作提供一个稳定的机器周期从而使系统能够正常运行.时钟系统犹如人的心脏,一旦有问题整个系统就崩溃.我们知道STM32属于高级单片机,其内部有很多的外设,但不是 ...

  2. 96KB存储器的怎么算地址范围_STM32入门系列-存储器与寄存器介绍

    我这有30套嵌入式创客开发板 需要的朋友加13260562029 介绍两部分内容: 什么是存储器映射 什么是寄存器及寄存器映射 为了让大家对存储器与寄存器有一个更清楚的认识,并且为之后使用 C 语言来 ...

  3. c++ 结构体初始化_STM32入门系列-使用库函数点亮LED,LED初始化函数

    要点亮LED,需要完成LED的驱动, 在工程模板上新建一个led.c和led.h文件,将其存放在led文件夹内.这两个文件需要我们自己编写. 通常xxx.c文件用于存放编写的驱动程序,xxx.h文件用 ...

  4. 学习和理解STM32F103系列芯片的地址映射和寄存器映射原理;了解GPIO端口的初始化设置三步骤(时钟配置、输入输出模式设置、最大速率设置)。

    ​​ 目录 一:什么是寄存器 1. 2. 二.程序设计思路 1.GPIO模式 2.存储器空间 3.存储器映射 4.寄存器操作 三.GPIO寄存器 STM32 GPIO口的工作模式: 四.总结: ​​​ ...

  5. hal库选择滴答时钟函数_STM32入门 : HAL库、标准外设库、LL库

      国内使用STM32 单片机的人很多,ST 为开发者提供了非常方便的开发库:有标准外设库(SPL 库).HAL 库.LL 库 三种.前者是ST的老库,后两者是ST现在主推的开发库,其中 LL 库是 ...

  6. STM32F103五分钟入门系列(二)GPIO的七大寄存器+GPIOx_LCKR作用和配置

    摘自:STM32F103五分钟入门系列(二)GPIO的七大寄存器+GPIOx_LCKR作用和配置 作者:自信且爱笑' 发布时间: 2021-05-01 12:08:32 网址:https://blog ...

  7. STM32F103五分钟入门系列(一)跑马灯(库函数+寄存器)+加编程模板+GPIO总结

    摘自:STM32F103五分钟入门系列(一)跑马灯(库函数+寄存器)+加编程模板+GPIO总结 作者:自信且爱笑' 发布时间: 2021-04-28 21:17:40 网址:https://blog. ...

  8. Iptables DNAT实现broadcast与unicast之间相互映射

    shixudong@163.com 疫情期间,因工作需要远程唤醒办公电脑(已通过wireguard组网),以前通过在家里树莓派上运行wolf(Wake on Lan Forwarder)实现网络唤醒包 ...

  9. xgboost 正则项_XGBoost入门系列第一讲

    Boosted Trees 介绍 XGBoost 是 "Extreme Gradient Boosting"的简称,其中"Gradient Boosting"来 ...

最新文章

  1. 那些年追过的......写过的技术博客
  2. 获取android的SDK或者手机目录路径
  3. 服务器给站点读写权限,IIS7目录权限设置的问题详解Windows服务器操作系统 -电脑资料...
  4. 文件操作-读取文件后文件指针会发生变化
  5. bi可视化工具_适用于您的BI解决方案的最佳数据可视化和Web报告工具
  6. python作业第四周答案_Python3第四周作业——员工信息表程
  7. SAP License:20个公司绝对不会告诉你的潜规则
  8. 三行代码实现冒泡排序算法
  9. 我对ThreadLocal的一些理解 内存泄露啥的
  10. 六自由度机械手正逆运动学
  11. Windows 7声卡驱动一键修复精灵3.0完美版(2009年11月9日发布)
  12. DES算法理解--附《密码编码学与网络安全(第七版)》课后练习题答案
  13. 记一次zip压缩包打开异常问题
  14. 使用eclipse时出现cannot access compilation unit的解决方法
  15. vue实现跑马灯抽奖
  16. python学了没有用_如何用Python进行无监督学习
  17. win10系统桌面快捷方式图标变为白色方块如何解决
  18. HTML3个炫酷代码
  19. 模拟重力场(多方向运动+碰撞检测+重力加速度+能量损失)
  20. SelectObject和DeleteObject函数

热门文章

  1. AMD桌面处理器Roadmap也已泄露
  2. 沟通科技:将引领接入革命第三次浪潮
  3. 报表式CListCtrl的使用详解初稿
  4. 购买MP3必备资料 各大芯片方案齐齐数
  5. 我认为必须要学的前端技能和架构体系
  6. QuillBot:又一个值得拥有的论文润色工具
  7. 主成分分析的可视化展示
  8. 机器学习算法-随机森林之决策树R 代码从头暴力实现(2)
  9. java win10 通知_如何在Java中创建Windows通知
  10. 11届蓝桥杯青少年组C++全国赛高级组 八.编程实现:计数(python3实现)