HCIA-HarmonyOS设备开发认证V2.0-IOT硬件子系统-GPIO

在这里插入图片描述

目录

  • 一、GPIO 概述
  • 二、GPIO模块相关API
  • 三、实例
  • 四、GPIO HDF驱动开发
    • 4.1、LED驱动程序(待续...)
    • 4.2、LED驱动配置(待续...)
  • 坚持就有收获

轻量系统设备通常需要进行外设控制,例如温湿度数据的采集、灯开关的控制,因此在完成内核开发后,需要进行设备驱动的开发。

主要Hi3861芯片介绍如何运用 IoT 硬件子系统进行轻量系统设备的驱动开发。

在轻量系统的联接模组中,智能家居远程控制能力的实现,最终是通过 IoT 硬件子系统部件发送指令到特定的家居设备。

Hi3861芯片提供设备操作接口有:GPIO、PWM、UART、I2C、SPI、ADC、WATCHDOG、FLASH、LOWPOWER、RESET 等。

一、GPIO 概述

GPIO(General-purpose input/output)即通用型输入输出,用于控制芯片引脚的数字输入和数字输出。通常,GPIO 控制器通过分组的方式管理所有 GPIO 管脚,每组 GPIO 有一个或多个寄存器与之关联,通过读写寄存器完成对 GPIO 管脚的操作。

GPIO 是芯片上一根能完成多种功能的管脚,用户可以通过 GPIO 口和硬件进行数据交互(如UART),控制硬件工作(如 LED,蜂鸣器等),读取硬件的工作状态信号(如中断信号)等。

例如 GPIO_00 引脚复用表如下:(剩余引脚复用信息,请查看厂商芯片手册)。

管脚管脚名称类型驱动(mA)电压(V)描述
复用信号0:GPIO_00
复用信号1:UART1_TXD
复用信号2:SPI1_CLK
2GPIO_00I/O13.3/1.8复用信号3:PWM3_OUT
复用信号4:I2C_SDA
复用信号5:RTC_OSC_32K
复用信号6:RTC32K_XOUT
复用信号7:保留

GPIO 接口定义了操作 GPIO 管脚的标准方法集合,包括:

  • 设置管脚方向:方向可以是输入或者输出(暂不支持高阻态)
  • 读写管脚电平值:电平值可以是低电平或高电平
  • 设置管脚中断服务函数:设置一个管脚的中断响应函数,以及中断触发方式
  • 使能和禁止管脚中断:禁止或使能管脚中断

GPIO 引脚复用流程如下:

请添加图片描述

二、GPIO模块相关API

头文件路径:base/iothardware/peripheral/interfaces/inner_api/iot_gpio.h

接口函数描述
unsigned int IoTGpioInit(unsigned int id)确定GPIO管脚号
unsigned int IoTGpioSetDir(unsigned int id, IotGpioDir dir)设置管脚方向
unsigned int IoTGpioSetOutputVal(unsigned int id, IotGpioValue val)设置管脚电平
unsigned int IoTGpioRegisterIsrFunc(unsigned int id, IotGpioIntType intType, IotGpioIntPolarity intPolarity, GpioIsrCallbackFunc func, char *arg)设置管脚中断

三、实例

//代码功能:定义 GPIO_00 号口为输出模式且输出高电平。
#include "iot_gpio.h"
IoTGpioInit(GPIO_00);
IoTGpioSetDir(GPIO_00 , IOT_GPIO_DIR_OUT);
IoTGpioSetOutputVal(GPIO_00 , IOT_GPIO_VALUE0);
while (1) {IoTGpioSetOutputVal(LED_GPIO, IOT_GPIO_VALUE1);sleep(1);IoTGpioSetOutputVal(LED_GPIO, IOT_GPIO_VALUE0);sleep(1);
}

四、GPIO HDF驱动开发

