1

我试图弄清楚如何切换 Nucleo 板上的 LED,但我只是没有看到用户 LED 切换。在网上看似乎这就是你所要做的。有没有其他人遇到过这个问题?

#include "stm32f4xx.h"
#include "stm32f4xx_gpio.h"
#include "stm32f4xx_rcc.h"

int main(void)
{
    int counter = 0;
    SystemInit();

    GPIO_InitTypeDef temp;
    temp.GPIO_Mode = GPIO_Mode_OUT;
    temp.GPIO_OType = GPIO_OType_PP;    // Push Pull
    temp.GPIO_Pin = GPIO_Pin_5;
    temp.GPIO_Speed = GPIO_Low_Speed;
    temp.GPIO_PuPd = GPIO_PuPd_NOPULL;

    RCC_APB2PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);

    GPIO_Init( GPIOA, &temp );

    while( 1 )
    {
        if ( counter++ > 10000 )
        {
            GPIO_ToggleBits( GPIOA, GPIO_Pin_5 );
            counter = 0;
        }
    }
}
4

3 回答 3

5

你必须写

RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);

为了启用GPIOA。

于 2018-07-07T06:03:02.610 回答
3

您不能使用 AHB2 时钟控制来启用 AHB1 外设时钟。

RCC_APB2PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);
    ^^^^                   ^^^

“我只是没有看到用户 LED 切换。”

即使您正确启用了 GPIO 时钟,您也会非常快速地切换输出(MHz 顺序)并且counter没有明显的用途。如果闪烁的 LED 是您的目标,那就不行了;您只会看到 LED 的亮度略低于全亮度 - 您需要在每次切换之间进行延迟。

于 2018-07-07T06:09:53.577 回答
1

克利福德是绝对正确的,LED 是快速“切换”的方式。据称 STM32F401RE 以 168Mhz 运行。将您的计数器值从 10.000 更改为例如 50.000.000,以查看 LED 以适当的速率切换。

于 2018-07-07T06:48:19.687 回答