2. 点亮LED灯

任务说明

本案例基于Hi3861开发板,通过操作GPIO寄存器实现LED灯的点亮与熄灭控制,最终完成LED闪烁效果。开发板上的LED通常连接在GPIO9引脚(不同板型可能有所差异,请以实际原理图为准),输出高电平点亮LED,输出低电平熄灭LED。

硬件连接

Hi3861 SoC GPIO9 Controller GPIO9 330Ω LED GND Hi3861 WLAN SoC LED正极接GPIO9,负极经电阻接地

连接方式:将LED正极(长脚)通过330Ω限流电阻连接到Hi3861的GPIO9引脚,LED负极(短脚)直接连接到GND。GPIO9输出高电平时LED点亮,输出低电平时LED熄灭。

代码实现

在Hi3861开发环境中,新建文件led_blink.c,输入以下代码:

#include <stdio.h>
#include <unistd.h>
#include "ohos_init.h"
#include "cmsis_os2.h"
#include "iot_gpio.h"
#include "iot_gpio_ex.h"

#define LED_GPIO 9
#define TASK_STACK_SIZE 4096
#define TASK_PRIORITY 25

// LED闪烁任务
static void *LedBlinkTask(const char *arg)
{
    (void)arg;
    // 初始化GPIO9为普通GPIO功能
    IoTGpioInit(LED_GPIO);
    // 设置为输出模式
    IoTGpioSetDir(LED_GPIO, IOT_GPIO_DIR_OUT);
    // 初始状态:熄灭
    IoTGpioSetOutputVal(LED_GPIO, IOT_GPIO_VALUE0);

    while (1) {
        // 点亮LED
        IoTGpioSetOutputVal(LED_GPIO, IOT_GPIO_VALUE1);
        usleep(500000);  // 延时500ms
        // 熄灭LED
        IoTGpioSetOutputVal(LED_GPIO, IOT_GPIO_VALUE0);
        usleep(500000);  // 延时500ms
    }
    return NULL;
}

// 创建LED闪烁任务
static void LedBlinkEntry(void)
{
    osThreadAttr_t attr = {0};
    attr.name = "LedBlinkTask";
    attr.stack_size = TASK_STACK_SIZE;
    attr.priority = TASK_PRIORITY;

    if (osThreadNew((osThreadFunc_t)LedBlinkTask, NULL, &attr) == NULL) {
        printf("Failed to create LedBlinkTask\r\n");
    }
}

// 应用入口
SYS_RUN(LedBlinkEntry);

代码说明

代码核心逻辑如下:

  • IoTGpioInit(LED_GPIO):初始化GPIO9引脚,使其脱离默认状态,进入可配置模式。
  • IoTGpioSetDir(LED_GPIO, IOT_GPIO_DIR_OUT):将GPIO9配置为输出方向。
  • IoTGpioSetOutputVal():控制引脚输出电平,IOT_GPIO_VALUE1为高电平点亮LED,IOT_GPIO_VALUE0为低电平熄灭LED。
  • 通过usleep(500000)实现500ms延时,使LED以1Hz频率闪烁(亮500ms、灭500ms)。
  • SYS_RUN(LedBlinkEntry):系统启动时自动执行入口函数,创建LED控制任务。

编译与烧录

将led_blink.c添加到Hi3861工程的applications/sample/wifi-iot/app目录下,并在对应BUILD.gn文件中添加源文件引用。然后执行以下命令编译:

python build.py wifiiot

编译成功后,使用HiSuite工具或DevEco Device Tool将生成的Hi3861_wifiiot_app_allinone.bin烧录到开发板。

验证方法

完成烧录并复位开发板后,观察开发板上的LED灯状态。判定标准:

  • LED灯以约1Hz频率持续闪烁(约每秒亮灭各一次);
  • 闪烁节奏稳定,无异常停顿或熄灭不亮现象。

若LED不亮或闪烁异常,请检查GPIO引脚号是否与开发板原理图一致,以及LED正负极连接是否正确。