bsrr和brr寄存器的使用?ord是什么类型的寄存器?
bsrr和brr寄存器的使用?
回答如下:bsrr(Bit Set Reset Register)和brr(Bit Reset Register)寄存器是STM32微控制器的输出控制寄存器,用于控制单个GPIO引脚的状态。
bsrr寄存器用于设置或清零一个GPIO引脚,可以通过将对应的位设置为1或0来实现。例如,要将PA5引脚设置为高电平,可以使用以下代码:
GPIOA->BSRR = GPIO_BSRR_BS5;
要将PA5引脚设置为低电平,可以使用以下代码:
GPIOA->BSRR = GPIO_BSRR_BR5;
brr寄存器只能用于将GPIO引脚设置为低电平,不能设置为高电平。例如,要将PA5引脚设置为低电平,可以使用以下代码:
GPIOA->BRR = GPIO_BRR_BR5;
使用bsrr和brr寄存器可以快速、简单地控制单个GPIO引脚的状态,适用于各种嵌入式应用场景。
BSRR是用于低16位的作用,可以让指定的IO口置1;而BRR是用于高16位的作用,可以让指定的IO口置0。使用时,需要将数据位插入到相应的位槽中,然后根据需要设置相应的位宽和波特率。
bsrr和brr寄存器是用来控制GPIO(通用输入输出端口)的引脚状态的,其中bsrr用于设置引脚状态(设置为高电平或低电平),而brr则用于清除引脚状态(设置为低电平)。这两个寄存器的使用可以通过以下步骤来实现:首先需要确定需要控制的引脚编号和需要设置的状态,然后通过对应的寄存器写入对应的掩码即可实现控制。具体来说,如果需要设置引脚为高电平,则通过对bsrr寄存器写入对应的位为1的掩码来实现;如果需要清除引脚状态,则通过对brr寄存器写入对应的位为1的掩码来实现。需要注意的是,在进行GPIO控制时需要明确引脚的工作模式和输入输出模式等参数,以确保正确地实现控制。
引脚的高、低电平控制,有3种方法(3个寄存器)
分别是通过GPIO的 3个 管脚控制寄存器:
ODR寄存器, 控制管脚的高、低电平,低16位有效,写1 高电平, 写0 低电平;
BSRR寄存器, 控制管脚的高、低电平,32位有效,低16位写1 高电平,高16位写1 低电平;
BRR寄存器, 控制管脚的低电平,低16位有效,写1 低电平;
特别的: F1和F4系列都有 ODR和BSRR,但F4 取消了BRR。所以为了代码通用,尽量不使用BRR,反正BSRR能完成.
ODR、BSRR的使用区别:
你应该有过和我一样的疑问:
ODR寄存器只用低16位,就能控制引脚的高、低电平,还能读寄存器的值,用以判断引脚电平状态;
那么, 为什么要存在一个BSRR! 还分高、低16位! 还不能读寄存器的值!
写了几年的STM32代码, 一直在使用ODR, 几乎没用过BSRR. 直到今天查找F1和F4的GPIO操作区别时, 才发现BSRR的神奇之处。
(1) BSRR: 写入1生效, 写入0无动作. 同样置/复位, 比用ODR操作编译后要快几个动作, 想想以前用或/与操作, 真是多余了!
例如: PB1要设高电平, PB11设低电平;注意看注释
// 通过 ODR 寄存器
GPIOB->ODR
= 0X01 ; // 代码是一行, 但背后的运行是很多步:读取->或运算->写入
GPIOB->ODR &= ~(0X01<<11) ; // 同样是:读取->或运算->写入
// 通过 BSRR 寄存器
GPIOB->BSRR = 0X01 ; // 某个位直接置1,OK, 搞掂了。其它没置1的位不产生变化
GPIOB->BSRR = 0X01<<11; // 同上
(2) BSRR 操作, 不用关中断
这个不太理解, 功力不到时候. 引用网友的话吧:
“This way, there is no risk that an IRQ occurs between the read and the modify access.”
什么意思呢?就是你用BSRR和BRR去改变管脚状态的时候,没有被中断打断的风险。也就不需要关闭中断。
使用总结:
操作管脚状态, BSRR = 快 + 简单 !
ord是什么类型的寄存器?
ord不是一种特定的寄存器类型,它通常表示Python中的一种内置函数,用于返回ASCII码表中某个字符对应的数值或Unicode码的整数表示。在计算机架构中,经常使用的寄存器类型包括通用寄存器、数据寄存器、地址寄存器、程序计数器等。不同类型的寄存器在计算机中有不同的作用和用途。
ORD,BSRR,BRR寄存器的作用是对已经初始化后的 IO 口输出高、低电平。 ODR寄存器可读可写,32位,既能控制管脚为高电平,也能控制管脚为低电...
留言与评论(共有 0 条评论) |