• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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