OpenHarmony轻量系统开发【5】驱动之GPIO点灯

5.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 <unistd.h>
#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)
{//初始化GPIOIoTGpioInit(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!\n");}}

编译后烧录进去,应该可以看到复位按键旁边的LED灯一直在闪烁。

5.2 驱动框架

OpenHarmony为轻量系统提供了一套简单的驱动封装接口,函数的定义相关头文件位于“base\iot_hardware\peripheral\interfaces\kits”

这里只有头文件,具体的函数实现,需要在对应的soc中,具体路径定义由

device\board\hisilicon\hispark_pegasus\liteos_m\config.gni 文件中定义:

所以我们可以知道,具体的路径就是

“device\soc\hisilicon\hi3861v100\hi3861_adapter\hals\iot_hardware\wifiiot_lite”

相关文件如下:

这里是代码实现,具体是将hi3861相关的驱动接口封装成鸿蒙的驱动接口。

所以我们可以总结如下:

5.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 表示中断函数是否被屏蔽。* 值<b>1</b>表示屏蔽中断功能,<b>0</b>表示不屏蔽中断功能。* @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);

为了能让大家更好的学习鸿蒙(HarmonyOS NEXT)开发技术,这边特意整理了《鸿蒙开发学习手册》(共计890页),希望对大家有所帮助:https://qr21.cn/FV7h05

《鸿蒙开发学习手册》:

如何快速入门:https://qr21.cn/FV7h05

  1. 基本概念
  2. 构建第一个ArkTS应用
  3. ……

开发基础知识:https://qr21.cn/FV7h05

  1. 应用基础知识
  2. 配置文件
  3. 应用数据管理
  4. 应用安全管理
  5. 应用隐私保护
  6. 三方应用调用管控机制
  7. 资源分类与访问
  8. 学习ArkTS语言
  9. ……

基于ArkTS 开发:https://qr21.cn/FV7h05

  1. Ability开发
  2. UI开发
  3. 公共事件与通知
  4. 窗口管理
  5. 媒体
  6. 安全
  7. 网络与链接
  8. 电话服务
  9. 数据管理
  10. 后台任务(Background Task)管理
  11. 设备管理
  12. 设备使用信息统计
  13. DFX
  14. 国际化开发
  15. 折叠屏系列
  16. ……

鸿蒙开发面试真题(含参考答案):https://qr18.cn/F781PH

鸿蒙开发面试大盘集篇(共计319页):https://qr18.cn/F781PH

1.项目开发必备面试题
2.性能优化方向
3.架构方向
4.鸿蒙开发系统底层方向
5.鸿蒙音视频开发方向
6.鸿蒙车载开发方向
7.鸿蒙南向开发方向

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

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

相关文章

工业物联网让“制造”变成“智造”!——青创智通

工业物联网解决方案-工业IOT-青创智通 随着科技的不断进步和工业的持续发展&#xff0c;物联网&#xff08;IoT&#xff09;技术的出现为制造业带来了前所未有的变革。工业物联网&#xff08;IIoT&#xff09;作为物联网技术在工业领域的应用&#xff0c;正在逐渐改变传统的制…

@Transactional使用中的三类坑

我们知道事务有声明式事务和编程式事务两种&#xff0c;编程式事务代码侵入较高&#xff0c;声明式事务侵入较低&#xff0c;在项目中常有使用&#xff0c;然而&#xff0c;不正确的使用声明式事务&#xff0c;可能让代码未能按照我们的预期执行。 一、事务可能没有生效 Tran…

2024-4.python4基本数据类型

基本数据类型 引言 提问 前面我们说过&#xff0c;计算机的本质作用就是用来存储和运算二进制的数据。但是在实际应用中&#xff0c;我们看到计算机存储或者运算的数据并非只有二进制的数据&#xff0c;例如使用Excel可以对一些数值数据、文本数据或者图像数据进行不同形式的处…

从iPhone恢复已删除照片的最佳软件

本文分享了从iPhone恢复已删除照片的最佳软件。如果您正在寻找如何从iPhone恢复已删除的照片&#xff0c;请查看这篇文章。 为什么您需要软件从iPhone恢复已删除的照片&#xff1f; 没有什么比丢失iPhone上的重要数据更痛苦的了&#xff0c;尤其是一些具有珍贵回忆的照片。有时…

公司文件加密软件有监视功能吗?

公司文件加密软件不仅提供了强大的文件加密能力&#xff0c;还具备了监视功能&#xff0c;确保文件在使用过程中的安全性。华企盾DSC数据防泄密系统中的监控功能体现在以下几个方面&#xff1a; 加密文件操作日志&#xff1a;记录所有加密文件的申请、审批、扫描加解密、自动备…

C#值传递和引用传递,ref和out关键字,装箱和拆箱

C#值传递和引用传递 1.值传递和引用传递 值传递&#xff1a;值传递时&#xff0c;系统首先为被调用方法的形参分配内存空间&#xff0c;并将实参的值按位置一一对应复制给形参&#xff0c;被调用方法中形参得任何改变都不会影响到相应的实参。 引用传递时&#xff1a;系统不是…

【学习笔记十】EWM自动产品包装配置

