1# LED外设控制<a name="ZH-CN_TOPIC_0000001054530966"></a> 2 3 4## 概述<a name="section14639174516337"></a> 5 6OpenHarmony WLAN模组基于Hi3861平台提供了丰富的外设操作能力,包含I2C、I2S、ADC、UART、SPI、SDIO、GPIO、PWM、FLASH等。本文介绍如何通过调用OpenHarmony的NDK接口,实现对GPIO控制,达到LED闪烁的效果。其他的IOT外设控制,开发者可根据API指导文档完成,此处不逐一介绍。 7 8## 开发<a name="section13857170163412"></a> 9 101. 请先完成[轻量系统快速入门](../quick-start/quickstart-overview.md)。 11 12 LED控制参考示例存放于applications/sample/wifi-iot/app/iothardware/led\_example.c文件中。 13 142. 实现IOT外设控制,首先需要通过查阅原理图明确接线关系。经过查阅,hispark pegasus的LED与芯片的9号管脚相连。 15 16 ``` 17 #define LED_TEST_GPIO 9 18 ``` 19 20 >![](../public_sys-resources/icon-note.gif) **说明:** 21 >开发板原理图,请开发者联系Hi3861购买渠道客服获取。 22 233. 使用GPIO前,需要完成GPIO管脚初始化,明确管脚用途,并创建任务,使LED周期性亮灭,达到闪烁的效果。 24 25 ``` 26 static void LedExampleEntry(void) 27 { 28 osThreadAttr_t attr; 29 30 /* 管脚初始化 */ 31 IoTGpioInit(LED_TEST_GPIO); 32 /* 配置9号管脚为输出方向 */ 33 IoTGpioSetDir(LED_TEST_GPIO, IOT_GPIO_DIR_OUT); 34 35 attr.name = "LedTask"; 36 attr.attr_bits = 0U; 37 attr.cb_mem = NULL; 38 attr.cb_size = 0U; 39 attr.stack_mem = NULL; 40 attr.stack_size = LED_TASK_STACK_SIZE; 41 attr.priority = LED_TASK_PRIO; 42 43 /* 启动任务 */ 44 if (osThreadNew((osThreadFunc_t)LedTask, NULL, &attr) == NULL) { 45 printf("[LedExample] Failed to create LedTask!\n"); 46 } 47 } 48 ``` 49 504. 在循环任务中通过周期性亮灭形式实现LED闪烁。 51 52 ``` 53 static void *LedTask(const char *arg) 54 { 55 (void)arg; 56 while (1) { 57 switch (g_ledState) { 58 case LED_ON: 59 IoTGpioSetOutputVal(LED_TEST_GPIO, 1); 60 usleep(LED_INTERVAL_TIME_US); 61 break; 62 case LED_OFF: 63 IoTGpioSetOutputVal(LED_TEST_GPIO, 0); 64 usleep(LED_INTERVAL_TIME_US); 65 break; 66 case LED_SPARK: 67 IoTGpioSetOutputVal(LED_TEST_GPIO, 0); 68 usleep(LED_INTERVAL_TIME_US); 69 IoTGpioSetOutputVal(LED_TEST_GPIO, 1); 70 usleep(LED_INTERVAL_TIME_US); 71 break; 72 default: 73 usleep(LED_INTERVAL_TIME_US); 74 break; 75 } 76 } 77 } 78 ``` 79 805. 在代码最下方,使用OpenHarmony启动恢复模块接口SYS\_RUN\(\)启动业务。(SYS\_RUN定义在ohos\_init.h文件中) 81 82 ``` 83 SYS_RUN(LedExampleEntry); 84 ``` 85 866. 修改applications/sample/wifi-iot/app/BUILD.gn文件,使led\_example.c参与编译。 87 88 ``` 89 import("//build/lite/config/component/lite_component.gni") 90 lite_component("app") { 91 features = [ 92 "iothardware:led_example" 93 ] 94 } 95 ``` 96 97 98## 验证<a name="section1949121910344"></a> 99 100编译过程请参考[轻量系统快速入门的编译章节](../quick-start/quickstart-ide-3861-build.md),烧录过程请参考[轻量系统快速入门的烧录章节](../quick-start/quickstart-ide-3861-burn.md)。 101 102完成以上两步后,按下RST键复位模组,可发现LED在周期性闪烁,与预期相符,验证完毕。 103 104**图 1** LED闪烁图<a name="fig20768175218527"></a> 105![](figures/LED闪烁图.gif "LED闪烁图") 106 107