使用STM32固件库实现LED流水灯

在bsh_led.h文件中对每个灯进行宏定义

#ifndef _BSP_LED_H
#define	_BSP_LED_H

#include	"stm32f10x.h"

#define		LED1_GPIO_PIN		GPIO_Pin_0  //绿灯
#define		LED1_GPIO_PORT		GPIOB
#define		LED_GPIO_CLK		RCC_APB2Periph_GPIOB

#define		LED2_GPIO_PIN		GPIO_Pin_1	//蓝灯
#define		LED2_GPIO_PORT		GPIOB
#define		LED_GPIO_CLK		RCC_APB2Periph_GPIOB

#define		LED3_GPIO_PIN		GPIO_Pin_5	//红灯
#define		LED3_GPIO_PORT		GPIOB
#define		LED_GPIO_CLK		RCC_APB2Periph_GPIOB

#define		ON		1
#define		OFF		0	

#define		LED1_G(a)		if(a)	\
														GPIO_ResetBits(LED1_GPIO_PORT,LED1_GPIO_PIN);\
											else	GPIO_SetBits(LED1_GPIO_PORT,LED1_GPIO_PIN);

#define		LED2_B(a)		if(a)	\
														GPIO_ResetBits(LED2_GPIO_PORT,LED2_GPIO_PIN);\
											else	GPIO_SetBits(LED2_GPIO_PORT,LED2_GPIO_PIN);

#define		LED3_R(a)		if(a)	\
														GPIO_ResetBits(LED3_GPIO_PORT,LED3_GPIO_PIN);\
											else	GPIO_SetBits(LED3_GPIO_PORT,LED3_GPIO_PIN);

void LED_GPIO_Config(void);
#endif

在bsh_led.c文件中写GPIO配置函数

首先要定义一个GPIO配置函数,配置初始化结构体,时钟,控制的引脚,输出模式以及速度,因为是流水灯,所以必须要每个灯都要有,都要初始化一下,不然点不亮。

#include "bsp_led.h"

void LED_GPIO_Config(void)
{
	GPIO_InitTypeDef		GPIO_InitStructure;		//	定义初始化结构体
	
	
	RCC_APB2PeriphClockCmd(LED_GPIO_CLK,ENABLE);  //开时钟
	
	GPIO_InitStructure.GPIO_Pin=LED1_GPIO_PIN;		//选择GPIO要控制的引脚0
	GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
	GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;	
	GPIO_Init(LED1_GPIO_PORT,&GPIO_InitStructure);	
	
	GPIO_InitStructure.GPIO_Pin=LED2_GPIO_PIN;		//选择GPIO要控制的引脚1
	GPIO_Init(LED2_GPIO_PORT,&GPIO_InitStructure);
	
	GPIO_InitStructure.GPIO_Pin=LED3_GPIO_PIN;		//选择GPIO要控制的引脚5
	GPIO_Init(LED3_GPIO_PORT,&GPIO_InitStructure);
	
	//熄灭所有灯
	GPIO_SetBits(LED1_GPIO_PORT,LED1_GPIO_PIN); 
	GPIO_SetBits(LED2_GPIO_PORT,LED2_GPIO_PIN); 
	GPIO_SetBits(LED3_GPIO_PORT,LED3_GPIO_PIN); 
}

在main.c中调用,没有使用ON和OFF

#include	"stm32f10x.h"
#include 	"bsp_led.h"

//软件延时函数1ms
void delay_ms(uint32_t	time)
{
	uint32_t	i;
	while(time--)
	{
		i=12000;
		while(i--);
	}
}

int main(void)
{
	while(1)
	{
    //直接调用复位置位函数
		LED_GPIO_Config();
		while(1)
		{
			//来到这里的时候,系统的时钟已经被配置成72M了	
			GPIO_ResetBits(LED1_GPIO_PORT,LED1_GPIO_PIN);  //点亮
	//		LED_G(ON);		
			delay_ms(50);			
			GPIO_SetBits(LED1_GPIO_PORT,LED1_GPIO_PIN); //熄灭
	//		LED_G(OFF);
			delay_ms(50);
			GPIO_ResetBits(LED2_GPIO_PORT,LED2_GPIO_PIN);
			delay_ms(50);
			GPIO_SetBits(LED2_GPIO_PORT,LED2_GPIO_PIN);
			
			delay_ms(50);
			GPIO_ResetBits(LED3_GPIO_PORT,LED3_GPIO_PIN);
			delay_ms(50);
			GPIO_SetBits(LED3_GPIO_PORT,LED3_GPIO_PIN);
			delay_ms(50);
	    }
	}
}

在main.c中调用,使用ON和OFF

#include	"stm32f10x.h"
#include 	"bsp_led.h"

//软件延时函数1ms
void delay_ms(uint32_t	time)
{
	uint32_t	i;
	while(time--)
	{
		i=12000;
		while(i--);
	}
}


int main(void)
{
	while(1)
	{
        LED_GPIO_Config();
		while(1)
		{
				//来到这里的时候,系统的时钟已经被配置成72M了	
			LED1_G(ON);		
			delay_ms(50);			
			LED1_G(OFF);
			delay_ms(50);
			
			LED2_B(ON);		
			delay_ms(50);			
			LED2_B(OFF);
			delay_ms(50);
			
			LED3_R(ON);		
			delay_ms(50);			
			LED3_R(OFF);
			delay_ms(50);
	    }
	}
}

你可能感兴趣的:(stm32)