stm32f4 发现板 LED 不闪烁

stm32f4 discovery board LED not blinking

我针对所有四个内置 LED 和一个外部 LED 测试了此代码。 所有 LED 都亮起,但不闪烁。 这是我的代码:

#include "stm32f4xx.h"

void WaitaMoment (int time)
{
for (time = 0; time > 0; time--);
}

int main(void)
{
RCC -> AHB1ENR |= RCC_AHB1ENR_GPIODEN;
GPIOD -> MODER |= GPIO_MODER_MODER14_0;
GPIOD -> OTYPER &= ~ (GPIO_OTYPER_OT_14);
GPIOD -> OSPEEDR |= GPIO_OSPEEDER_OSPEEDR14;
GPIOD -> PUPDR &= ~ (GPIO_PUPDR_PUPDR14);

//int time;
while(1)
{
    GPIOD -> BSRRL |= GPIO_BSRR_BS_14;
    //for (time=0; time < 200000; time++);
    WaitaMoment(200000);
    GPIOD -> BSRRH |= GPIO_BSRR_BR_14;
    WaitaMoment(200000);
    //for (time=0; time < 200000; time++);
}
}

我的问题是什么?

WaitaMoment 中的 for 循环不会迭代,因为它设置了 time = 0,然后循环 while time > 0,这从不。更改它,使循环不设置 time = 0.

void WaitaMoment (int time)
{
for (; time > 0; time--);
}

如果编译器识别出它什么都不做并优化它,这个循环可能仍然不会迭代。确保延迟没有得到优化,否则 LED 可能闪烁得太快以至于您看不到闪烁。

如评论中所述,您不应将 |= 与 BSRRL 和 BSRRH 一起使用。改为这样写。

GPIOD->BSRRL = GPIO_BSRR_BS_14;
WaitaMoment(200000);
GPIOD->BSRRH = GPIO_BSRR_BS_14;
WaitaMoment(200000);

并确保您拼写正确(GPIO_BSRR_BS_14 而不是 GPIO_BSRR_BR_14)