STM32通用IO 寄存器

  • 一、端口配置寄存器 CRH、CRL
  • 1、MODE
  • 2、CNF
  • 二、数据寄存器 ODR、IDR
  • 1、ODR
  • 2、IDR
  • 三、置位/复位寄存器 BSRR
  • 1、BSRR
  • 四、复位寄存器 BRR
  • 1、BRR
  • 五、锁存寄存器 LCKR
  • 1、LCKR
  • 六、ODR、BSRR、BRR之间的联系与区别
  • **既然ODR寄存器既可以输出高电平也可以输出低电平那么为什么还需要BSRR和BRR呢?**
  • **为什么BSRR寄存器既可以输出也可以清除还要使用BRR寄存器呢?**
  • 总结


一、端口配置寄存器 CRH、CRL

端口配置寄存器CRHCRL用来配置IO口的工作模式
寄存器每四个位为一组用来一个IO的工作模式
IO工作模式 8种
输入模式:模拟输入、浮空输入、 上拉/下拉输入模式、保留
输出模式:推挽输出、开漏输出、复用功能推挽输出,复用功能开漏输出

1、MODE

每组的低两位是MODE位用来决定IO口输出还是输入,以及端口数据输出的速度,在这两位都为0的时候IO为输入模式,其他情况均为输出模式

stm32 APRE寄存器 cubemx_嵌入式

2、CNF

每组的高两位是CNF位用来配置IO的工作方式

stm32 APRE寄存器 cubemx_嵌入式_02

二、数据寄存器 ODR、IDR

只用低16位高16位保留,用来控制IO的输出以及检测IO的输入

1、ODR

输出数据寄存器,用来控制IO口数据的输出

配置IO口数据输出主要是通过字节操作用来对整个GPIOX口来控制

Eg:GPIOB->ODR |= 0x01;//将GPIOB.0引脚的电平输出为高电平

stm32 APRE寄存器 cubemx_IO口寄存器_03

2、IDR

输入数据寄存器,用来检测IO口数据的输入

这些位为只读并且这些位只能以字(16位)的格式输出,

GPIOA->IDR&0x0001即为PA1的电平状态

stm32 APRE寄存器 cubemx_寄存器_04

三、置位/复位寄存器 BSRR

1、BSRR

(1)BSRR是用来做IO口输出的寄存器
(2)其又被叫做端口位设置/清除寄存器
(3)高16位输出低电平低16位输出高电平

四、复位寄存器 BRR

1、BRR

(1)用来清除IO口输出
(2)BRR寄存器叫做端口清除寄存器
(3)寄存器的高16位被保留,仅低16位被拿来使用,16位分别对应相对的IO口

五、锁存寄存器 LCKR

1、LCKR

stm32 APRE寄存器 cubemx_单片机_05

六、ODR、BSRR、BRR之间的联系与区别

通过两个问题说明

既然ODR寄存器既可以输出高电平也可以输出低电平那么为什么还需要BSRR和BRR呢?

我们用ODR来进行输出会有被中断打断的风险,而用BSRR和BRR寄存器输出就没有被中断打断的风险。

为什么BSRR寄存器既可以输出也可以清除还要使用BRR寄存器呢?

首先要明白,BRR寄存器位16位分别对16位IO口输出的电平进行擦除
如果我们要用BSRR的高16位进行擦出比较麻烦
那么BSRR看起来就没有什么作用的,因为ODR可以输出高电平而BRR可以清除高电平
实则不然,当我们需要同时对不同的IO口进行输出高低电平的时候我们就会发现,如果不用BSRR寄存器的话,只能分成两步输出,这样达不到我们的目的

总结

寄存器使用位数

寄存器名称

32

CRH、CRL、BSRR

16

ODR、IDR、BRR

17

LCKR