基本概念
- 异或操作(^): 将两个二进制数的每一位进行比较,不同则置1,相同则置0。
- 异或运算示例: 例如,对于二进制数1010和1100进行异或操作,得到0110.
特殊应用:取反指定比特位
取反第0位:运算数据 ^0x01
取反第1位:运算数据 ^0x02
取反第2位:运算数据 ^0x04
取反第3位:运算数据 ^0x08
取反第4位:运算数据 ^0x10
取反第5位:运算数据 ^0x20
取反第6位:运算数据 ^0x40
取反第7位:运算数据 ^0x80
#include "stm32f4xx.h"
// 定义异或取反函数
void toggleBits(uint16_t* data) {
*data = ~(*data); // 执行异或取反操作
}
int main(void) {
// 初始化GPIO
RCC->AHB1ENR |= RCC_AHB1ENR_GPIODEN; // 使能GPIOD时钟
GPIOD->MODER &= ~(GPIO_MODER_MODE12 | GPIO_MODER_MODE13 | GPIO_MODER_MODE14 | GPIO_MODER_MODE15); // 清除之前的设置
GPIOD->MODER |= (GPIO_MODER_MODE12_0 | GPIO_MODER_MODE13_0 | GPIO_MODER_MODE14_0 | GPIO_MODER_MODE15_0); // 设置为输出模式
while (1) {
for (int i = 0; i < 4; i++) {
uint16_t data = 1 << (12 + i); // 依次左移控制每个引脚
toggleBits(&data); // 调用异或取反函数
GPIOD->ODR = data;
delay_ms(200); // 延时一段时间
}
}
}