通过按位异或,写ODR寄存器,如:
GPIOB->ODR ^= GPIO_Pin_5; //对PB5 IO口取反
在官方给的固件库中,有
#define GPIO_Pin_5 ((uint16_t)0x0020) /*!< Pin 5 selected */
这样的宏定义,所以这样的异或操作保证只对PB5位对应的ODR寄存器上的位取反,其它位保持不变。
(正点原子的教程源码里通过位带操作实现翻转,但个人感觉位带操作有点麻烦。)
通过按位异或,写ODR寄存器,如:
GPIOB->ODR ^= GPIO_Pin_5; //对PB5 IO口取反
在官方给的固件库中,有
#define GPIO_Pin_5 ((uint16_t)0x0020) /*!< Pin 5 selected */
这样的宏定义,所以这样的异或操作保证只对PB5位对应的ODR寄存器上的位取反,其它位保持不变。
(正点原子的教程源码里通过位带操作实现翻转,但个人感觉位带操作有点麻烦。)