LiteOS GPIO操作

在源码工程中, 华为海思在hi_io.h头文件里已定义好表示每个IO口的宏定义,如:

typedef enum {HI_IO_NAME_GPIO_0,     /**< GPIO0 */HI_IO_NAME_GPIO_1,     /**< GPIO1 */HI_IO_NAME_GPIO_2,     /**< GPIO2 */...
}

并且在此头文件中,也定义好每个IO口功能的宏定义,如GPIO_03的功能:

typedef enum {HI_IO_FUNC_GPIO_3_GPIO,HI_IO_FUNC_GPIO_3_UART0_TXD,HI_IO_FUNC_GPIO_3_UART1_CTS_N,HI_IO_FUNC_GPIO_3_SPI1_CSN,HI_IO_FUNC_GPIO_3_JTAG_TDI,HI_IO_FUNC_GPIO_3_PWM5_OUT,HI_IO_FUNC_GPIO_3_I2C1_SDA,HI_IO_FUNC_GPIO_3_SSI_DATA,
} hi_io_func_gpio_3;

IO口的操作函数,海思则在hi_gpio.h中已声明,并已实现功能。常用的操作函数有:

    //初始化IO口hi_gpio_init();//设置LED的IO作为普通IO口功能(输入/输出)hi_io_set_func(HI_IO_NAME_GPIO_2, HI_IO_FUNC_GPIO_2_GPIO);//配置IO口的上拉,让IO口默认处于高电平hi_io_set_pull(HI_IO_NAME_GPIO_2, HI_IO_PULL_UP);//设置输入/输出功能hi_gpio_set_dir(HI_IO_NAME_GPIO_2, HI_GPIO_DIR_OUT); //输入hi_gpio_set_dir(HI_IO_NAME_GPIO_2, HI_GPIO_DIR_OUT); //输出//设置输出1高/0低电平    hi_gpio_set_ouput_val(HI_IO_NAME_GPIO_2, 1); //高电平hi_gpio_set_ouput_val(HI_IO_NAME_GPIO_2, 1); //低电平//获取IO口的电平int v;    hi_gpio_get_ouput_val(HI_IO_NAME_GPIO_2, &v); //获取IO口输出的电平hi_gpio_get_input_val(HI_IO_NAME_GPIO_2, &v); //获取IO口输入的电平

在鸿蒙系统里,为了提高代码的通用性,在iot_gpio.h中提供了一套基于芯片厂家的IO口操作函数上封装出来的IoTGpioxx套壳函数:

//申请使用GPIO
unsigned int IoTGpioInit(unsigned int id)标注使用一个IO口,id指定要申请使用的IO口。申请成功返回IOT_SUCCESS
申请失败返回IOT_FAILURE。每个IO口只能申请一次,确保一个IO口不会重复使用。//设置IO口输入或输出IoTGpioSetDir(HI_IO_NAME_GPIO_11, IOT_GPIO_DIR_IN);IoTGpioSetDir(HI_IO_NAME_GPIO_11, IOT_GPIO_DIR_OUT);//配置GPIO输出电平
IoTGpioGetOutputVal(HI_IO_NAME_GPIO_11, 1);//输出高电平//获取GPIO电平
int v;
IoTGpioGetInputVal(HI_IO_NAME_GPIO_11, &v);//获取输入电平

通过开发板上的按键控制LED的案例代码:

​#include <stdio.h>
#include <ohos_init.h> //必须包含此头文件,否则无法调试输出
#include <hi_io.h> //在此头文件中,厂家已定义好描述每个IO口功能的宏定义
#include <hi_gpio.h> //此头文件描述IO口的操作函数
#include <unistd.h> // 里面提供延时函数
#include <iot_gpio.h> //鸿蒙系统通用的GPIO操作函数
#include <iot_errno.h> // 提供IOT_SUCCESS宏定义//按键控制LED灯// KEY1 --> GPIO_11
// KEY2 --> GPIO_12
// LED  --> GPIO_02#define KEY_IO    HI_IO_NAME_GPIO_12
#define KEY_FUNC  HI_IO_FUNC_GPIO_12_GPIO
#define LED_IO    HI_IO_NAME_GPIO_2
#define LED_FUNC  HI_IO_FUNC_GPIO_2_GPIOvoid myhello_init() //自定义一个入口函数
{printf("myhello init\n");   if (IOT_SUCCESS != IoTGpioInit(KEY_IO)){printf("key1 io init failed\n");return;}hi_io_set_func(KEY_IO,KEY_FUNC);//配置IO口的上拉,让IO口默认处于高电平hi_io_set_pull(KEY_IO, HI_IO_PULL_UP);IoTGpioSetDir(KEY_IO, IOT_GPIO_DIR_IN);//LED灯IO口初始化IoTGpioInit(LED_IO);hi_io_set_func(LED_IO, LED_FUNC);IoTGpioSetDir(LED_IO, IOT_GPIO_DIR_OUT);//函数参数类型为指针变量时,则表示需要传变量的地址.int v, n = 0;while (1){IoTGpioGetInputVal(KEY_IO, &v);if (!v){//按键按下,LED灯状态翻转IoTGpioGetOutputVal(LED_IO, &v);//获取LED灯IO口的电平IoTGpioSetOutputVal(LED_IO, !v);//设置相反电平printf("key pressed %d\n", n++);//消抖, 循环直到松手为止while (1){IoTGpioGetInputVal(KEY_IO, &v);if (v)break;usleep(1000);}}usleep(100000);}
}//声明myhello_init为入口函数 
SYS_RUN(myhello_init); //在鸿蒙系统层自动执行入口函数
// APP_FEATURE_INIT(myhello_init); //在鸿蒙系统的应用层自动执行入口函数​

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/44433.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【论文速读】《面向深度学习的联合消息传递与自编码器》

