首页 > 解决方案 > 如何在stm32的GPIO MODER寄存器中定义位

问题描述

我需要将端口 D 的引脚 15 定义为通用输出模式,为此我需要将引脚 31,30 设置为 01。GPIOD->MODER 是我的寄存器 (1<<30) 和 (1<<31)正在移动 1 到 30 和 31 位我知道位或是 | 和按位和是 & 设置这些值的技术是什么?谢谢。

在此处输入图像描述

标签: embeddedstm32

解决方案


如果您不想更改任何其他位,则需要先将它们归零,然后再设置它们。

typedef enum
{
    GPIO_MODER_INPUT = 0b00,
    GPIO_MODER_OUTPUT = 0b01,
    GPIO_MODER_ALTERNATE = 0b10,
    GPIO_MODER_ANALOG   = 0b11,
}GPIO_MODER;

void GPIO_SetMODER(GPIO_TypeDef *gpio, int pin, GPIO_MODER mode)
{
    uint32_t reg = gpio -> MODER;

    reg &= ~(0b11 << (pin * 2));
    reg |= (mode & 0b11) << (pin * 2);

    gpio -> MODER = reg;
}

推荐阅读