5、BSRR(Bit Set/Reset Register) 用于同时设置或复位多个引脚的电平状态,前16位为BS,后16为BR,都是对应0~15的I/O口,都是在设置为1时起作用,BS的优先级比BR高,在对应BS和BR都设置为1时,只起起BS的作用。注意,一般情况下,BSSR对输出模式才起作用。
• 写入0对I/O引脚无影响(作用) 一个是位置位/复位寄存器BSRR • 高16位控制引脚为低电平(复位BR:Bit Reset) • 低16位控制引脚为高电平(置位BS:Bit Set) 一个是位复位寄存器BRR • 低16位控制引脚为低电平(复位BR:Bit Reset) 举例 使GPIOE的第5管脚输出高电平: GPIOE_BSRR=(1uL<<5); 使GP...
原因是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高...
而0x0001 <=> 0000 0000 0000 0001B,将 BS0位 置1。实现控制 PIN_0 脚输出高电平。 总结一下,HAL_GPIO_WritePin 这个函数的实现方式就是通过对 BSRR 寄存器赋值实现的。那我们知道了这个原理,之后我们就可以更好的使用 HAL_GPIO_WritePin 这个函数,甚至我们可以抛弃这个函数或者自己去封装一个,而明白了这个原...
一个32位设置/清除寄存器,GPIOx_BSRR; 一个16位复位寄存器,GPIOx_BRR; 一个32位锁定寄存器,GPIOx_LCKR; 1.3.1 端口配置低寄存器(GPIOx_CRL) GPIOx_CRL端口配置低8位寄存器(x=A~E),四位控制1个引脚,共控制8个引脚(0~7引脚); 其中: 1.3.2 端口配置高寄存器(GPIOx_CRH) ...
GPIOE->BSRR|=0x00200000; GPIOE->BSRR|=0x00000030; 1. 2. 是对GPIOE_BSRR和32位数进行位或运算,所以在设置低位BS4、BS5时,高位BR4、BR5也同时进行了设置,但是以低位设置为优先级 好好理解下图标注的地方!!!英文原话:Note: If both BSx and BRx are set, BSx has priority ...
原因是GPIOx_BSRR去改变管脚状态的时候是原子操作置位/复位,没有被中断打断的风险。也就不需要关闭中断,关闭中断明显会延迟或丢失一事件的捕获,所以控制GPIO的状态最好可以用GPIOx_BSRR。 该寄存器的0到15位为置位功能,16到31位为复位功能。例如设置GPIOA_BSRR的BS0值为1,相当于输出GPIOA的pin0管脚值为1高电...
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)...
GPIOA->BSRR |= GPIO_BSRR_BS_5; // 延时 for (volatile int i = 0; i < 1000000; i++); // 熄灭LED GPIOA->BSRR |= GPIO_BSRR_BR_5; // 延时 for (volatile int i = 0; i < 1000000; i++); } } ``` 四、代码说明