2. 基于Hi3861的GPIO输出控制LED闪烁
任务说明
本案例要求在鸿蒙南向设备开发环境中,通过GPIO接口控制开发板上的LED灯实现周期性闪烁。核心目标是掌握GPIO引脚的输出模式配置、电平状态控制以及延时函数的配合使用。最终效果为LED以固定时间间隔交替点亮与熄灭。
硬件连接与原理
开发板上的LED通常通过限流电阻连接到某个GPIO引脚。当GPIO输出高电平时LED点亮,输出低电平时LED熄灭。本案例以Hi3861开发板为例,板载LED连接在GPIO2引脚(实际引脚号以开发板原理图为准,代码中通过宏定义可灵活修改)。
代码实现
在鸿蒙OpenHarmony的南向设备开发中,GPIO操作通过IoT硬件接口层提供。以下代码完整实现了LED闪烁功能:
// led_blink.c
#include <stdio.h>
#include <unistd.h>
#include "iot_gpio.h"
#include "iot_gpio_ex.h"
#define LED_GPIO 2 // LED连接的GPIO引脚号
#define BLINK_INTERVAL_US 500000 // 闪烁间隔500ms
void led_blink_task(void)
{
// 初始化GPIO为输出模式
IoTGpioInit(LED_GPIO);
// 设置引脚方向为输出
IoTGpioSetDir(LED_GPIO, IOT_GPIO_DIR_OUT);
while (1) {
// 输出高电平,点亮LED
IoTGpioSetOutputVal(LED_GPIO, IOT_GPIO_VALUE1);
usleep(BLINK_INTERVAL_US);
// 输出低电平,熄灭LED
IoTGpioSetOutputVal(LED_GPIO, IOT_GPIO_VALUE0);
usleep(BLINK_INTERVAL_US);
}
}
代码说明
上述代码中,IoTGpioInit()完成GPIO外设的初始化,IoTGpioSetDir()将引脚配置为输出模式。IoTGpioSetOutputVal()用于设置引脚电平状态,参数IOT_GPIO_VALUE1表示高电平,IOT_GPIO_VALUE0表示低电平。usleep()函数提供微秒级延时,500000微秒即0.5秒。主循环中交替输出高低电平,实现LED的周期性闪烁。
编译与烧录
将上述代码文件添加到鸿蒙源码工程的applications目录下对应模块中,并在BUILD.gn文件中添加源文件引用。编译命令如下:
python build.py wifiiot
编译成功后,使用HiBurn工具将生成的bin文件烧录至开发板。烧录完成后,按下开发板复位键,程序即开始运行。
验证方法
完成烧录并复位开发板后,观察板载LED状态。判定标准如下:
- LED以约0.5秒为间隔交替点亮和熄灭,周期约为1秒;
- 闪烁持续进行,无中断或异常停止;
- 若LED不亮或常亮不闪,检查GPIO引脚号是否与硬件连接一致,以及代码中延时参数是否生效。
通过逻辑分析仪或万用表测量GPIO2引脚电平,可观察到0.5秒高电平与0.5秒低电平交替输出的方波信号,频率约为1Hz。