原因是GPIOx_BSRR去改变管脚状态的时候是原子操作置位/复位,没有被中断打断的风险。 也就不需要关闭中断,关闭中断明显会延迟或丢失一事件的捕获,所以控制GPIO的状态最好可以用GPIOx_BSRR。 该寄存器的0到15位为置位功能,16到31位为复位功能。 例如设置GPIOA_BSRR的BS0值为1,相当于输出GPIOA的pin0管脚值为1高...
GPIOx->BSRR = GPIO_Pin 以 PIN_0脚为例,这句话的意思就是 GPIOx->BSRR = 0x0001(这里不做强制转换是因为16位数赋值正好只改变高位满足对应的置位需求,不对低位做处理,防止意外篡改), 而0x0001 <=> 0000 0000 0000 0001B,将 BS0位 置1。实现控制 PIN_0 脚输出高电平。 总结一下,HAL_GPIO_WritePin...
原因是GPIOx_BSRR去改变管脚状态的时候是原子操作置位/复位,没有被中断打断的风险。也就不需要关闭中断,关闭中断明显会延迟或丢失一事件的捕获,所以控制GPIO的状态最好可以用GPIOx_BSRR。 该寄存器的0到15位为置位功能,16到31位为复位功能。例如设置GPIOA_BSRR的BS0值为1,相当于输出GPIOA的pin0管脚值为1高电...
原因是GPIOx_BSRR去改变管脚状态的时候是原子操作置位/复位,没有被中断打断的风险。也就不需要关闭中断,关闭中断明显会延迟或丢失一事件的捕获,所以控制GPIO的状态最好可以用GPIOx_BSRR。 该寄存器的0到15位为置位功能,16到31位为复位功能。例如设置GPIOA_BSRR的BS0值为1,相当于输出GPIOA的pin0管脚值为1高电...
4. 位控寄存器:GPIOx_BSRR、GPIOx_BRR 用来控制某引脚为1或0 4. 锁定寄存器:GPIOx_LCKR 用来锁定引脚配置(不允许修改) 每个寄存器只能以32位(字)进行访问 不允许16位(半字)或8位(字节)访问 每组端口有两个32位配置寄存器 • 配置寄存器低(Low) 字GPIOx_CRL ...
GPIOA->BSRR = GPIO_BSRR_BS_5; // 设置PA5为高电平 } void GPIO_SetLow(void) { GPIOA->BSRR = GPIO_BSRR_BR_5; // 设置PA5为低电平 } 读取操作 读取GPIO端口的状态,即获取引脚的高低电平,可以通过读取IDR寄存器实现。 uint8_t GPIO_ReadInput(void) { if (GPIOA->IDR & GPIO_IDR_IDR_6)...
BSRR 寄存器控制,对相应的 BR10 位设置为 1 时 PH10 即为低电平,点亮 LED 灯,对它的 BS10 ...
5、BSRR(Bit Set/Reset Register) 用于同时设置或复位多个引脚的电平状态,前16位为BS,后16为BR,都是对应0~15的I/O口,都是在设置为1时起作用,BS的优先级比BR高,在对应BS和BR都设置为1时,只起起BS的作用。注意,一般情况下,BSSR对输出模式才起作用。
GPIOx_ODR: 端口输出数据寄存器,它的31:16位保留不用,15:0对应x的相应引脚,他只能以16位方式操作。 GPIOx_BSRR:端口位设置/复位寄存器,它的31:16位是清除位(BR15:BR0),用来复位对应的引脚;15:0位是设置位(BS15:BS0),用来设置对应的引脚。无论是BR还是BS,都是1有效,即相应位为0时无效,这样可以保证操...
2、使用GPIOB_BSRR寄存器 3、使用GPIOB_BRR寄存器 4、小总结(比较重要) 一、GPIO的寄存器 每个GPIO端口有两个32位配置寄存器(GPIOx_CRL, GPIOx_CRH),两个32位数据寄存器(GPIOx_IDR和GPIOx_ODR),一个32位置位/复位寄存器(GPIOx_BSRR),一个16位复位寄存器(GPIOx_BRR)和一个32位锁定寄存器(GPIOx_LCKR) ...