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

目录

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

主要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
2 GPIO_00 I/O 1 3.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) 设置管脚中断

三、实例

c 复制代码
//代码功能:定义 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驱动配置(待续...)

坚持就有收获

相关推荐
TDengine (老段)4 小时前
TDengine 中的关联查询
大数据·javascript·网络·物联网·时序数据库·tdengine·iotdb
古希腊掌握嵌入式的神10 小时前
[物联网iot]对比WIFI、MQTT、TCP、UDP通信协议
网络·物联网·网络协议·tcp/ip·udp
别说我什么都不会12 小时前
ohos.net.http请求HttpResponse header中set-ccokie值被转成array类型
网络协议·harmonyos
码是生活13 小时前
鸿蒙开发排坑:解决 resourceManager.getRawFileContent() 获取文件内容为空问题
前端·harmonyos
鸿蒙场景化示例代码技术工程师13 小时前
基于Canvas实现选座功能鸿蒙示例代码
华为·harmonyos
小脑斧爱吃鱼鱼14 小时前
鸿蒙项目笔记(1)
笔记·学习·harmonyos
Debroon14 小时前
应华为 AI 医疗军团之战,各方动态和反应
人工智能·华为
鸿蒙布道师14 小时前
鸿蒙NEXT开发对象工具类(TS)
android·ios·华为·harmonyos·arkts·鸿蒙系统·huawei
zhang10620915 小时前
HarmonyOS 基础组件和基础布局的介绍
harmonyos·基础组件·基础布局
桃子酱紫君15 小时前
华为配置篇-BGP实验
开发语言·华为·php