stm32_LED闪烁
介绍了stm32 LED闪烁的程序,亲测可行
操作方法
- 01
程序总体框架: 先是介绍程序的总体框架,随后会有每一步的详解: 框架如下: /*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文件中的函数
- 02
配置系统时钟: 在stm32中配置时钟是很重要的,配置系统时钟为72Mhz只需要通过一个库函数就可以,代码如下: SystemInit(); //配置系统时钟为72Mhz
- 03
打开相应的管脚的时钟: 配置好了系统的时钟之后,要使用什么外设还要打开相应的外设的时钟,如果不打开就没办法使用,这是stm32的一种节能的策略,如果不打开时钟,外设就不工作,从而降低功耗。 我在这里使用的是PD端口的13管脚,所以要打开端口D的时钟。 代码如下: RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD,ENABLE); //打开端口D的时钟
- 04
配置端口: 打开了相应的端口之后就可以进行配置了,我在这里只是使用了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的地址,这个结构体变量中的三个成员确定了需要对端口进行什么样的配置
- 05
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,至于延时函数这是一个自己定义的函数,在下一步中会有代码以及解释
- 06
延时函数: 此函数是自己定义的函数,作用是进行粗略的延时。 代码如下: void delay(u32 i) { while(i--); } 代码解析: 可以看出此函数将传入的参数i进行不断自减处理,从而起到占用CPU时间的作用,进行粗略的延时