使用固件库点亮LED灯(GPIO输出)

本文详细介绍了如何使用STM32通过GPIO控制LED灯的亮灭,并展示了如何实现基本颜色混合。通过定义不同的宏来切换红、绿、蓝、黄、紫、青、白和关闭所有LED,程序中包含了初始化函数和简单的延时函数,实现了颜色的循环显示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原理

LED 灯的阴极都是连接到STM32 的GPIO 引脚,只要我们控制GPIO 引脚的电平输出状态,
即可控制LED 灯的亮灭。若使用的实验板LED 灯的连接方式或引脚不一样,只需根据
工程修改引脚即可,程序的控制原理相同。

硬件设计

软件设计

led.h

#ifndef __LED_H
#define	__LED_H
#include "led.h"
#include "sys.h"

#define LED1 PBout(5)// PB5
#define LED2 PBout(0)// PB0
#define LED3 PBout(1)// PB1	

#define ON  1
#define OFF 0


///* 基本混色,后面高级用法使用PWM可混出全彩颜色,且效果更好 */
//红
#define LED_RED \
{LED1=0; \
LED2=1; \
LED3=1;} \

//绿
#define LED_GREEN \
{LED1=1; \
LED2=0; \
LED3=1;}  

//蓝
#define LED_BLUE \
 LED1=1; \
 LED2=1; \
 LED3=0

//黄(红+绿)					
#define LED_YELLOW	\
					LED1=0;\
					LED2=0; \
					LED3=1
//紫(红+蓝)
#define LED_PURPLE	\
					LED1=0;\
					LED2=1; \
					LED3=0

//青(绿+蓝)
#define LED_CYAN \
					LED1=1;\
					LED2=0 ;\
					LED3=0
					
//白(红+绿+蓝)
#define LED_WHITE	\
					LED1=0;\
					LED2=0; \
					LED3=0
					
//黑(全部关闭)
#define LED_RGBOFF	\
					LED1=1;\
					LED2=1 ;\
					LED3=1



void LED_Init(void);

#endif /* __LED_H */

 led.c

#include "led.h"
#include "stm32f10x.h"


//初始化PB5和PE5为输出口.并使能这两个口的时钟		    
//LED IO初始化
void LED_Init(void)
{		
		
		GPIO_InitTypeDef GPIO_InitStructure;                   //定义一个GPIO_InitTypeDef类型的结构体
		
		RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB, ENABLE);            //开启LED相关的GPIO外设时钟
		
	
		GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5|GPIO_Pin_0|GPIO_Pin_1;	  //选择要控制的GPIO引脚
		GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;                  //设置引脚模式为通用推挽输出
		GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;                 //设置引脚速率为50MHz 	
		GPIO_Init(GPIOB, &GPIO_InitStructure);	                          //调用库函数,初始化GPIO
		

		/* 关闭所有led灯	*/
		GPIO_SetBits(GPIOB, GPIO_Pin_5);
		GPIO_SetBits(GPIOB, GPIO_Pin_0);	 
		GPIO_SetBits(GPIOB, GPIO_Pin_1);
}

main.c

#include "stm32f10x.h"
#include "led.h"

#define SOFT_DELAY Delay(0x0FFFFF);

void Delay(__IO u32 nCount); 


int main(void)
{	
	/* LED 端口初始化 */
	LED_Init();	 

	while (1)
	{
		LED1=0;
		LED1=0;			  // 亮
		SOFT_DELAY;
		LED1=1;		   // 灭

		LED2=1;			 // 亮
		SOFT_DELAY;
		LED2=1;		   // 灭

		LED3=0;			 // 亮
		SOFT_DELAY;
		LED3=1;		   // 灭	 

		/*轮流显示 红绿蓝黄紫青白 颜色*/
		LED_RED;
		SOFT_DELAY;
		
		
		LED_GREEN;
		SOFT_DELAY;
		
		LED_BLUE;
		SOFT_DELAY;
		
		LED_YELLOW;
		SOFT_DELAY;
		
		
		LED_GREEN;
		SOFT_DELAY;
		
		LED_BLUE;
		SOFT_DELAY;
		
		LED_YELLOW;
		SOFT_DELAY;
		
		LED_PURPLE;
		SOFT_DELAY;
				
		LED_CYAN;
		SOFT_DELAY;
		
		LED_WHITE;
		SOFT_DELAY;
		
		LED_RGBOFF;
		SOFT_DELAY;		
	}
}

void Delay(__IO uint32_t nCount)	 //简单的延时函数
{
	for(; nCount != 0; nCount--);
}

输出型:

就是我们主动去调用的控制函数,比如说控制LED灯去亮和灭,控制蜂鸣器响和不响,控制LCD显示,控制继电器吸合和断开。

输入型:

输入型函数一般是用在不同.c文件/不同层(硬件层、应用层)之间传递信号和数据的,比如说按键检测、串口数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值