0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何操作GPIO去点灯

电子发烧友开源社区 来源:HarmonyOS官方合作社区 作者:HarmonyOS官方合作社 2022-03-02 17:45 次阅读

摘要:本文简单介绍如何操作GPIO去点灯

本文适用于正在研究Hi3861开发板,L0轻量系统驱动开发的小伙伴

1、点灯例程源码

先看最简单得LED灯闪烁操作,源码结构如下:

如何操作GPIO去点灯

第一个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 not use this file except in compliance with the License.# You may obtain a copy of the License at##   http://www.apache.org/licenses/LICENSE-2.0## Unless required by applicable law or agreed to in writing, software# distributed under the License is distributed on an "AS IS" BASIS,# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.# See the License for the specific language governing permissions and# limitations under the License.
import("//build/lite/config/component/lite_component.gni")
lite_component("app") {  features = [    "led_demo:led_demo",  ]}

向右滑动查看完整代码

led_demo.c内容:

#include #include "stdio.h"#include "ohos_init.h"#include "cmsis_os2.h"#include "iot_gpio.h"
#define LED_TEST_GPIO 9 // for hispark_pegasus
void *LedTask(const char *arg){  //初始化GPIO  IoTGpioInit(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灯一直在闪烁。

如何操作GPIO去点灯

2、驱动框架

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

如何操作GPIO去点灯

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

如何操作GPIO去点灯

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

如何操作GPIO去点灯

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

如何操作GPIO去点灯

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
    led
    +关注

    关注

    242

    文章

    23252

    浏览量

    660541
  • 驱动
    +关注

    关注

    12

    文章

    1838

    浏览量

    85261
  • 开发板
    +关注

    关注

    25

    文章

    5032

    浏览量

    97371

原文标题:OpenHarmony轻量系统开发【5】驱动之GPIO点灯

文章出处:【微信号:HarmonyOS_Community,微信公众号:电子发烧友开源社区】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    STM32 GPIO的基本结构

    万物皆有源头,大家学习单片机的源头操作就是通过GPIO点灯GPIO作为STM32最基础的外设,也是大家最先接触的外设。 当然,看似基础的GPIO
    发表于 04-14 10:38 1079次阅读
    STM32 <b class='flag-5'>GPIO</b>的基本结构

    基于STC8A8K64S4A12开发板的GPIO点灯实验

    最近空闲时间比较多,准备说说STC8A8K64S4A12开发板。 实验做起来——先从GPIO点灯开始。
    的头像 发表于 11-15 16:52 1317次阅读
    基于STC8A8K64S4A12开发板的<b class='flag-5'>GPIO</b><b class='flag-5'>点灯</b>实验

    GPIO点灯,灯不亮

    我用创龙核心板SYS/BIOS的GPIO_LED历程跑,发现点灯,灯不会亮。后来单步发现如下图的问题GPIOPinWrite找不到源函数,但是GPIOBankPinWrite
    发表于 03-31 10:57

    鸿蒙系统入门教程【有问题留言,连老师定期答疑!】

    /jishu_2001480_1_1.html7、GPIO操作接下来我们就可以操作GPIO点灯
    发表于 10-26 18:40

    怎样通过寄存器操作GPIOGPIO有哪些操作实例?

    GPIO是什么?怎样通过寄存器操作GPIOGPIO有哪些操作实例?
    发表于 06-28 07:34

    STM32的点灯操作是如何进行的

    ===================1.配置时钟2.设置GPIO复用3.电气属性4.配置io功能5.打开LED完整的汇编1,类比STM32的点灯操作是如何进行的???1,看原理图,了解所要
    发表于 01-12 07:36

    OpenHarmony轻量系统开发【5】驱动之GPIO点灯

    摘要:本文简单介绍如何操作GPIO点灯适合群体:适用于Hi3861开发板,L0轻量系统驱动开发5.1点灯例程源码先看最简单得LED灯闪烁
    发表于 01-21 14:34

    基于HAL库的GPIO点灯

    【三】零基础上手HAL库之—GPIO点灯3.1前言我们已经大致的了解了Cubemx软件界面的一般操作,懂得如何新建工程和使用步骤了,接下来我们正式进入使用Hal库开发的旅程,这是一个惊心动魄的时刻
    发表于 01-26 07:08

    请教大神GPIO-LED点灯实现的步骤有哪些

    LED库开发该怎样实现呢?请教大神GPIO-LED点灯实现的步骤有哪些?
    发表于 02-28 06:45

    GPIO模块之直接使用寄存器操作点灯资料推荐

    1、GPIO之直接使用寄存器操作点灯了解寄存器之后,我们再看一般的操作步骤。通过手册可以看到如下步骤清除 PWPR 的B0WI. 使能写PWPR的PFSWE。置位 PWPR的 PFSW
    发表于 07-11 11:19

    HarmonyOS Hi3861 GPIO操作 点灯和按键实验

    Hi3861也提供了相关得GPIO操作,先看最简单得LED灯闪烁操作。另外GPIO口还可以作为输入,然后使用中断,示例代码如下:这段示例代码用的开发板上面的user按键。
    发表于 10-21 17:12 77次下载
    HarmonyOS Hi3861 <b class='flag-5'>GPIO</b><b class='flag-5'>操作</b> <b class='flag-5'>点灯</b>和按键实验

    【三】零基础上手HAL库之—GPIO点灯

    【三】零基础上手HAL库之—GPIO点灯3.1前言我们已经大致的了解了Cubemx软件界面的一般操作,懂得如何新建工程和使用步骤了,接下来我们正式进入使用Hal库开发的旅程,这是一个惊心动魄的时刻
    发表于 12-02 14:06 9次下载
    【三】零基础上手HAL库之—<b class='flag-5'>GPIO</b><b class='flag-5'>点灯</b>

    基于stm32的GPIO点灯

    stm32点灯stm32_GPIOGPIO功能描述GPIO端口的每个位可以由软件分别配置成多种输入输出模式输入模式有:浮空输入 下拉输入 上拉输入 模拟输入输出模式有:开漏输出 推挽输出 复用开漏
    发表于 01-13 16:09 5次下载
    基于stm32的<b class='flag-5'>GPIO</b><b class='flag-5'>点灯</b>

    基于博流BL606P音视频开发板的GPIO点灯教程

    本文是关于开发者 swzswz 基于BL606P-DVK开发板实战开发的系列文章中的一篇,主要介绍了GPIO点灯,后面还会持续更新社区开发者的测评内容,敬请期待!
    的头像 发表于 07-17 10:54 702次阅读
    基于博流BL606P音视频开发板的<b class='flag-5'>GPIO</b><b class='flag-5'>点灯</b>教程

    SOC GPIO操作

    GPIO_INTERRUPT_LOW_ENABLE 0x2c 原文标题:SOC GPIO操作
    的头像 发表于 11-01 11:06 132次阅读