2. Hi3861开发板第一个LED闪烁程序
任务说明
本案例基于Hi3861开发板,通过操作GPIO寄存器实现LED灯的点亮与熄灭控制,最终完成LED闪烁效果。开发板上的LED通常连接在GPIO9引脚(不同板型可能有所差异,请以实际原理图为准),输出高电平点亮LED,输出低电平熄灭LED。
硬件连接
连接方式:将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正负极连接是否正确。