在HDF框架中,同类型设备对象较多时(可能同时存在十几个同类型配置器),若采用独立服务模式,则需要配置更多的设备节点,且相关服务会占据更多的内存资源。相反,采用统一服务模式可以使用一个设备服务作为管理器,统一处理所有同类型对象的外部访问(这会在配置文件中有所体现),实现便捷管理和节约资源的目的。GPIO模块采用统一服务模式(如图1所示)。

在统一模式下,所有的控制器都被核心层统一管理,并由核心层统一发布一个服务供接口层,因此这种模式下驱动无需再为每个控制器发布服务。

GPIO模块各分层作用:

接口层:提供操作GPIO管脚的标准方法。

核心层:提供GPIO管脚资源匹配,GPIO管脚控制器的添加、移除以及管理的能力,通过钩子函数与适配层交互,供芯片厂家快速接入HDF框架。

适配层:由驱动适配者将钩子函数的功能实例化,实现与硬件相关的具体功能。

请添加图片描述

4.1、LED驱动程序(待续…)

4.2、LED驱动配置(待续…)

坚持就有收获

在这里插入图片描述

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

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

相关文章

SpringBootWeb学习笔记——12万字详细总结!

0. 写在前面 注:这套笔记是根据黑马程序员B站2023-3-21的视频学习的成果,其中省略了前端基础部分、Maven部分和数据库基础部分,详情可见目录。 注注:目前文章内结尾处多幅图片加载不出来,因为图片还存在本地没被传上来,过段时间再改~ 所有的Spring项目都基于Spring Fra…

升级到PHP8.X的原因和方法

上周有一个使用Hostease美国主机服务器多年的客户,反馈需要升级到PHP8.x,原因是站点程序已升级,并希望站点运行在更高也稳定的PHP8.x上。在升级PHP8.x的过程中,联系我们并反馈在升级过程中遇到了问题,需求解决方案。 升…

雷池社区版WAF:开源护网,共筑网络安全长城

雷池社区版WAF(Web Application Firewall)是一款开源的网络应用防火墙,旨在为网站和网络应用提供安全防护,以抵御各种网络攻击,如SQL注入、跨站脚本攻击(XSS)、文件包含、以及其他常见的安全威胁…

Linux 常用命令100+

Linux 运维/开发/测试 常用命令100 线上查询及帮助命令(2个) 命令功能说明示例man 命令查看普通命令帮助,命令的词典,更复杂的还有info,但不常用。rootbrLinux ~]#man lshelp 命令查看Linux内置命令的帮助,比如cd命令。[rootbrL…

comsol燃料电池+锂离子电池

电化学仿真技术通过对电池微观行为进行研究,明晰电池内部多现象机理,并将其数值化,通过数值法实现对物理特征联合计算,建立完整的电池模型。COMSOL Multiphysics 具有强大的多物理场全耦合仿真分析功能、高效的计算性能&#xff0…

低代码中的工作流:简化开发流程,提升效率

低代码开发平台近年来在软件开发领域引起了广泛的关注和应用。它以提高开发效率、降低开发成本为目标,通过简化开发过程,使非专业开发者也能快速构建高品质的应用程序。其中,工作流引擎作为低代码开发平台的重要组成部分,对于提升…

文件上传漏洞--Upload-labs--Pass17--条件竞争

一、条件竞争原理(结合代码审计) 1、首先进行代码审计,查看源代码。 我们可知,将文件上传至服务器后,不会被立即删除,而是做短暂的停留,中间会有一小部分时间差,这部分时间差是代码…

华为OD机试真题C卷-篇4

200分值题 员工派遣快递员的烦恼符号运算伐木工反射计数分披萨推荐多样性贪心的歌手螺旋数组矩阵(100) 员工派遣 nums [int(x) for x in input().split(" ")] x nums[0] y nums[1] count_x nums[2] count_y nums[3] left 1 right pow(10, 9) while (True) :if…

vue 实现docx文件在线预览

预览请求步骤: 准备一个需要预览的文件地址【如:https://usdoc.cn/vw/文件模板.docx】GET 参数到请求地址将拼接好的地址放在浏览器中,开始预览 请求地址:https://vw.usdoc.cn/ 请求方式:GET 请求参数: 字段名称字段类型必填参数…

