STM32入门系列-STM32外设地址映射
片上外设区分为四条总线,根据外设速度的不同,不同总线挂载着不同的外设,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入门系列-STM32外设地址映射的更多相关文章
- STM32入门系列-STM32时钟系统,时钟使能配置函数
之前的推文中说到,当使用一个外设时,必须先使能它的时钟.怎么通过库函数使能时钟呢?如需了解寄存器配置时钟,可以参考<STM32F10x中文参考手册>"复位和时钟控制(RCC)&q ...
- STM32入门系列-STM32时钟系统,自定义系统时钟
在时钟树的讲解中我们知道,通过修改PLLMUL中的倍系数值(2-16)可以改变系统的时钟频率.在库函数中也有对时钟倍频因子配置的函数,如下: void RCC_PLLConfig(uint32_t R ...
- STM32入门系列-STM32时钟系统,STM32时钟树
时钟对于单片机来说是非常重要的,它为单片机工作提供一个稳定的机器周期从而使系统能够正常运行.时钟系统犹如人的心脏,一旦有问题整个系统就崩溃.我们知道STM32属于高级单片机,其内部有很多的外设,但不是 ...
- STM32入门系列-STM32最小系统介绍
STM32最小系统组成 单片机最小系统,也就是能够使得单片机正常运行程序,最少需要连接哪些器件.一般来说,STM32最小系统由四部分组成: 电源电路 复位电路 晶振电路 下载电路 STM32单片机由A ...
- STM32入门系列-STM32时钟系统,时钟初始化配置函数
在前面推文的介绍中,我们知道STM32系统复位后首先进入SystemInit函数进行时钟的设置,然后进入主函数main.那么我们就来看下SystemInit()函数到底做了哪些操作,首先打开我们前面使 ...
- STM32入门系列-使用库函数点亮LED,LED初始化函数
要点亮LED,需要完成LED的驱动, 在工程模板上新建一个led.c和led.h文件,将其存放在led文件夹内.这两个文件需要我们自己编写. 通常xxx.c文件用于存放编写的驱动程序,xxx.h文件用 ...
- STM32入门系列-GPIO结构
已经了解了STM32 GPIO的基本概念及引脚分类.现在来看下STM32 GPIO内部的结构是怎样的.IO端口位的基本结构如下图所示. 从图中可以看出GPIO内部结构还是比较复杂的,只要将这张GPIO ...
- STM32入门系列-学习STM32要掌握的内容
STM32芯片架构 STM32F103系列芯片的系统架构如下: STM32芯片基于ARM公司的Cortex-M3内核,由ST公司设计生产,内核与总线矩阵之间有I(指令).S(系统).D(数据)三条信号 ...
- STM32入门系列-存储器与寄存器介绍
介绍两部分内容: 什么是存储器映射 什么是寄存器及寄存器映射 为了让大家对存储器与寄存器有一个更清楚的认识,并且为之后使用 C 语言来访问 STM32 寄存器内容打下基础.等明白了如何使用 C 语言封 ...
随机推荐
- 网络端口及nmap扫描
端口: 计算机与外界交流的出口,在渗透测试当中常用的端口号: 21号端口FTP:文件传输协议 23号端口Telent :远程登录接口 53号端口 DNS: 域名端口 80号端口HTTP:超文本传输协议 ...
- Kafka 【的这些原理你知道吗】
如果只是为了开发 Kafka 应用程序,或者只是在生产环境使用 Kafka,那么了解 Kafka 的内部工作原理不是必须的.不过,了解 Kafka 的内部工作原理有助于理解 Kafka 的行为,也利用 ...
- Java基础——HashMap
1.HashMap底层的实现 JDK 1.7 中 HashMap 是以数组+链表的形式组成的 JDK 1.8 之后数组+链表/红黑树的组成的,当链表大于 8 并且容量大于 64 时,链表结构会转换成红 ...
- Python-运算符和其优先级
运算符 算数运算符 + - * ** / // % print(4 + 5) print("a" + "b") print([1, 2] + [1, 4]) p ...
- Centos-目录或文件拷贝-cp
cp 拷贝或者备份文件或者目录 相关选项 -a 拷贝目录保存文件所有信息 -r 递归拷贝目录 -d 保留连接 -p 保留修改时间和存取权限 -i 有同名提醒是否覆盖 相关应用 1. 备份文件 cp ...
- python基础知识 变量 数据类型 if判断
cpu 内存 硬盘 操作系统 cpu:计算机的运算和计算中心,相当于人类的大脑 飞机 内存:暂时存储一些数据,临时加载数据和应用程序 4G 8G 16G 32G 速度快,高铁 断电即消失 造价高 硬盘 ...
- P2652 同花顺
P2652 同花顺 Link 题目背景 所谓同花顺,就是指一些扑克牌,它们花色相同,并且数字连续. 题目描述 现在我手里有 \(n\) 张扑克牌,但它们可能并不能凑成同花顺.我现在想知道,最少更换其中 ...
- python 中的三种等待方式
为什么要用等待时间: 今天在写App的自动化的脚本时发现一个元素,但是往往执行脚本是报错( An element could not be located on the page using the ...
- python`最简单的爬虫`实现
不管怎么样,一天一更的好习惯一定要保持,现在一天不写点东西都感觉不踏实,总会感觉少了点什么,废话少说,记录一下今天初学的spider(甚至说不上是spider,I'm so vagetable [/认 ...
- 多测师讲解_肖sir _rf报错归纳(1):
错误一: 报错原因:文件格式 解决方案: 修改文件格式,将txt改成robot格式 错误二: rf 运行以后出现乱码现象 解决方案: 打开python的安装路径下:C:\python37\Lib\ ...