stm32通用IO寄存器详解

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

端口配置寄存器CRHCRL用来配置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寄存器的话,只能分成两步输出,这样达不到我们的目的

总结

寄存器使用位数寄存器名称
32CRH、CRL、BSRR
16ODR、IDR、BRR
17LCKR
  • 2
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

老尚嵌入式

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值