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 和 PB7 引脚模式的精确配置,先清除旧配置,再设置新模式,避免干扰其他位。

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