单手拿捏HAL库之点亮LED
作者:沈已成
b站视频链接: 还未制作,点击打开往期视频,持续更新中!!!
一、LED概述
LED(Light Emitting Diode) 是==发光二极管==的缩写,它是一种半导体发光器件,当通电时会发出光,有体积小,重量轻,寿命长的优点,可发出多种颜色。通过选用不同的半导体材料,可制造出红、绿、蓝、黄、橙等多种颜色的LED。LED广泛应用于指示灯、背光源、交通信号灯、显示屏、照明等领域。随着技术的不断进步,LED正在逐步取代传统的白炽灯和荧光灯,成为一种节能环保的新型光源。
二、LED电路分析:
核心板上的LED电路如下图由四部分组成,引脚PA2、LED灯、==限流电阻==、3.3V电源,我们知道二极管有单向导通的特性,所以根据电路图分析可得知当PA2引脚为低电平(0V)时,二极管可以被点亮,那么限流电阻有什么作用呢?LED对于电流非常敏感,限流电阻可以限制LED的工作电流,防止电流过大导致LED烧坏,也可以有效的提高LED的工作寿命。
三、CubeMx设置:
上一节我们介绍了GPIO的基础知识,那我想提问一下这位吴彦祖(刘亦菲)点亮LED需要用到输入模式还是输出模式呢?没错,就是输出模式,因为点亮LED需要我们去控制外设,控制引脚为低电平从而点亮LED,明确思路后我们开始操作。时钟设置以及项目创建这里不再赘述。
首先需要在右边的芯片图中找到LED引脚PA2,左键单击后选择==GPIO_OUTPUT==(GPIO输出模式)。
该引脚变为绿色,说明设置成功。
在左侧点击System Core展开下拉列表,再点击GPIO进入GPIO管理界面。
单击引脚后下方会出现引脚设置的界面
第一个选项是GPIO output level,其中有两个参数(high,low),这个选项决定了上电后该引脚的电平,如果设置为high,上电后为高电平,反之,上电后为低电平。
第二个选项是GPIO MODE,里面的两个参数分别是Output Push Pull(推挽输出)、Output Open Drain(开漏输出),推挽输出可以输出高低电平,而开漏输出无法直接输出高电平,要借助外部上拉电阻,这里我们默认选择Output Push Pull即可。
第三个选项是GPIO Pull-up/Pull-domn,其中有三个参数分别是Pull-up(上拉)、Pull-domn(下拉)、No Pull-up and no Pull-domn(既不上拉也不下拉),我们此时使用的是输出模式,所以默认选择既不上拉也不下拉,这样可以保证引脚能正确输出目标电平。
第四个选项是Maximum output speed,即最大输出速度,选项中有三种不同的速度,分别是low(低)、medium(中)、high(高),速度越大,响应越快,但是功耗也会随之增加,这里我们默认选择Low即可。
第五个选项是User Label,即用户自定义名字,这里我们可以设置为LED,或者你自己喜欢的名字,目的是方便我们识别对应的引脚,在后续的开发中,当引脚多起来的时候非常的好用。
在设置完毕后,引脚后的Modified选项会被自动打勾,说明这个引脚已被设置。
四、函数讲解:
(1) HAL_Delay(); //延时函数
函数原型:
void HAL_Delay(uint32_t Delay); //延时函数
HAL_Delay(uint32_t Delay)是HAL库中提供的一个延时函数,它的作用是在指定的时间内暂停程序的执行。函数中的参数就是设置暂停程序的时间,单位为毫秒(ms)。但是,HAL_Delay() 函数会阻塞程序的执行,在延时期间无法执行其他任务。
HAL_Delay() 函数提供了一种简单易用的软件延时方式,适用于一些不太严格的延时需求。对于需要更精确延时控制的场合,可以自行实现基于硬件定时器的延时函数。
Tips:
1、在编程中,阻塞指的是一个函数或操作会暂停程序的执行,直到该函数或操作完成或满足某个条件。这种情况下,程序的执行会被"阻塞"在该函数或操作上,无法继续执行其他任务。
2、毫秒(ms)和秒(S)之间的换算 -> 1s = 1000ms
因此,在某些需要避免阻塞状态出现的情况,HAL_Delay()需要慎重使用!!
使用示例:
HAL_Delay(1000); //延时1S(1000ms)
(2) HAL_GPIO_WritePin();//GPIO引脚状态设置函数
函数原型:
void HAL_GPIO_WritePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState)
HAL_WritePin()是 HAL库中提供的一个用于设置GPIO引脚状态的函数。它的作用是将指定的GPIO引脚设置为高电平或低电平。
参数含义:
1、GPIOx: 表示要操作的GPIO端口,可以是GPIOA、GPIOB、GPIOC等。
2、GPIO_Pin: 表示要操作的GPIO引脚,可以是GPIO_PIN_0、GPIO_PIN_1等。
3、PinState: 表示要设置的引脚状态,可以是GPIO_PIN_RESET(低电平)或GPIO_PIN_SET(高电平)。
HAL_WritePin()函数提供了一种简单易用的方式来控制GPIO引脚的输出状态,适用于需要直接操作GPIO引脚的场景。对于更复杂的GPIO控制需求,可以进一步封装该函数或使用其他HAL库函数。
(3) HAL_GPIO_TogglePin():
函数原型:
HAL_GPIO_TogglePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
HAL_GPIO_TogglePin是HAL库提供的一个函数,用于切换GPIO引脚的电平状态。
1、GPIOx: 要操作的 GPIO 端口,可以是 GPIOA、GPIOB、GPIOC 等。
2、GPIO_Pin: 要操作的 GPIO 引脚,可以是 GPIO_PIN_0、GPIO_PIN_1 等。
每次调用 HAL_GPIO_TogglePin 函数,引脚的电平状态就会从高电平切换到低电平,或从低电平切换到高电平。
这个函数通常用于实现 LED 的闪烁或其他简单的 GPIO 控制操作。
五、点亮LED示例
#include "LED.h"
void LED()//点亮LED
{
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_2,GPIO_PIN_RESET);
}
void LED_Delay()//使用WritePin,闪烁周期是1s
{
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_2,GPIO_PIN_RESET);
HAL_Delay(1000);
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_2,GPIO_PIN_SET);
HAL_Delay(1000);
}
void LED_Toggle()//使用TogglePin,闪烁周期是500ms
{
HAL_GPIO_TogglePin(GPIOA,GPIO_PIN_2);
HAL_Delay(500);
}