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