这篇文章来自华为的渥太华无线先进系统能力中心和无线技术实验室&#xff0c;作者中有大名鼎鼎的童文。 一、自编码架构的全局收发机面临的主要问题 文章对我比较有启发的地方&#xff0c;是提到自编码架构的全局收发机面临的主要问题&#xff1a; 问题一&#xff1a;基于随…

洛杉矶裸机云大宽带服务器的特性和优势

洛杉矶裸机云大宽带服务器是结合了物理服务器性能和云服务灵活性的高性能计算服务&#xff0c;为用户提供高效、安全的计算和存储能力。在了解如何使用洛杉矶裸机云大宽带服务器之前&#xff0c;需要了解其基本特性和优势。以下是对洛杉矶裸机云大宽带服务器的具体分析&#xf…

使用lv虚拟卷扩展磁盘

使用centos演示。 首先创建centos虚拟机。链接&#xff1a;VMWARE安装Centos8,并且使用ssh连接虚拟机-CSDN博客 1. 增加磁盘。 选中要扩容的虚拟机&#xff0c;右键选择设置&#xff0c;然后点击磁盘&#xff0c;选择添加。 这里选择NVM的磁盘。选择这种磁盘是为了保持与之前…

有Daemon字眼的守护线程,和没有的差异是什么?怎么创建有daemon字眼的线程?

在编程中&#xff0c;尤其是在Java等支持多线程的编程语言中&#xff0c;守护线程&#xff08;Daemon Thread&#xff09;与普通线程&#xff08;Non-Daemon Thread&#xff09;之间存在一些关键差异。这些差异主要体现在它们对程序终止行为的影响上。 主要差异 程序终止行为…

SpringBoot新手快速入门系列教程:前述

我自己是一个SpringBoot新手&#xff0c;花了一天时间学了SpringBoot。大家不要惊讶&#xff0c;前提是我自己已经有了10几年的编程经验精通多门语言&#xff0c;并且在人间最强兵器Chat某T的AI助手帮助下&#xff0c;才能创造一天快速学会一个框架的神话。 当然中间遇到了很多…

笔试算法刷题

猿辅导2021校园招聘笔试&#xff08;算法一&#xff09; 牛客网 - 找工作神器|笔试题库|面试经验|实习招聘内推&#xff0c;求职就业一站解决_牛客网 (nowcoder.com) 第一眼看到这个题想到的是蓝桥杯飞机降落&#xff0c;贪心题。但是这样算的是最大不相交区间数量&#xff0…

Test-Time Adaptation via Conjugate Pseudo-labels--论文笔记

论文笔记 资料 1.代码地址 https://github.com/locuslab/tta_conjugate 2.论文地址 https://arxiv.org/abs/2207.09640 3.数据集地址 论文摘要的翻译 测试时间适应(TTA)指的是使神经网络适应分布变化&#xff0c;在测试时间仅访问来自新领域的未标记测试样本。以前的TT…

致远漏洞(登陆绕过+任意文件上传)

