摘要:本文简单介绍如何操作GPIO去点灯
本文适用于正在研究Hi3861开发板,L0轻量系统驱动开发的小伙伴1、点灯例程源码
先看最简单得LED灯闪烁操作,源码结构如下:

第一个BUILD.gn文件内容:
static_library("led_demo") {sources = ["led_demo.c"]include_dirs = ["//utils/native/lite/include","//kernel/liteos_m/components/cmsis/2.0","//base/iot_hardware/peripheral/interfaces/kits",]}
向右滑动查看完整代码
第二个BUILD.gn内容:
# Copyright (c) 2020 Huawei Device Co., Ltd.# Licensed under the Apache License, Version 2.0 (the "License");# You may obtain a copy of the License at### Unless required by applicable law or agreed to in writing, software# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.# See the License for the specific language governing permissions andimport("//build/lite/config/component/lite_component.gni")lite_component("app") {features = ["led_demo:led_demo",]}
向右滑动查看完整代码
led_demo.c内容:
void *LedTask(const char *arg){//初始化GPIOIoTGpioInit(LED_TEST_GPIO);//设置为输出IoTGpioSetDir(LED_TEST_GPIO, IOT_GPIO_DIR_OUT);(void)arg;while (1){//输出低电平IoTGpioSetDir(LED_TEST_GPIO, 0);usleep(300000);//输出高电平IoTGpioSetDir(LED_TEST_GPIO, 1);usleep(300000);}return NULL;}void led_demo(void){osThreadAttr_t attr;attr.name = "LedTask";attr.attr_bits = 0U;attr.cb_mem = NULL;attr.cb_size = 0U;attr.stack_mem = NULL;attr.stack_size = 512;attr.priority = 26;if (osThreadNew((osThreadFunc_t)LedTask, NULL, &attr) == NULL) {printf("[LedExample] Falied to create LedTask! ");}}SYS_RUN(led_demo);
向右滑动查看完整代码
编译后烧录进去,应该可以看到复位按键旁边的LED灯一直在闪烁。

2、驱动框架
OpenHarmony为轻量系统提供了一套简单的驱动封装接口,函数的定义相关头文件位于“baseiot_hardwareperipheralinterfaceskits”

这里只有头文件,具体的函数实现,需要在对应的soc中,具体路径定义由deviceoardhisiliconhispark_pegasusliteos_mconfig.gni 文件中定义:

所以我们可以知道,具体的路径就是“devicesochisiliconhi3861v100hi3861_adapterhalsiot_hardwarewifiiot_lite”,相关文件如下:

这里是代码实现,具体是将hi3861相关的驱动接口封装成鸿蒙的驱动接口。所以我们可以总结如下:

3、GPIO相关接口函数
(1)相关枚举:
/*** @brief 枚举 GPIO 电平值。*/类型定义枚举 {/** 低 GPIO 电平 */IOT_GPIO_VALUE0 = 0,/** 高 GPIO 电平 */IOT_GPIO_VALUE1} IotGpioValue;/*** @brief 枚举 GPIO 方向。*/类型定义枚举 {/** 输入 */IOT_GPIO_DIR_IN = 0,/** 输出 */IOT_GPIO_DIR_OUT} IotGpioDir;/*** @brief 枚举 GPIO 中断触发模式。*/类型定义枚举 {/** 电平敏感中断 */IOT_INT_TYPE_LEVEL = 0,/** 边缘敏感中断 */IOT_INT_TYPE_EDGE} IotGpioIntType;/*** @brief 枚举 I/O 中断极性。*/类型定义枚举 {/** 低电平或下降沿中断 */IOT_GPIO_EDGE_FALL_LEVEL_LOW = 0,/** 高电平或上升沿中断 */IOT_GPIO_EDGE_RISE_LEVEL_HIGH} IotGpioIntPolarity;
向右滑动查看完整代码
(2)普通GPIO相关API
/*** @brief 表示 GPIO 中断回调。**/typedef void (*GpioIsrCallbackFunc) (char *arg);/*** @brief 初始化一个 GPIO 设备。** @param id 表示 GPIO 引脚号。* @return 如果 GPIO 设备已初始化,则返回 {@link IOT_SUCCESS};* 否则返回 {@link IOT_FAILURE}。其他返回值详见芯片说明。* @从 2.2 开始* @2.2 版*/unsigned int IoTGpioInit(unsigned int id);/*** @brief 取消初始化 GPIO 设备。** @param id 表示 GPIO 引脚号。* @return 如果 GPIO 设备被取消初始化,则返回 {@link IOT_SUCCESS};* 否则返回 {@link IOT_FAILURE}。其他返回值详见芯片说明。* @从 2.2 开始* @2.2 版*/unsigned int IoTGpioDeinit(unsigned int id);/*** @brief 设置 GPIO 引脚的方向。** @param id 表示 GPIO 引脚号。* @param dir 指示 GPIO 输入/输出方向。* @return 如果设置了方向,则返回 {@link IOT_SUCCESS};* 否则返回 {@link IOT_FAILURE}。其他返回值详见芯片说明。* @从 2.2 开始* @2.2 版*/unsigned int IoTGpioSetDir(unsigned int id, IotGpioDir dir);/*** @brief 获取 GPIO 引脚的方向。** @param id 表示 GPIO 引脚号。* @param dir 指示指向 GPIO 输入/输出方向的指针。* @return 如果获取到方向,则返回 {@link IOT_SUCCESS};* 否则返回 {@link IOT_FAILURE}。其他返回值详见芯片说明。* @从 2.2 开始* @2.2 版*/unsigned int IoTGpioGetDir(unsigned int id, IotGpioDir *dir);/*** @brief 设置 GPIO 引脚的输出电平值。** @param id 表示 GPIO 引脚号。* @param val 表示输出电平值。* @return 如果设置了输出级别值,则返回 {@link IOT_SUCCESS};* 否则返回 {@link IOT_FAILURE}。其他返回值详见芯片说明。* @从 2.2 开始* @2.2 版*/unsigned int IoTGpioSetOutputVal(unsigned int id,IotGpioValue val);/*** @brief 获取 GPIO 引脚的输出电平值。** @param id 表示 GPIO 引脚号。* @param val 表示指向输出电平值的指针。* @return 如果获得输出电平值,则返回 {@link IOT_SUCCESS};* 否则返回 {@link IOT_FAILURE}。其他返回值详见芯片说明。* @从 2.2 开始* @2.2 版*/unsigned int IoTGpioGetOutputVal(unsigned int id, IotGpioValue *val);/*** @brief 获取 GPIO 引脚的输入电平值。** @param id 表示 GPIO 引脚号。* @param val 表示指向输入电平值的指针。* @return 如果获得输入电平值,则返回 {@link IOT_SUCCESS};* 否则返回 {@link IOT_FAILURE}。其他返回值详见芯片说明。* @从 2.2 开始* @2.2 版*/unsigned int IoTGpioGetInputVal(unsigned int id, IotGpioValue *val);
向右滑动查看完整代码
(3)按键中断相关API
/*** @brief 启用 GPIO 引脚的中断功能。** 该函数可用于设置GPIO引脚的中断类型、中断极性和中断回调。** @param id 表示 GPIO 引脚号。* @param intType 表示中断类型。* @param intPolarity 指示中断极性。* @param func 表示中断回调函数。* @param arg 表示指向中断回调函数中使用的参数的指针。* @return 如果启用中断功能,则返回 {@link IOT_SUCCESS};* 否则返回 {@link IOT_FAILURE}。其他返回值详见芯片说明。* @从 2.2 开始* @2.2 版*/unsigned int IoTGpioRegisterIsrFunc(unsigned int id,IotGpioIntType intType,IotGpioIntPolarity intPolarity,GpioIsrCallbackFunc fun,char *arg);/*** @brief 禁用 GPIO 引脚的中断功能。** @param id 表示 GPIO 引脚号。* @return 如果中断功能被禁用,则返回 {@link IOT_SUCCESS};* 否则返回 {@link IOT_FAILURE}。其他返回值详见芯片说明。* @从 2.2 开始* @2.2 版*/unsigned int IoTGpioUnregisterIsrFunc(unsigned int id);/*** @brief 屏蔽 GPIO 引脚的中断功能。** @param id 表示 GPIO 引脚号。* @param mask 表示中断函数是否被屏蔽。* 值1表示屏蔽中断功能,0表示不屏蔽中断功能。* @return 如果中断功能被屏蔽,则返回 {@link IOT_SUCCESS};* 否则返回 {@link IOT_FAILURE}。其他返回值详见芯片说明。* @从 2.2 开始* @2.2 版*/unsigned int IoTGpioSetIsrMask(unsigned int id, unsigned char mask);/*** @brief 设置 GPIO 引脚的中断触发模式。** 此函数根据中断类型和中断极性配置 GPIO 引脚。** @param id 表示 GPIO 引脚号。* @param intType 表示中断类型。* @param intPolarity 指示中断极性。* @return 如果设置了中断触发模式,则返回 {@link IOT_SUCCESS};* 否则返回 {@link IOT_FAILURE}。其他返回值详见芯片说明。* @从 2.2 开始* @2.2 版*/unsigned int IoTGpioSetIsrMode(unsigned int id, IotGpioIntType intType, IotGpioIntPolarity intPolarity);
向右滑动查看完整代码
原文标题:OpenHarmony轻量系统开发【5】驱动之GPIO点灯
文章出处:【微信公众号:HarmonyOS官方合作社区】欢迎添加关注!文章转载请注明出处。
审核编辑:汤梓红
-
led
+关注
关注
243文章
24433浏览量
687275 -
驱动
+关注
关注
12文章
1927浏览量
88184 -
开发板
+关注
关注
25文章
6122浏览量
113157
原文标题:OpenHarmony轻量系统开发【5】驱动之GPIO点灯
文章出处:【微信号:HarmonyOS_Community,微信公众号:电子发烧友开源社区】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
STM32 GPIO的基本结构
GPIO点灯,灯不亮
STM32的点灯操作是如何进行的
OpenHarmony轻量系统开发【5】驱动之GPIO点灯
基于HAL库的GPIO点灯
GPIO模块之直接使用寄存器操作点灯资料推荐
HarmonyOS Hi3861 GPIO操作 点灯和按键实验
【三】零基础上手HAL库之—GPIO点灯
基于stm32的GPIO点灯
基于博流BL606P音视频开发板的GPIO点灯教程

如何操作GPIO去点灯
评论