STM32f407IGH6的位运算详解
·
GPIOB->MODER &= ~(GPIO_MODER_MODE6 | GPIO_MODER_MODE7);
GPIOB->MODER |= ((GPIO_MODER_MODE6_1 | GPIO_MODER_MODE7_1);
这两行代码的具体含义
用于配置 GPIOB 的 PB6 和 PB7 引脚为复用功能模式,涉及对 GPIO 模式寄存器(MODER)的位操作。以下是具体计算过程:
1. 寄存器背景知识
GPIOB->MODER是 32 位寄存器,每 2 位控制一个 GPIO 引脚的模式(低 2 位控制 PB0,接下来 2 位控制 PB1,以此类推)。- 引脚模式定义:
00=输入模式,01=通用输出模式,10=复用功能模式,11=模拟模式。 - PB6 对应
MODER[13:12](第 12 和 13 位),PB7 对应MODER[15:14](第 14 和 15 位)。
2. 第一行代码:清除原有配置
GPIOB->MODER &= ~(GPIO_MODER_MODE6 | GPIO_MODER_MODE7);
-
宏定义解析(来自 STM32 标准库):
GPIO_MODER_MODE6表示 PB6 的模式位掩码,值为0x00003000(二进制0000 0000 0000 0000 0011 0000 0000 0000)。GPIO_MODER_MODE7表示 PB7 的模式位掩码,值为0x0000C000(二进制0000 0000 0000 0000 1100 0000 0000 0000)。
-
计算
GPIO_MODER_MODE6 | GPIO_MODER_MODE7:0x00003000 | 0x0000C000 = 0x0000F000 (二进制:0000 0000 0000 0000 1111 0000 0000 0000) -
按位取反
~0x0000F000:~0x0000F000 = 0xFFFF0FFF (二进制:1111 1111 1111 1111 0000 1111 1111 1111) -
最终操作:
GPIOB->MODER &= 0xFFFF0FFF; // 清除 PB6 和 PB7 的原有模式配置(第12-15位设为0)
3. 第二行代码:设置为复用功能模式
GPIOB->MODER |= (GPIO_MODER_MODE6_1 | GPIO_MODER_MODE7_1);
-
宏定义解析:
GPIO_MODER_MODE6_1表示 PB6 的第 1 位(高位)置 1,值为0x00002000(二进制0000 0000 0000 0000 0010 0000 0000 0000)。GPIO_MODER_MODE7_1表示 PB7 的第 1 位(高位)置 1,值为0x00008000(二进制0000 0000 0000 0000 1000 0000 0000 0000)。
-
计算
GPIO_MODER_MODE6_1 | GPIO_MODER_MODE7_1:0x00002000 | 0x00008000 = 0x0000A000 (二进制:0000 0000 0000 0000 1010 0000 0000 0000) -
最终操作:
GPIOB->MODER |= 0x0000A000; // 设置 PB6 和 PB7 为复用功能模式(10)
4. 结果总结
- 操作后,
GPIOB->MODER的第 12-15 位变为1010:- PB6(13:12 位)=
10→ 复用功能模式。 - PB7(15:14 位)=
10→ 复用功能模式。
- PB6(13:12 位)=
这两行代码组合实现了对 PB6 和 PB7 引脚模式的精确配置,先清除旧配置,再设置新模式,避免干扰其他位。
更多推荐
所有评论(0)