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; //管脚模式为推挽输出,推挽输出模式可以驱动ledGPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz; //管脚速度为50MhzGPIO_Init(GPIOD,&GPIO_InitStructure); //向初始化函数中传入参数,第一个参数确定了D端口,第二个参数为前面定义的结构体变量,确定了端口的配置信息代码解析:这段代码先是定义了一个结构体变量紧跟着的三条语句是对结构体变量中的三个成员变量进行赋值最后一个语句调用了GPIO的初始化函数,此函数需要传入两个参数,可以在stm32的库函数使用手册中进行查询;第一个参数即GPIOD,确定了要初始化的端口是PD端口;第二个参数即&GPIO_InitStructure是取结构体变量GPIO_InitStructure的地址,这个结构体变量中的三个成员确定了需要对端口进行什么样的配置
5、LED驱动函数:到这里GPIO就已经配置完成了,接下来就要配置一个led的驱动函数。代码如下:GPIO_SetBits(GPIOD,GPIO_Pin_All);//点亮leddelay(6000000); //延时GPIO_ResetBits(GPIOD,GPIO_Pin_All); //熄灭leddelay(6000000); //延时代码解析:GPIO_SetBits()以及GPIO_ResetBits()这两个函数可以在stm32的库函数使用手册中查到,具体的作用分别是将相应的端口配置成为高电平和低电平,以此来驱动LED,至于延时函数这是一个自己定义的函数,在下一步中会有代码以及解释
6、延时函数:此函数是自己定义的函数,作用是进行粗略的延时。代码如下:void delay(u32 i){while(i--);}代码解析:可以看出此函数将传入的参数i进行不断自减处理,从而起到占用CPU时间的作用,进行粗略的延时