1 Star 0 Fork 5K

戈英祯 / docs

forked from OpenHarmony / docs 
加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
device-wlan-led-outcontrol.md 4.20 KB
一键复制 编辑 原始数据 按行查看 历史
duangavin123 提交于 2021-08-13 18:42 . update 导入OpenHarmony工程

LED Peripheral Control

Overview

Based on the Hi3861 platform, the OpenHarmony WLAN module provides abundant peripheral operation capabilities, including the I2C, I2S, ADC, UART, SPI, SDIO, GPIO, PWM, and flash memory. This document describes how to control GPIO pins by calling the OpenHarmony native development kit (NDK) interface to implement LED blinking. For details about how to control other IoT peripherals, see the API guide.

Development

  1. Complete the operations described in Getting Started with Hi3861.

    LED control examples are stored in the file applications/sample/wifi-iot/app/iothardware/led_example.c.

  2. Understand the cable connections by referring to the schematic diagram. You can learn that LED of hispark pegasus is connected to pin 9 of the chip.

    #define LED_TEST_GPIO 9

    NOTE: For details about the schematic diagram of the development board, contact the Hi3861 customer service personnel.

  3. Initialize the GPIO pin, specify the pin usage, and create a task to turn on or off the LED periodically so that the LED blinks.

    static void LedExampleEntry(void)
    {
        osThreadAttr_t attr;
    
        /* Initialize the GPIO pin. */
        IoTGpioInit(LED_TEST_GPIO);
        /* Set pin 9 as the output direction. */
        IoTGpioSetDir(LED_TEST_GPIO, IOT_GPIO_DIR_OUT);
    
        attr.name = "LedTask";
        attr.attr_bits = 0U;
        attr.cb_mem = NULL;
        attr.cb_size = 0U;
        attr.stack_mem = NULL;
        attr.stack_size = LED_TASK_STACK_SIZE;
        attr.priority = LED_TASK_PRIO;
    
        /* Start the task. */
        if (osThreadNew((osThreadFunc_t)LedTask, NULL, &attr) == NULL) {
            printf("[LedExample] Failed to create LedTask!\n");
        }
    }
  4. Use a cyclic task in which the LED periodically turns on and off to implement LED blinking.

    static void *LedTask(const char *arg)
    {
        (void)arg;
        while (1) {
            switch (g_ledState) {
                case LED_ON:
                    IoTGpioSetOutputVal(LED_TEST_GPIO, 1);
                    usleep(LED_INTERVAL_TIME_US);
                    break;
                case LED_OFF:
                    IoTGpioSetOutputVal(LED_TEST_GPIO, 0);
                    usleep(LED_INTERVAL_TIME_US);
                    break;
                case LED_SPARK:
                    IoTGpioSetOutputVal(LED_TEST_GPIO, 0);
                    usleep(LED_INTERVAL_TIME_US);
                    IoTGpioSetOutputVal(LED_TEST_GPIO, 1);
                    usleep(LED_INTERVAL_TIME_US);
                    break;
                default:
                    usleep(LED_INTERVAL_TIME_US);
                    break;
            }
        }
        return NULL;
    }
  5. Call SYS_RUN() of OpenHarmony to start the service. (SYS_RUN is defined in the ohos_init.h file.)

    SYS_RUN(LedExampleEntry);
  6. Change the applications/sample/wifi-iot/app/BUILD.gn file to enable led_example.c to participate in compilation.

    import("//build/lite/config/component/lite_component.gni")
    lite_component("app") {
        features = [
            "iothardware:led_example"
        ]
    }

Verification

For details about the compilation and burning processes, see Building Source Code and Burning Images in the Getting Started with Hi3861.

After the preceding two steps are complete, press the RST button to reset the module. If the LED blinks periodically as expected, the verification is passed.

Figure 1 LED blinking

1
https://gitee.com/geyingzhen/docs.git
git@gitee.com:geyingzhen/docs.git
geyingzhen
docs
docs
master

搜索帮助