漏洞复现 1.获得cookie POST /seeyon/thirdpartyController.do HTTP/1.1 Host: 192.168.1.9 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:52.0) Gecko/20100101 Firefox/52.0 Accept: text/html,application/xhtmlxml,application/xml;q0.9,*/*;q0.8 Accept-Langua…

大数据面试题之ElasticSearch(1)

目录 ElasticSearch介绍 ElasticSearch架构 ElasticSearch深度分页 ElasticSearch调优手段有哪些 ElasticSearch脑裂了怎么办 ElasticSearch的倒排索引 ElasticSearch如何实现master选举 ElasticSearch的搜索过程说下 ElasticSearch如何在并发情况下保证读写一 Elast…

uni-app三部曲之一: Pinia使用

1.引言 最近在学习移动端的开发&#xff0c;使用uni-app前端应用框架&#xff0c;通过学习B站的视频以及找了一个开发模板&#xff0c;终于是有了一些心得体会。 B站视频1&#xff1a;Day1-01-uni-app小兔鲜儿导学视频_哔哩哔哩_bilibili B站视频2&#xff1a;01-课程和uni的…

简述设计模式-策略模式

概述 在策略模式中一个类的行为或者算法可以在运行时更改&#xff0c;这种类型的设计模式属于行为型模式。 在策略模式中定义了一系列的算法和策略&#xff0c;并将每个算法封装在独立的类中&#xff0c;使得他们能够互相替换&#xff0c;通过使用策略模式可以在运行时选择不…

java 实现Comparable接口和实现Comparator接口排序的区别

Comparable接口 作用&#xff1a; Comparable接口是在类的内部实现的&#xff0c;用于指定类的默认比较规则。当一个类实现了Comparable接口时&#xff0c;它必须实现compareTo方法&#xff0c;该方法用于定义对象之间的自然顺序。 实现方式&#xff1a; 实现Comparable接口的…

洛谷P10716【MX-X1-T4】「KDOI-05」简单的字符串问题(扩展kmp+set+二分+扫描线树状数组)

题目 思路来源 小羊肖恩 题解 羊神这个做法tql&#xff0c;当时只是机械地写&#xff0c;过了之后再想想&#xff0c;才觉得确实是nb 先扩展kmp&#xff08;Z函数&#xff09;预处理出来数组&#xff0c;记z[i]为i往后可以和前缀匹配的最大长度 对于每个询问(p,cnt)&#x…

隧道转发:保护你的数据传输安全

你曾经是否担心过你的数据安全&#xff1f;现代网络威胁不断增加&#xff0c;保护数据传输的安全性变得愈发重要。今天为大家介绍一种强大的网络传输技术——隧道转发&#xff08;Tunneling&#xff09;。这项技术不仅能有效保障数据安全&#xff0c;还能保护用户隐私&#xff…

centOS79中安装nginx12.15

##red## &#x1f534; 大家好&#xff0c;我是雄雄&#xff0c;欢迎关注微信公众号&#xff0c;雄雄的小课堂。 前言 装了这么多&#xff0c;发现Nginx是最简单的&#xff0c;一次性就搞定了。下面我们来看看如何安装 安装Nginx 安装gcc-c编译器 分开运行&#xff1a; yum…

anaconda安装pytorch

&#x1f4da;博客主页&#xff1a;knighthood2001 ✨公众号&#xff1a;认知up吧 &#xff08;目前正在带领大家一起提升认知&#xff0c;感兴趣可以来围观一下&#xff09; &#x1f383;知识星球&#xff1a;【认知up吧|成长|副业】介绍 ❤️如遇文章付费&#xff0c;可先看…

python爬虫入门(三)之HTML网页结构

一、什么是HTML 1、网页的三大技术要素&#xff1a; HTML定义网页的结构和信息&#xff08;骨架血肉&#xff09;CSS定义网页的样式&#xff08;衣服&#xff09;JavaScript定义用户和网页的交互逻辑&#xff08;动作&#xff09; 2、一个最简单的HTML&#xff1a;用<>…

Qt开发 | qss介绍及控件应用 | qss加载方式 | 控件提升 | 鼠标位置与控件位置 | 搜索编辑框 | tab在左文本水平的tabWidget

文章目录 一、qss简介与应用二、QLineEdit qss介绍与使用三、QPushButton qss1.常用qss1.1 基本样式表1.2 背景图片1.3 图片在左文字在右 2.点击按钮弹出菜单以及右侧箭头样式设置3.鼠标悬浮按钮弹出对话框 四、QCheckBox qss妙用&#xff1a;实时打开关闭状态按钮五、QComboBo…

丑数问题,力扣264,坑点

丑数问题&#xff0c;力扣264&#xff0c;坑点 力扣链接 给你一个整数 n &#xff0c;请你找出并返回第 n 个 丑数 。 丑数 就是质因子只包含 2、3 和 5 的正整数。 示例 1&#xff1a; 输入&#xff1a;n 10 输出&#xff1a;12 解释&#xff1a;[1, 2, 3, 4, 5, 6, 8, 9, …

Shell选择结构

文章目录 一、条件判断二、实例 一、条件判断 格式1&#xff1a;test 条件表达式 格式2&#xff1a;[条件表达式] 格式3&#xff1a;[[条件表达式]] -e 是否存在&#xff0c;不管是文件还是目录&#xff0c;只要存在&#xff0c;条件就成立。 -f 是否为普通文件 -d 是否为目录…