BSRR 只写寄存器
既能控制管脚为高电平,也能控制管脚为低电平。
对寄存器高 16bit 写1 对应管脚为低电平,对寄存器低16bit写1对应管脚为高电平。写 0 ,无动作
首先看GPIOC的定义
接着看这个类型的定义
可以看到BSRR为无符号的32位的整形
接下来看GPIO_Pin_13的定义
可以看到为无符号的16位置的整形。
GPIOC->BSRR|= GPIO_Pin_13<<16; //给高16位写1 对寄存器高 16bit 写1 对应管脚为低电平 写 0
接下来理解上边的那一行代码
将pin13引脚的值左移16位,此时相当于在高16位写1。高16位写1,为低电平。
GPIOC->BSRR = GPIOC->BSRR| GPIO_Pin_13; //给低16位写1 对寄存器低16bit写1对应管脚为高电平 写 0 ,无动作
直接将pin13引脚的值写入,此时相当于在低16位写1。低16位写1,为高电平。
最终理解
BSRR的初始值为0x00000000,当使用BSRR给引脚写入低16位(0x2000),此时就会写入0x00002000(将这个值写入IDR),随后BSRR又会变为0x00000000。当使用BSRR给引脚写入高16位(0x20000000),此时就会写入0x20000000(将这个值写入IDR),随后BSRR又会变为0x00000000。