为什么STM32F411CEU6(Black Pill Board)内部下拉电阻不工作?

Why isn't internal pull-down resistor working on STM32F411CEU6 (Black Pill Board)?

我正在尝试配置STM32F411CEU6 板载按钮(PA0),但无法将其配置为使用内部下拉电阻。我当前的设置允许它在使用上拉电阻时触发中断,但是当我将其更改为下拉电阻时它不再起作用。如果有人能指导我指出我做错了什么,并能澄清我对这个过程的理解,我将不胜感激。我正在使用 STM32 标准外设库。我把我的 GPIO 初始化代码放在下面。

// enable clocks for the the KEY button (PA0) GPIO and 
//  the system configuration controller (SYSCFG) for GPIO interrupts
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);

// initialize the GPIO pin, PA0, with an internal Pull-Down resistor
GPIO_InitTypeDef GPIO_Button_InitStructure = { 
        .GPIO_Pin = GPIO_Pin_0,
        .GPIO_Mode = GPIO_Mode_IN,
        .GPIO_PuPd = GPIO_PuPd_DOWN         /* works with GPIO_PuPd_UP... */
};
GPIO_Init(GPIOA, &GPIO_Button_InitStructure);

/* ... Other interrupt enabling configuration stuff that is known to work here... */

黑色药丸板上的用户按钮连接在 PA0GND 之间。用下拉配置配置 PA0 是没有意义的。在这种情况下,按下按钮不会影响 PA0 引脚的状态;在推送之前它是 logic 0,在推送期间和之后保持在 logic 0。很明显,硬件和软件都检测不到这个推送。

编辑:

与旧的蓝色药丸板不同,黑色药丸板的原理图在互联网上更难找到。我能够在他们的 official Github repo 上找到它。然而,使用内部或外部上拉电阻将按钮连接到 GND 并将 uC 引脚上拉到 logic 1 是一种常见的做法,所以我对黑色药丸板遵循同样的传统并不感到惊讶。