如何操作GPIO去点灯

摘要:本文简单介绍如何操作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 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_pegasusvoid *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灯一直在闪烁。
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官方合作社区】欢迎添加关注!文章转载请注明出处。


特斯拉与松下或继续合作,电池输出要提高至54 GWh
博格华纳混动变速箱技术:致力于引领下一个混动春天
《助力5G时代IPTV产业百亿增量营销市场的发展》的演讲
如何使用单个晶体管制作音频混音器
后互联网手机时代,谁动了小米的奶酪?
如何操作GPIO去点灯
在使用中蓄电池温度是被动地受到环境温度的影响
环形变压器有哪几种安装方式
网络爬虫的作用是什么
纽约时报正在通过利用AR技术带领读者走近自由女神像
物联网的发展哪些是必需品
振奋“全国第一村” 爱国者全国最大品牌旗舰店国庆开张
电力行业的智能化:电力巡检无人机市场潜力不断爆发
受累电池门”事件 苹果或大幅削减iPhone X订单
苹果新款Mac Studio有望今年下半年推出
GTC23 | Shutterstock 与 NVIDIA 合作,为生成式的 3D 艺术家工具构建 AI 基础
5G手机销量不温不火的原因是什么?何时迎来井喷式增长
当连接器出现故障时,应该怎么排除
小米MIUI到底好在哪里?miui8对比iOS10.2孰强孰弱?
激光盘煤仪在火电厂、码头、矿山等各类散料堆场的应用