在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);
}
}
}版权声明:本文为m0_58950498原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。