STM32F401RE Nucleo板,无法切换用户LED

时间:2018-07-07 05:52:46

标签: c microcontroller stm32 stm32f4 nucleo

我试图弄清楚如何切换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;
        }
    }
}

3 个答案:

答案 0 :(得分:5)

你必须写

RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);

以启用GPIOA。

答案 1 :(得分:3)

您无法使用AHB2时钟控件启用AHB1外设时钟。

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

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

即使您正确启用了GPIO时钟,您仍在非常快速地切换输出(MHz量级),counter并没有明显的用途。如果闪烁的LED是您的目标,那将无法实现。您会看到一个LED的亮度略低于全亮度-您需要在每次切换之间延迟。

答案 2 :(得分:1)

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