stm32通用IO寄存器详解

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

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

1、MODE

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

2、CNF

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

二、数据寄存器 ODR、IDR

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

1、ODR

输出数据寄存器,用来控制IO口数据的输出 配置IO口数据输出主要是通过字节操作用来对整个GPIOX口来控制 Eg:GPIOB->ODR |= 0x01;//将GPIOB.0引脚的电平输出为高电平

2、IDR

输入数据寄存器,用来检测IO口数据的输入 这些位为只读并且这些位只能以字(16位)的格式输出, GPIOA->IDR&0x0001即为PA1的电平状态

三、置位/复位寄存器 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

六、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
经验分享 程序员 微信小程序 职场和发展