stm32_LED闪烁

2025-10-24 02:37:45

1、程序总体框架:

先是介绍程序的总体框架,随后会有每一步的详解:

框架如下:

/*main.c文件***********************************************************/

#include "led.h"

int main(void)

{  

LED_Init();  

while(1)

{

   led_display();

}

}

/*led.c文件*************************************************************/

#include "led.h"

/*延时函数*/void delay(u32 i){ while(i--);}

/*LED初始化函数*/

void LED_Init()         

SystemInit();                          

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD,ENABLE);       

GPIO_InitTypeDef GPIO_InitStructure;     

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_All;            

GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;         

GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;     

GPIO_Init(GPIOD,&GPIO_InitStructure);           

}

/*LED驱动函数*/

void led_display()

{  

GPIO_SetBits(GPIOD,GPIO_Pin_All);                

delay(6000000);                         

GPIO_ResetBits(GPIOD,GPIO_Pin_All);              

delay(6000000);                        

}

/*led.h文件***********************************************************/

#ifndef _led_H

#define _led_H

#include <stm32f10x.h>

void LED_Init(void);

void led_display(void);

#endif

框架详解:

在led.h文件中有led.c文件中的函数声明,放在这个文件中的目的是为了方便在其他文件中调用led.c文件中的函数

2、配置系统时钟:

在stm32中配置时钟是很重要的,配置系统时钟为72Mhz只需要通过一个库函数就可以,代码如下:

 SystemInit();                          //配置系统时钟为72Mhz

3、打开相应的管脚的时钟:

配置好了系统的时钟之后,要使用什么外设还要打开相应的外设的时钟,如果不打开就没办法使用,这是stm32的一种节能的策略,如果不打开时钟,外设就不工作,从而降低功耗。

我在这里使用的是PD端口的13管脚,所以要打开端口D的时钟。

代码如下:

 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD,ENABLE);      //打开端口D的时钟

4、配置端口:

打开了相应的端口之后就可以进行配置了,我在这里只是使用了PD13管脚,所以只配置PD13。

代码如下:

GPIO_InitTypeDef GPIO_InitStructure;                                  //声明相应的结构体变量

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_13;                         //选中13管脚GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;           //管脚模式为推挽输出,推挽输出模式可以驱动led 

GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;       //管脚速度为50Mhz  

GPIO_Init(GPIOD,&GPIO_InitStructure);                               //向初始化函数中传入参数,第一个参数确定了D端口,第二个参数为前面定义的结构体变量,确定了端口的配置信息

代码解析:

这段代码先是定义了一个结构体变量

紧跟着的三条语句是对结构体变量中的三个成员变量进行赋值

最后一个语句调用了GPIO的初始化函数,此函数需要传入两个参数,可以在stm32的库函数使用手册中进行查询;第一个参数即GPIOD,确定了要初始化的端口是PD端口;第二个参数即&GPIO_InitStructure是取结构体变量GPIO_InitStructure的地址,这个结构体变量中的三个成员确定了需要对端口进行什么样的配置

5、LED驱动函数:

到这里GPIO就已经配置完成了,接下来就要配置一个led的驱动函数。

代码如下:

 GPIO_SetBits(GPIOD,GPIO_Pin_All);                //点亮led 

delay(6000000);                                               //延时 

GPIO_ResetBits(GPIOD,GPIO_Pin_All);            //熄灭led 

delay(6000000);                                               //延时

代码解析:

GPIO_SetBits()以及GPIO_ResetBits()这两个函数可以在stm32的库函数使用手册中查到,具体的作用分别是将相应的端口配置成为高电平和低电平,以此来驱动LED,至于延时函数这是一个自己定义的函数,在下一步中会有代码以及解释

6、延时函数:

此函数是自己定义的函数,作用是进行粗略的延时。

代码如下:

void delay(u32 i)

{

 while(i--);

}

代码解析:

可以看出此函数将传入的参数i进行不断自减处理,从而起到占用CPU时间的作用,进行粗略的延时

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