概述
OpenHarmony WLAN模组基于Hi3861平台提供了丰富的外设操作能力,包含I2C、I2S、ADC、UART、SPI、SDIO、GPIO、PWM、FLASH等。本文介绍如何通过调用OpenHarmony的NDK接口,实现对GPIO控制,达到LED闪烁的效果。其他的IOT外设控制,开发者可根据API指导文档完成,此处不逐一介绍。
开发- 请先完成《Hi3861快速入门》。LED控制参考示例存放于applications/sample/wifi-iot/app/iothardware/led_example.c文件中。
- 实现IOT外设控制,首先需要通过查阅原理图明确接线关系。经过查阅,hispark pegasus的LED与芯片的9号管脚相连。
- 使用GPIO前,需要完成GPIO管脚初始化,明确管脚用途,并创建任务,使LED周期性亮灭,达到闪烁的效果。
- #define LED_TEST_GPIO 9
- static void LedExampleEntry(void)
- {
- osThreadAttr_t attr;
- /* 管脚初始化 */
- IoTGpioInit(LED_TEST_GPIO);
- /* 配置9号管脚为输出方向 */
- 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;
- /* 启动任务 */
- if (osThreadNew((osThreadFunc_t)LedTask, NULL, &attr) == NULL) {
- printf("[LedExample] Failed to create LedTask!
- ");
- }
- }
复制代码 4.在循环任务中通过周期性亮灭形式实现LED闪烁。
- 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;
- }
- SYS_RUN(LedExampleEntry);
- import("//build/lite/config/component/lite_component.gni")
- lite_component("app") {
- features = [
- "iothardware:led_example"
- ]
- }
复制代码 5.在代码最下方,使用OpenHarmony启动恢复模块接口SYS_RUN()启动业务。(SYS_RUN定义在ohos_init.h文件中)
- SYS_RUN(LedExampleEntry);
复制代码 6.修改applications/sample/wifi-iot/app/BUILD.gn文件,使led_example.c参与编译。
- import("//build/lite/config/component/lite_component.gni")
- lite_component("app") {
- features = [
- "iothardware:led_example"
- ]
- }
复制代码
验证
编译过程请参考《Hi3861快速入门-源码编译》,烧录过程请参考《Hi3861快速入门-镜像烧录》。
完成以上两步后,按下RST键复位模组,可发现LED在周期性闪烁,与预期相符,验证完毕。
图 1 LED闪烁图