一、确定包装物料建议的程序 1.定义内向交货处理的凭证类型 2.确定包装物料建议的程序确定原理 使用可以确定包装材料建议的过程来指定业务代码。系统使用这些业务代码查找包装规格。包装期间&#xff0c;系统可建议包装材料。如果系统确定包装规格并建议包装材料&#xff0c;…

Suno AI

Suno is the latest big name in AI, but what is it? Keep reading to learn everything you need to know about Suno AI, including what it is, what it can do, and how much it costs. Suno AI是一款由Anthropic公司开发的人工智能音乐生成器&#xff0c;它利用先进…

Gradle 构建自动化工具入门

&#x1f3f7;️个人主页&#xff1a;牵着猫散步的鼠鼠 &#x1f3f7;️系列专栏&#xff1a;Java全栈-专栏 &#x1f3f7;️个人学习笔记&#xff0c;若有缺误&#xff0c;欢迎评论区指正 目录 1. 前言 2. 简介 3. 常见的项目构建工具 4. 安装 4.1. 安装说明 4.2. 下载…

[管理者与领导者-167] :团队管理 - 高效执行力 -6-授权-领导者做个统筹调度的领导者,而不是做冲锋陷阵的士兵

目录 关键词&#xff1a; 前言&#xff1a; 一、管理者做自己该做的事&#xff0c;下属做下属该做的事 二、科学分配任务和职责 三、只有信任员工&#xff0c;才能有效授权 四、授权管头&#xff08;定目标&#xff09;管尾&#xff08;把结果&#xff09;&#xff0c;但…

『大模型笔记』视觉语言模型解释

视觉语言模型解释 文章目录 一. 视觉语言模型解析1.什么是视觉语言模型&#xff1f;2. 开源视觉语言模型概览3. 如何找到合适的视觉语言模型MMMUMMBench 4. 技术细节5.使用变压器 (transformers) 运用视觉语言模型6. 使用 TRL 微调视觉语言模型 二. 参考文章 一. 视觉语言模型…

10.基础乐理-高音点、低音点

首先唱名&#xff08;do、re、mi、fa、sol、la、si 1234567&#xff09;先对应在 小字一组上&#xff0c;一般调号 1c 时都是对应在 小字一组上 然后从 小字一组 开始往左或往右&#xff0c;往左的音是越低的&#xff0c;往右的音是越高的&#xff0c;这时也需要给唱名&#xf…

47---PCIE硬件电路设计

视频链接 PCIe硬件电路设计01_哔哩哔哩_bilibili PCIe硬件电路设计 1、PCIE介绍 1.1、PCIe简介 PCI-Express (peripheral component interconnect express)是一种高速串行计算机扩展总线标准&#xff0c;用于在CPU与外围组件之间实现高速串行通信。如今已成为主板扩展总线…

jenkins+git+maven+nodejs安装(linux系统)

前文已经安装完成sonarqube和Sonar Scanner了&#xff0c;接下来可以开始jenkins了 jenkins安装 命令&#xff08;版本为 2.440&#xff09; wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo wget https://pkg.jenkins.io/redh…

vue 开发 滑动页面中出现tabs 并且需要分页的

效果 需求 我们这个页面顶部有tabs 栏 而且可以滑动到底部 进行分页 实现这样的页面我们应该怎么做 你应该会想到scroll-view 这个组件吧 下面我们来详情介绍一下这个页面的实现和功能开发 首先展示一下代码 item 循环项 <template><div class"wechat-or…

Clustering and Projected Clustering with Adaptive Neighbors 论文阅读

1 Abstract 许多聚类方法基于输入数据的相似性矩阵对数据组进行划分。因此&#xff0c;聚类结果高度依赖于数据相似性学习。由于相似性度量和数据聚类通常是分两步进行的&#xff0c;学习到的数据相似性可能不是数据聚类的最佳选择&#xff0c;从而导致次优结果。在本文中&…

蓝牙耳机哪个品牌的好?五款实力超群品牌分享推荐!

​音乐不仅仅是一种娱乐&#xff0c;它还能激发灵感、放松心情。一款优质的蓝牙耳机能够让音乐体验更加丰富和便捷。在众多的蓝牙耳机中&#xff0c;我特别挑选了几款在音质、设计和功能上都表现出色的产品。无论你是在家中放松、在健身房锻炼&#xff0c;还是在通勤路上&#…

鸿蒙 UI预览报错

SyntaxError: Unexpected end of JSON input 删除entry下的.preview文件 重新刷新预览

从IPv4到IPv6:解密网络通信的新时代

欢迎来到我的博客&#xff0c;代码的世界里&#xff0c;每一行都是一个故事 从IPv4到IPv6&#xff1a;解密网络通信的新时代 前言ipv4介绍ipv6介绍IPv4与IPv6的区别IPv4地址枯竭问题和IPv6的解决方案 ipv6的优势IPv6在新兴技术领域的应用 ipv4向ipv6的过渡挑战解决方案IPv6部署…

电压比较器LM339介绍和仿真

电压比较器LM339介绍和仿真 &#x1f4d1;LM339相关特性 工作电源电压范围宽&#xff0c;单电源、双电源均可工作&#xff0c;单电源&#xff1a; 2&#xff5e;36V&#xff0c;双电源&#xff1a;1&#xff5e;18V&#xff1b;消耗电流小&#xff0c; Icc1.3mA&#xff1b;输…