一、LED简介
LED(Light Emitting Diode),发光二极管,是一种能够将电能转化为可见光的固态的半导体器件,它可以直接把电转化为光。LED 的心脏是一个半导体的晶片,晶片的一端附在一个支架上,一端是 负极,另一端连接电源的 正极,使整个晶片被环氧树脂封装起来。
半导体晶片由两部分组成,一部分是 P 型半导体,在它里面 空穴 占主导地位,另一端是 N 型半导体,在这边主要是 电子。但这两种半导体连接起来的时候,它们之间就形成一个 P-N 结。当电流通过导线作用于这个晶片的时候,电子就会被推向 P 区,在 P 区里电子跟空穴复合,然后就会以光子的形式发出能量,这就是 LED 灯发光的原理。而光的波长也就是光的颜色,是由形成 P-N 结的材料决定的。
二、源码实现
2.1、原理图
通过原理图分析,LED1 和 LED2 的阳极接高电平,阴极分别接 PF9 引脚和 PF10 引脚,当 PF9 和 PF10 引脚输出低电平的时候,LED 导通,发光。因此,PF9 和 PF11 可以配置为 推挽输出,输出低电平。
2.2、程序源码
LED 初始化函数内容如下:
/**
* @brief led初始化函数
*
*/
void LED_Init(void)
{
GPIO_InitTypeDef GPIO_InitStruct = {0};
__HAL_RCC_GPIOF_CLK_ENABLE(); // 使能GPIOF的时钟
GPIO_InitStruct.Pin = GPIO_PIN_9; // GPIO引脚
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; // 推挽输出模式
GPIO_InitStruct.Pull = GPIO_NOPULL; // 不使用上下拉
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; // 高速模式
HAL_GPIO_Init(GPIOF, &GPIO_InitStruct); // GPIO初始化
HAL_GPIO_WritePin(GPIOF, GPIO_PIN_9, GPIO_PIN_SET); // PF9,默认高电平,熄灭led
}
有关时钟配置函数请在 STM32 的时钟系统 篇章查看。
有关延迟的函数请在 系统滴答定时器 篇章查看。
main() 函数内容如下:
int main(void)
{
HAL_Init();
System_Clock_Init(8, 336, 2, 7);
Delay_Init(168);
LED_Init();
while (1)
{
HAL_GPIO_TogglePin(GPIOF, GPIO_PIN_9); // GPIO电平翻转
HAL_Delay(1000);
}
return 0;
}
标签:HAL,GPIO,点亮,LED,Init,GPIOF,InitStruct,06
From: https://www.cnblogs.com/kurome/p/18041459