原因是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高...
GPIOB->BSRR|=1<<5;//单独设置PB5为高电平 //GPIOB->BSRR=1<<5; 1. 2. AI检测代码解析 GPIOB->BSRR|=1<<10;//单独设置PB10为高电平 //GPIOB->BSRR=1<<10; 1. 2. AI检测代码解析 /*同时设置PB5和PB10为高电平*/ GPIOB->BSRR=1<<5; GPIOB->BSRR&=0;//清零 GPIOB->BSRR=1<<10;...
用于同时设置或复位多个引脚的电平状态,前16位为BS,后16为BR,都是对应0~15的I/O口,都是在设置为1时起作用,BS的优先级比BR高,在对应BS和BR都设置为1时,只起起BS的作用。注意,一般情况下,BSSR对输出模式才起作用。 BSRR寄存器的结构 示例:将PA0~PA15设置为推挽输出模式,然后设置为高电平,再把PA8~PA15...
GPIOx_BSRR端口设置/清除寄存器(x=A~E); 1.3.6 端口清除寄存器(GPIOx_BRR) GPIOx_BRR端口清除寄存器(x=A~E); 1.4GPIO输出输出编码流程 GPIO的输入/输出一般步骤如下: (1)使能外设时钟:RCC->APB2ENR; 在设置STM32外设的时候,任何时候都需要先使能该外设的始终,APB2ENR是APB2(高速外设)总线上的外设时钟...
原因是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高电...
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)...
而0x0001 <=> 0000 0000 0000 0001B,将 BS0位 置1。实现控制 PIN_0 脚输出高电平。 总结一下,HAL_GPIO_WritePin 这个函数的实现方式就是通过对 BSRR 寄存器赋值实现的。那我们知道了这个原理,之后我们就可以更好的使用 HAL_GPIO_WritePin 这个函数,甚至我们可以抛弃这个函数或者自己去封装一个,而明白了这个原...
45 /*PF6 BSRR 寄存器的 BS6 置 1,使引脚输出高电平*/ 46 //GPIOF_BSRR |= (1<<6); 47 48 while (1); 49 } 50 51 // 函数为空,目的是为了骗过编译器不报错 52 void SystemInit(void) 53 { 54 } 55 56 #elif 1 57 58 /* 自己写库—构建库函数雏形 章节代码 ...