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)
我针对所有四个内置 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)