06. 点亮LED

一、LED简介

  LED(Light Emitting Diode),发光二极管,是一种能够将电能转化为可见光的固态的半导体器件,它可以直接把电转化为光。LED 的心脏是一个半导体的晶片,晶片的一端附在一个支架上,一端是 负极,另一端连接电源的 正极,使整个晶片被环氧树脂封装起来。

  半导体晶片由两部分组成,一部分是 P 型半导体,在它里面 空穴 占主导地位,另一端是 N 型半导体,在这边主要是 电子。但这两种半导体连接起来的时候,它们之间就形成一个 P-N 结。当电流通过导线作用于这个晶片的时候,电子就会被推向 P 区,在 P 区里电子跟空穴复合,然后就会以光子的形式发出能量,这就是 LED 灯发光的原理。而光的波长也就是光的颜色,是由形成 P-N 结的材料决定的。

二、原理图

LED灯模块

LED灯模块引脚接线图

  通过原理图分析,LED1 和 LED2 的阳极接高电平,阴极分别接 PF9 引脚和 PF10 引脚,当 PF9 和 PF10 引脚输出低电平的时候,LED 导通,发光。因此,PF9 和 PF11 可以配置为 推挽输出输出低电平

三、程序源码

  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初始化

    GPIO_InitStruct.Pin = GPIO_PIN_10;                                          // GPIO引脚
    HAL_GPIO_Init(GPIOF, &GPIO_InitStruct);                                     // GPIO初始化

    HAL_GPIO_WritePin(GPIOF, GPIO_PIN_9, GPIO_PIN_SET);                         // PF9,默认高电平,熄灭led
    HAL_GPIO_WritePin(GPIOF, GPIO_PIN_10, GPIO_PIN_SET);                        // PF10,默认高电平,熄灭led
}

  LED 状态设置函数:

/**
 * @brief 设置LED状态函数
 * 
 * @param LED_Port LED的GPIO端口
 * @param LED_Pin LED的GPIO引脚
 * @param status LED的状态枚举值
 */
void LED_SetStatus(GPIO_TypeDef *LED_Port, uint16_t LED_Pin, LED_State status)
{
    if(status == LED_ON)
    {
        HAL_GPIO_WritePin(LED_Port, LED_Pin, GPIO_PIN_RESET);
    }
    else
    {
        HAL_GPIO_WritePin(LED_Port, LED_Pin, GPIO_PIN_SET);
    }
}

  main() 函数内容如下:

int main(void)
{
    HAL_Init();
    System_Clock_Init(8, 336, 2, 7);
    Delay_Init();

    LED_Init();

    while (1)
    {
        LED_SetStatus(GPIOF, GPIO_PIN_9, LED_ON);
        LED_SetStatus(GPIOF, GPIO_PIN_10, LED_OFF);
        HAL_Delay(1000);

        LED_SetStatus(GPIOF, GPIO_PIN_9, LED_OFF);
        LED_SetStatus(GPIOF, GPIO_PIN_10, LED_ON);
        HAL_Delay(1000);
    }
  
    return 0;
}
posted @ 2023-10-31 18:26  星光映梦  阅读(120)  评论(0)    收藏  举报