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

原理

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文件/不同层(硬件层、应用层)之间传递信号和数据的,比如说按键检测、串口数据。

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
如果你想使用固件点亮LED,你可以按照以下步骤进行操作: 1. 首先,创建一个新的文件夹,用于存放LED的控制代码。例如,你可以创建一个名为"led"的文件夹。 2. 在"led"文件夹中创建两个文件,分别是"led.c"和"led.h"。这些文件将包含LED的控制函数。 3. 打开"led.h"文件,并在其中定义LED的引脚。根据引用中的说明,你可以将PF6、PF7和PF8引脚分别与RGB的R、G和B连接起来。 4. 在"led.h"文件中声明LED控制函数。根据你的需求,你可以创建函数来控制单个LED的亮灭,或者同时控制多个LED来混合成不同的颜色。 5. 打开"led.c"文件,并实现LED控制函数。根据引用中的示例代码,你可以使用GPIO来配置LED的引脚,并在main函数中测试LED的亮灭。 6. 在main函数中,你可以使用控制函数来点亮或熄灭LED。根据你的需求,你可以选择控制单个LED,或者轮流显示不同颜色的。 以下是使用固件点亮LED的示例代码: #include "./led/led.h" int main(void) { /* LED 端口初始化 */ LED_GPIO_Config(); /* 控制LED */ while (1) { LED1( ON ); // 点亮LED1 Delay(0xFFFFFF); LED1( OFF ); // 熄灭LED1 Delay(0xFFFFFF); // 其他LED的控制... // 轮流显示不同颜色的LED LED_RED; Delay(0xFFFFFF); LED_GREEN; Delay(0xFFFFFF); LED_BLUE; Delay(0xFFFFFF); // 其他颜色的控制... LED_RGBOFF; Delay(0xFFFFFF); } } void Delay(__IO uint32_t nCount) { for (; nCount != 0; nCount--); }

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值