当前位置: 首页 > news >正文

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驱动配置(待续…)

坚持就有收获

在这里插入图片描述

相关文章:

  • 深入理解java虚拟机---自动内存管理
  • 一.重新回炉Spring Framework: 理解Spring IoC
  • Python第十九章(模块)
  • PyCharm 新建目录 (directory or folder)
  • JavaScript 设计模式之组合模式
  • ubuntu 22.04 图文安装
  • Java使用Redis实现分页功能
  • 微服务中4种应对跨库Join的思路
  • 如何选择最适合的图纸加密软件?用户体验及性价比
  • 同一台宿主机上虚拟机CPU资源分配方式介绍
  • 【Redis实战】有MQ为啥不用?用Redis作消息队列!?Redis作消息队列使用方法及底层原理高级进阶
  • 剑指offer面试题16 反转链表
  • 【栈】150. 逆波兰表达式求值
  • 面向对象编程入门:掌握C++类的基础(1/3)
  • MCU中断控制
  • [deviceone开发]-do_Webview的基本示例
  • 【391天】每日项目总结系列128(2018.03.03)
  • express如何解决request entity too large问题
  • Java Agent 学习笔记
  • JavaScript新鲜事·第5期
  • Vim Clutch | 面向脚踏板编程……
  • 将 Measurements 和 Units 应用到物理学
  • 聊聊sentinel的DegradeSlot
  • 排序算法学习笔记
  • 前端每日实战:70# 视频演示如何用纯 CSS 创作一只徘徊的果冻怪兽
  • 入口文件开始,分析Vue源码实现
  • 腾讯优测优分享 | 你是否体验过Android手机插入耳机后仍外放的尴尬?
  • 译自由幺半群
  • 阿里云IoT边缘计算助力企业零改造实现远程运维 ...
  • ​​​​​​​​​​​​​​Γ函数
  • ​linux启动进程的方式
  • (C++)八皇后问题
  • (delphi11最新学习资料) Object Pascal 学习笔记---第5章第5节(delphi中的指针)
  • (二)斐波那契Fabonacci函数
  • (翻译)terry crowley: 写给程序员
  • (附源码)springboot美食分享系统 毕业设计 612231
  • (附源码)ssm航空客运订票系统 毕业设计 141612
  • (附源码)小程序 交通违法举报系统 毕业设计 242045
  • (七)Java对象在Hibernate持久化层的状态
  • (三)Pytorch快速搭建卷积神经网络模型实现手写数字识别(代码+详细注解)
  • (十七)devops持续集成开发——使用jenkins流水线pipeline方式发布一个微服务项目
  • (学习日记)2024.03.25:UCOSIII第二十二节:系统启动流程详解
  • (转)C语言家族扩展收藏 (转)C语言家族扩展
  • (转)母版页和相对路径
  • (转载)Google Chrome调试JS
  • .“空心村”成因分析及解决对策122344
  • .gitignore文件_Git:.gitignore
  • .net 4.0发布后不能正常显示图片问题
  • .NET Micro Framework初体验
  • .NET/C# 在 64 位进程中读取 32 位进程重定向后的注册表
  • .net2005怎么读string形的xml,不是xml文件。
  • .NET中的十进制浮点类型,徐汇区网站设计
  • /bin、/sbin、/usr/bin、/usr/sbin
  • [Assignment] C++1
  • [Avalon] Avalon中的Conditional Formatting.