STM32 寄存器:简介、地址查找与直接操作

1、STM32寄存器的简介

2、STM32寄存器地址查找

3、直接操作STM32寄存器

1、STM32寄存器的简介

1. 寄存器映射
在存储器 Block2 这块区域,设计的是片上外设,它们以四个字节为一个单元,共32bit,每一个单元对应不同的功能,当我们控制这些单元时就可以驱动外设工作。我们可以找到每个单元的起始地址,然后通过 C 语言指针的操作方式 (既然一个单元是四个字节那我们就用一次取四个字节的指针(int * )来操作这些功能单元) 来访问这些单元,如果每次都是通过这种地址的方式来访问,不仅不好记忆还容易出错,这时我们可以根据每个单元功能的不同,以功能为名给这个内存单元取一个别名,这个给已经分配好地址的有特定功能的内存单元取别名的过程就叫寄存器映射。

2. 什么是寄存器
寄存器:给特定功能的的单元取的别名这个别名就叫做寄存器,所以寄存器只是特定功能的的单元的名字而已

比如,我们找到 GPIOB 端口的输出数据寄存器 ODR 的地址是 0x4001 0C0C(至于这个地址如何找到可以先跳过,后面我们会有详细的讲解),ODR 寄存器(就是4字节的功能单元)是 32bit,低 16bit有效,对应着 16 个外部 IO,写 0/1 对应的的 IO 则输出低/高电平。现在我们通过 C 语言指针的操作方式,让 GPIOB 的 16 个 IO 都输出高电平,具体见。

 

3. 如何给功能单元取个别名(寄存器)

我们利用C语言的#define 定义一个寄存器标识符

 

这样再操作一个功能单元就简单多了,而且更容易理解

接下来就是层层套娃找到GPIOB端口的所有功能单元地址,将他们分不同的功能改个别名变成寄存器,以后直接操作对应的寄存器就OK啦。

4. STM32的外设地址映射
片上外设区分为三条总线,根据外设速度的不同,不同总线挂载着不同的外设,APB1挂载低速外设,APB2和AHB挂载高速外设。相应总线的最低地址我们称为该总线的基地址,总线基地址也是挂载在该总线上的首个外设的地址。其中 APB1 总线的地址最低,片上外设从这里开始,也叫外设基地址。

 列出了所用STM32F10xxx中内置外设的起始地址。

 

 

外设寄存器

在 XX 外设的地址范围内,分布着的就是该外设的寄存器。以 GPIO 外设为例, – GPIO(general purpose input output)是通用输入输出端口的简称,简单来说就是 STM32 可控制的引脚 ,基本功能是控制引脚输出高电平或者低电平。最简单的应用就是把 GPIO 的引脚连接到 LED 灯的阴极,LED 灯的阳极接电源,然后通过 STM32 控制该引脚的电平,从而实现控制 LED 灯的亮灭。

 2、STM32寄存器地址查找

方法1:

直接查询手册中寄存器映像(map),USART1的DR地址为0x40013804

方法2:

手册中查看,DR寄存器的偏移地址为0X04,那么USART1的DR地址可以写成(USART1_BASE + 0X04)。

其中USART1_BASE在stm32l151xb.h中有定义

#define USART1_BASE           (APB2PERIPH_BASE + 0x00003800U)

方法3:

如果我们要修改DR的值为0X03,我们会写成:USART1->DR = 0X03,那么DR的地址就是(uint32_t)(&USART1->DR)
3、直接操作STM32寄存器

GPIO寄存器一览

GPIOx->CRL(x=A…E)
GPIOx->CRH(x=A…E)
GPIOx->IDR(x=A…E)
GPIOx->ODR(x=A…E)
GPIOx_BSRR(x=A…E)
GPIOx_BRR(x=A…E)

 

这个寄存器主要是设置GPIO的低8位(0~7)端口的配置
MODE 用来设置端口输出的速度 (在输入模式下不需要配置,仅在输出模式下需要配置)CNF 用来设置输入模式或者输出模式
例如
设置PA0为推挽输出速度为50MHz

7-6-5-4-3-2-1-0

 设置PA0为上下拉输入(默认下拉)
7-6-5-4-3-2-1-0

 设置PB5为模拟输入
7-6-5-4-3-2-1-0

GPIOx->IDR(x=A…E)

设置PA10为推挽输出
15-14-13-12-11-10-9-8 

设置PA10为上下拉输入(默认下拉)

设置PA10为推挽输出
15-14-13-12-11-10-9-8

设置PB15为模拟输入
15-14-13-12-11-10-9-8

 

 

 

 

这个寄存器是用来读取当前端口的电平状态,低16位(0~15)每一位对应每一个端口

例如
读取PA0的数值

读取PB5的数值

 

 读取PB15的数值

 

物联沃分享整理
物联沃-IOTWORD物联网 » STM32 寄存器:简介、地址查找与直接操作

发表评论