当前位置:   article > 正文

鸿蒙OpenHarmony【LED外设控制】 (基于Hi3861开发板)

鸿蒙OpenHarmony【LED外设控制】 (基于Hi3861开发板)

概述

OpenHarmony WLAN模组基于Hi3861平台提供了丰富的外设操作能力,包含I2C、I2S、ADC、UART、SPI、SDIO、GPIO、PWM、FLASH等。本文介绍如何通过调用OpenHarmony的NDK接口,实现对GPIO控制,达到LED闪烁的效果。其他的IOT外设控制,开发者可根据API指导文档完成,此处不逐一介绍。

开发

  1. 请先完成轻量系统快速入门

    LED控制参考示例存放于applications/sample/wifi-iot/app/iothardware/led\_example.c文件中。

  2. 实现IOT外设控制,首先需要通过查阅原理图明确接线关系。经过查阅,hispark pegasus的LED与芯片的9号管脚相连。

鸿蒙开发指导文档:gitee.com/li-shizhen-skin/harmony-os/blob/master/README.md点击或者复制转到。

搜狗高速浏览器截图20240326151547.png

define LED_TEST_GPIO 9

  说明:  开发板原理图,请开发者联系Hi3861购买渠道客服获取。
  1. 使用GPIO前,需要完成GPIO管脚初始化,明确管脚用途,并创建任务,使LED周期性亮灭,达到闪烁的效果。

    1. static void LedExampleEntry(void)
    2. {
    3. osThreadAttr_t attr;
    4. /* 管脚初始化 */
    5. IoTGpioInit(LED_TEST_GPIO);
    6. /* 配置9号管脚为输出方向 */
    7. IoTGpioSetDir(LED_TEST_GPIO, IOT_GPIO_DIR_OUT);
    8. attr.name = "LedTask";
    9. attr.attr_bits = 0U;
    10. attr.cb_mem = NULL;
    11. attr.cb_size = 0U;
    12. attr.stack_mem = NULL;
    13. attr.stack_size = LED_TASK_STACK_SIZE;
    14. attr.priority = LED_TASK_PRIO;
    15. /* 启动任务 */
    16. if (osThreadNew((osThreadFunc_t)LedTask, NULL, &attr) == NULL) {
    17. printf("[LedExample] Failed to create LedTask!\n");
    18. }
    19. }

  2. 在循环任务中通过周期性亮灭形式实现LED闪烁。

    1. static void *LedTask(const char *arg)
    2. {
    3. (void)arg;
    4. while (1) {
    5. switch (g_ledState) {
    6. case LED_ON:
    7. IoTGpioSetOutputVal(LED_TEST_GPIO, 1);
    8. usleep(LED_INTERVAL_TIME_US);
    9. break;
    10. case LED_OFF:
    11. IoTGpioSetOutputVal(LED_TEST_GPIO, 0);
    12. usleep(LED_INTERVAL_TIME_US);
    13. break;
    14. case LED_SPARK:
    15. IoTGpioSetOutputVal(LED_TEST_GPIO, 0);
    16. usleep(LED_INTERVAL_TIME_US);
    17. IoTGpioSetOutputVal(LED_TEST_GPIO, 1);
    18. usleep(LED_INTERVAL_TIME_US);
    19. break;
    20. default:
    21. usleep(LED_INTERVAL_TIME_US);
    22. break;
    23. }
    24. }
    25. }

  3. 在代码最下方,使用OpenHarmony启动恢复模块接口SYS\_RUN()启动业务。(SYS\_RUN定义在ohos\_init.h文件中)

    SYS_RUN(LedExampleEntry);

  4. 修改applications/sample/wifi-iot/app/BUILD.gn文件,使led\_example.c参与编译。

    1. import("//build/lite/config/component/lite_component.gni")
    2. lite_component("app") {
    3. features = [
    4. "iothardware:led_example"
    5. ]
    6. }

验证

编译过程请参考轻量系统快速入门的编译章节,烧录过程请参考轻量系统快速入门的烧录章节

完成以上两步后,按下RST键复位模组,可发现LED在周期性闪烁,与预期相符,验证完毕。

图 1 LED闪烁图

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/480260
推荐阅读
  

闽ICP备14008679号