• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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    >![](../public_sys-resources/icon-note.gif) **说明:**
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![](figures/LED闪烁图.gif "LED闪烁图")
110
111