蓝桥杯嵌入式之点亮LED

“万物起源”皆点灯,咱们无论玩什么单片机,好像第一步开始的都是点灯,点灯成功就代表着开始打开这一款单片机的大门啦。

相信有看过蓝桥杯嵌入式省赛、国赛题目的同学都知道届届有点灯,题题要点灯。当然题目中的点灯不是特别简单的亮与灭,比如亮5秒之类的,而且需要不阻塞延时,当然这里只讲最基础的亮灭,等到咱们TIM的时候,再来提不阻塞延时

好啦,话不多说,接下来开始咱们的点灯这重要一步

下面这个是咱们的点灯电路图,可以看到,PC8~PC15都是接在GND一遍,所以当PC8~PC15是低电平的时候,会形成电压差,从而点灯

看了电路图就应该进入到STM32CubeMx配置引脚啦

 

接下来PC8~PC15都这样配置就行,其他选项默认,配置好后可以根据自己的习惯在User Label把引脚改为自己习惯的名字,例如PC8改名为LD1。但是我这个人就很懒,所以一般不改别名,也因为这样我也把各个引脚的功能记得差不多了,哈哈哈哈

 

 千万别忘记了PD2引脚,这个引脚一般用来锁存,按照我自己的理解呢,锁存就是把引脚电平锁在一个电平内,因为LED灯与LCD屏共用了PC8~PC15,一般会导致很奇怪的现象,所以锁存就显得非常有用了,当然后面讲LCD的时候也会有更多对这个冲突的讲解

好啦,配置完之后,就点击GENERATE CODE生成就好啦,要是有什么基础配置不懂的话,就到我们的stm32CubeMx配置查看哦

 先添加LED.c和LED.h文件

然后就开始编写咱们得LED.h文件啦

#ifndef _LED_H
#define	_LED_H

#include "main.h"


void	LED_OFF(void); 

void	LED_ON(void); 

void	LED_Assign(uint16_t LED_data,char LED_Level);  


#endif

然后是LED.c文件

#include "LED.h"

void	LED_OFF(void) //把所有灯关掉
{
	HAL_GPIO_WritePin(GPIOC,GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15|GPIO_PIN_10
	|GPIO_PIN_9|GPIO_PIN_11|GPIO_PIN_12|GPIO_PIN_8,GPIO_PIN_SET);
	HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_SET);
	HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_RESET);	
}

void	LED_ON(void) //把所有灯打开
{
	HAL_GPIO_WritePin(GPIOC,GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15|GPIO_PIN_10
	|GPIO_PIN_9|GPIO_PIN_11|GPIO_PIN_12|GPIO_PIN_8,GPIO_PIN_RESET);
	HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_SET);
	HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_RESET);	
}

void	LED_Assign(uint16_t LED_data,char LED_Level)  //选择哪个灯和电平状态
{
	HAL_GPIO_WritePin(GPIOC,LED_data,(GPIO_PinState)LED_Level);
	HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_SET);
	HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_RESET);
}

 LED.c代码要是问为什么要用这么多GPIO_PIN,不直接就用输出寄存器,简便不繁琐呢

我个人觉得吧,这个简便好记,实现功能就好了,哈哈哈哈

void	LED_Assign(uint16_t LED_data,char LED_Level) 

这个函数中的为什么要用到(GPIO_PinState)LED_Level呢,主要是这个位置本被枚举函数占用了,假如直接就是char类型的话,会出现枚举与char混合情况出现警告,所以就强制类型转化一下就不会有警告啦,当然警告并不会导致功能出现错误,觉得麻烦可以不用管,反正咱们主打一个能跑就行要什么自行车

好了,LED.c文件和LED.h文件都写好了,这时候就得到main.c函数“大展神威”了

首先在用户编写头文件处编写引用头文件,记得一定要在USER CODE BEGIN和USER CODE END之间编写,不然有时候代码会被“刷”掉

到达int main()函数里面啦

在这里咱们得先把全部灯关掉,毕竟不关掉怎么能看到咱们“大展神威”呢

在while函数里面调用选择哪号灯开关灯函数 

可能有细心的好兄弟会好奇,咦~为啥有的是LED_Assign(GPIO_PIN_8,0);

有的是LED_Assign(GPIO_PIN_9,GPIO_PIN_RESET);呢,这两个其实是一样滴,就是给兄弟们看看这两种调用方式。第一种有个好处就是可以定义一个标志位,可以根据题目所要求变化更加方便 ,后面会有奇用哦

好啦,咱们得嵌入式之路,已经踏出,你是否成功了呢?

  • 27
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值