点亮LED灯(固件库版)

main.c

#include "stm32f10x.h"   // 相当于51单片机中的  #include <reg51.h>

#include "bsp_led.h"

int main(void)
{
	LED_GPIO_Config();		//LED灯初始配置
	while(1)
	{
		/*---------使用固件库函数点亮三种颜色的灯----------*/
		/*
		GPIO_ResetBits(LED_G_GPIO_PORT, LED_G_GPIO_PIN);
		Delay(10000000);
		GPIO_SetBits(LED_G_GPIO_PORT, LED_G_GPIO_PIN);
		
		GPIO_ResetBits(LED_R_GPIO_PORT, LED_R_GPIO_PIN);
		Delay(10000000);
		GPIO_SetBits(LED_R_GPIO_PORT, LED_R_GPIO_PIN);
		
		GPIO_ResetBits(LED_B_GPIO_PORT, LED_B_GPIO_PIN);
		Delay(10000000);
		GPIO_SetBits(LED_B_GPIO_PORT, LED_B_GPIO_PIN);
		*/
		LED_COLLOUR();
	}
}

bsp_led.c

#include "bsp_led.h"
/*
bsp表示Board Support Packet,表示板级支持包,适用于特定板,移植时需要注意根据硬件接口做一定调整。
本文件适用于野火指南者开发板,RGB接口为:	R-PB5; G-PB0;	B-PB1;
*/

void Delay(unsigned int a)
{
	while(a) a--;
}

void LED_GPIO_Config(void)
{
	GPIO_InitTypeDef  GPIO_InitStruct;        //定义GPIO结构体
	
	RCC_APB2PeriphClockCmd(LED_G_GPIO_CLK | LED_R_GPIO_CLK | LED_B_GPIO_CLK, ENABLE); 
	/*打开GPIO的时钟,第一个参数是要打开哪个GPIO口的时钟,
   	第二个参数为ENABLE时即是使能,即打开。*/
	
	/*-------配置绿灯IO口---------*/
	GPIO_InitStruct.GPIO_Pin = LED_G_GPIO_PIN;      //配置IO口
	GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;   //配置为推挽输出
	GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;  //配置速度为50MHz
	GPIO_Init(LED_G_GPIO_PORT , &GPIO_InitStruct);	//GPIO口初始化
	GPIO_SetBits(LED_G_GPIO_PORT, LED_G_GPIO_PIN);	//关闭绿灯,若不关闭时初始化后IO口默认低电平会使绿灯亮起,下同。
	
	/*-------配置红灯IO口---------*/
	GPIO_InitStruct.GPIO_Pin = LED_R_GPIO_PIN;      //配置IO口
	GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;   //配置为推挽输出
	GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;  //配置速度为50MHz
	GPIO_Init(LED_R_GPIO_PORT , &GPIO_InitStruct);	//GPIO口初始化
	GPIO_SetBits(LED_R_GPIO_PORT, LED_R_GPIO_PIN);	//关闭红灯
	
	/*-------配置蓝灯IO口---------*/
	GPIO_InitStruct.GPIO_Pin = LED_B_GPIO_PIN;      //配置IO口
	GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;   //配置为推挽输出
	GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;  //配置速度为50MHz
	GPIO_Init(LED_B_GPIO_PORT , &GPIO_InitStruct);	//GPIO口初始化
	GPIO_SetBits(LED_B_GPIO_PORT, LED_B_GPIO_PIN);	//关闭蓝灯
	
}

/*
功能:让RGB灯按红黄绿青蓝紫依次亮起,但未使用PWM调节。
*/
void LED_COLLOUR(void)
{
		LED_RED;
		Delay(1000000);
		LED_YELLOW;
		Delay(1000000);
		LED_GREEN;
		Delay(1000000);
		LED_CYAN;
		Delay(1000000);
		LED_BLUE;
		Delay(1000000);
		LED_PURPLE;
		Delay(1000000);
}

bsp_led.h

#ifndef __BSP_LED_H
#define __BSP_LED_H

#include "stm32f10x.h"

#define LED_G_GPIO_PIN        GPIO_Pin_0			//绿灯IO口
#define LED_G_GPIO_PORT       GPIOB					
#define LED_G_GPIO_CLK        RCC_APB2Periph_GPIOB	//绿灯时钟使能寄存器

#define LED_R_GPIO_PIN        GPIO_Pin_5			//红灯IO口
#define LED_R_GPIO_PORT       GPIOB
#define LED_R_GPIO_CLK        RCC_APB2Periph_GPIOB	//红灯时钟使能寄存器