2024年单服务器部署Mongodb三节点副本集自动化部署脚本

该脚本是为了方便自己学习和工作中部署服务器从而节省时间进行编写,目前能正常部署,创建集群,管理员用户,以及连接都没问题,但是没有开启验证,后续找时间补充。 完整的教程请参考一下我写的技术文章。 20…

渲染效果图有哪几种分类?效果图为什么用云渲染更快

云渲染利用了集群化的云端服务器资源,通过并行计算充分发挥了高性能硬件的优势,显著提升了渲染的速度。这一技术特别适用于处理规模庞大或细节丰富的渲染任务,在缩短项目完成时间方面表现卓越。无论是用于为建筑提供精确的可视化效果图&#…

【Python Scrapy】分布式爬虫利器

在当今信息爆炸的时代,获取大规模数据对于许多应用至关重要。而分布式爬虫作为一种强大的工具,在处理大量数据采集和高效爬取方面展现了卓越的能力。 本文将深入探讨分布式爬虫的实际应用场景,通过代码示例演示其在提升爬取效率、保障系统稳定…

牛刀小试 - C++ 学生信息管理系统

参考文档: C实现:学生管理系统(详细解析) 关于switch中的default里面的break是否可以省略这件事 需求要求: (1)增加记录 (2)查找记录 (3)删除…

FFmpeg进阶-给视频添加马赛克效果

很多时候为了隐藏视频中的敏感信息如人脸、身份证号、车牌号等,我们会采用马赛克算法对视频帧中的一部分内容进行处理。这里介绍一下如何采用FFmpeg实现马赛克效果。 马赛克效果算法的原理如下: 1.分块处理:首先将图像划分为多个小块或区域 2.像素替换:对于每个小块,算法会将…

【Windows11】内存使用率只有总内存容量的一半

硬件配置:2根16G的内存条(金百达DDR4 3600, 海力士颗粒,灯条刃),插在2和4通道上 系统配置:windows11 问题描述,我和这位网友的问题一模一样: 系统32G内存,开机完全识别&…

实习日志17

1.测试公司服务器 1.1.太卡了,点一下卡半天 上传项目源码和文件: 将活字格项目源码和所有相关文件上传到服务器的指定目录。可以使用向日葵远程控制或者版本控制系统来进行文件上传。 重新配置活字格项目: 根据服务器环境,需要对…

Java 学习和实践笔记(14):用表格来理解类、对象、属性以及动作(方法)很容易

OOP :面向对象编程,object oriented programming. 用表格就可以很好地理解类、对象、属性、以及动作这些概念。 一个表(结构)就对应一个类(结构)。所以凡叫什么类,自己就在心里把它叫什么表。反过来&…

vue 非父子通信-event bus 事件总线

1.作用 非父子组件之间,进行简易消息传递。(复杂场景→ Vuex) 2.步骤 创建一个都能访问的事件总线 (空Vue实例) import Vue from vue const Bus new Vue() export default Bus A组件(接受方),监听Bus的…

【图与网络数学模型】3.Ford-Fulkerson算法求解网络最大流问题

【图与网络数学模型】3.Ford-Fulkerson算法求解网络最大流问题 一、网络流模型1. 概述2. 可行流3. 增广链 二、示例1. 最大流问题2. Alternate Formulation:最小截量问题 三、Ford-Fulkerson 算法1. 导入库2. 初始化残差图3. 定义查找增广路径4. 定义循环5. 程序运行…

ubuntu22.04@Jetson Orin Nano之OpenCV安装

ubuntu22.04Jetson Orin Nano之OpenCV安装 1. 源由2. 分析3. 证实3.1 jtop安装3.2 jtop指令3.3 GPU支持情况 4. 安装OpenCV4.1 修改内容4.2 Python2环境【不需要】4.3 ubuntu22.04环境4.4 国内/本地环境问题4.5 cudnn版本问题 5. 总结6. 参考资料 1. 源由 昨天用Jetson跑demo程…