我试图弄清楚如何切换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;
}
}
}
答案 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以适当的速率切换。