#define LED_B_GPIO_PIN        GPIO_Pin_1			//蓝灯IO口
#define LED_B_GPIO_PORT       GPIOB
#define LED_B_GPIO_CLK        RCC_APB2Periph_GPIOB	//蓝灯时钟使能寄存器

#define GPIO_HIGH(PORT,PIN)		{PORT->BSRR = PIN;} //输出为高电平
#define GPIO_LOW(PORT,PIN)		{PORT->BRR = PIN;}	//输出为低电平
#define GPIO_TOGGLE(PORT,PIN)	{PORT->ODR ^= PIN;}//输出反转状态

#define LED_G_TOGGLE		GPIO_TOGGLE(LED_G_GPIO_PORT, LED_G_GPIO_PIN)
#define LED_G_ON			GPIO_LOW(LED_G_GPIO_PORT, LED_G_GPIO_PIN)
#define LED_G_OFF			GPIO_HIGH(LED_G_GPIO_PORT, LED_G_GPIO_PIN)

#define LED_R_TOGGLE		GPIO_TOGGLE(LED_R_GPIO_PORT, LED_R_GPIO_PIN)
#define LED_R_ON			GPIO_LOW(LED_R_GPIO_PORT, LED_R_GPIO_PIN)
#define LED_R_OFF			GPIO_HIGH(LED_R_GPIO_PORT, LED_R_GPIO_PIN)

#define LED_B_TOGGLE		GPIO_TOGGLE(LED_B_GPIO_PORT, LED_B_GPIO_PIN)
#define LED_B_ON			GPIO_LOW(LED_B_GPIO_PORT, LED_B_GPIO_PIN)
#define LED_B_OFF			GPIO_HIGH(LED_B_GPIO_PORT, LED_B_GPIO_PIN)

//绿灯
#define LED_GREEN	\
						LED_G_ON;\
						LED_R_OFF;\
						LED_B_OFF;

//红灯
#define LED_RED	\
						LED_G_OFF;\
						LED_R_ON;\
						LED_B_OFF;

//蓝灯				
#define LED_BLUE	\
						LED_G_OFF;\
						LED_R_OFF;\
						LED_B_ON;

//黄灯(绿+红)
#define LED_YELLOW	\
						LED_G_ON;\
						LED_R_ON;\
						LED_B_OFF;						

//紫灯(红+蓝)
#define LED_PURPLE	\
						LED_G_OFF;\
						LED_R_ON;\
						LED_B_ON;

//青灯(绿+蓝)
#define LED_CYAN	\
						LED_G_ON;\
						LED_R_OFF;\
						LED_B_ON;
						
void Delay(unsigned int a);
void LED_GPIO_Config(void);
void LED_COLLOUR(void);

#endif /*__BSP_LED_H*/

总结

使用固件库点亮LED灯需要的步骤:

  1. 在bsp_led.h文件中配置硬件接口信息。
#define LED_G_GPIO_PIN        GPIO_Pin_0			//绿灯IO口
#define LED_G_GPIO_PORT       GPIOB					
#define LED_G_GPIO_CLK        RCC_APB2Periph_GPIOB	//绿灯时钟使能寄存器
  1. 在bsp_led.c文件中写led灯配置函数void LED_GPIO_Config(void);其中内容包括定义GPIO结构体,打开GPIO口的时钟,配置IO口的引脚、输出方式,速度,初始化IO口。
void LED_GPIO_Config(void)
{
	GPIO_InitTypeDef  GPIO_InitStruct;        //定义GPIO结构体
	
	RCC_APB2PeriphClockCmd(LED_G_GPIO_CLK | LED_R_GPIO_CLK | LED_B_GPIO_CLK, ENABLE); 
	/*打开GPIO的时钟,第一个参数是要打开哪个GPIO口的时钟,
   	第二个参数为ENABLE时即是使能,即打开。该函数在stm32f10x_rcc.c中。*/
	
	/*-------配置绿灯IO口---------*/
	GPIO_InitStruct.GPIO_Pin = LED_G_GPIO_PIN;      //配置IO口
	GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;   //配置为推挽输出
	GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;  //配置速度为50MHz
	GPIO_Init(LED_G_GPIO_PORT , &GPIO_InitStruct);	//GPIO口初始化
	GPIO_SetBits(LED_G_GPIO_PORT, LED_G_GPIO_PIN);	//关闭绿灯,若不关闭时初始化后IO口默认低电平会使绿灯亮起,下同。
}
  1. 在main.c函数调用led灯配置函数,即可完成配置。根据需要调用stm32f10x_gpio.h文件中的函数来操控led灯的亮灭。

代码来源于野火视频教程,有所修改。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值