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

在这里插入图片描述

目录

  • 一、UART 概述
  • 二、UART 模块相关API
  • 三、UART 接口调用实例
  • 四、UART HDF驱动开发
    • 4.1、开发步骤(待续...)
  • 坚持就有收获

一、UART 概述

UART 是通用异步收发传输器(Universal Asynchronous Receiver/Transmitter)的缩写,是通用串行数据总线,用于异步通信,该总线双向通信,可以实现全双工传输。UART 应用比较广泛,常用于输出打印信息,也可以外接各种模块,如 GPS、蓝牙等。

  • 异步通信

异步通信中,数据通常以字符或者字节为单位组成字符帧传送。字符帧由发送端逐帧发送,通过传输线被接收设备逐帧接收。发送端和接收端可以由各自的时钟来控制数据的发送和接收,这两个时钟源彼此独立,互不同步。异步通信以一个字符为传输单位,通信中两个字符间的时间间隔是不固定的,然而在同一个字符中的两个相邻位代码间的时间间隔是固定的。

  • 全双工传输(Full Duplex)

此通信模式允许数据在两个方向上同时传输,它在能力上相当于两个单工通信方式的结合。全双工可以同时进行信号的双向传输。

UART 设备的连接示意图如下:

请添加图片描述

  • TX:发送数据端,和对端的 RX 相连。
  • RX:接收数据端,和对端的 TX 相连。
  • RTS:发送请求信号,用于指示本设备是否准备好,可以接收数据,和对端 CTS 相连。
  • CTS:允许发送信号,用于判断是否可以向对端发送数据,和对端 RTS 相连。

UART 通信之前,收发双方需要约定好:波特率、数据格式。

  • 波特率:指信息传输到信道的速率。例如:9600、961200、115200 等。
  • 数据格式:一帧数据由起始位、数据位、校验位、停止位组成。

UART 通信过程中,UART 通过 TX 发送数据给对端,通过 RX 接收对端数据。当 UART 接收缓存达到预定的门限值时,RTS 变为不可发送数据,对端的 CTS 检测到不可发送数据的信号,则停止发送数据。

UART 在进行数据传输时的数据格式如下:

请添加图片描述

UART 操作流程如下:

请添加图片描述

二、UART 模块相关API

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

接口函数描述
unsigned int IoTUartInit(unsigned int id, const IotUartAttribute *param);初始化UART
unsigned int IoTUartDeinit(unsigned int id);清除初始化UART
int IoTUartWrite(unsigned int id, const unsigned char *data, unsigned int dataLen);UART写操作
int IoTUartRead(unsigned int id, unsigned char *data, unsigned int dataLen);UART读操作

三、UART 接口调用实例

//代码功能:定义了 UART 接口功能以及 UART 相关参数,GPIO_00 号口作为 UART1_TXD 模式以及 UART 相关参数,最后进行读写操作。#include "iot_uart.h"
IotUartAttribute uart_attr = {
.baudRate = 9600, //波特率
.dataBits = 8, //数据位
.stopBits = 1, //停止位
.parity = 0, //优先级
};IoTUartInit(UART1_TXD, &uart_attr);
IoTUartWrite(UART1_TXD, data, strlen(data));
IoTUartRead(UART1_TXD, buff, BUFF_SIZE);

四、UART HDF驱动开发

在HDF框架中,UART接口适配模式采用独立服务模式(如图3所示)。在这种模式下,每一个设备对象会独立发布一个设备服务来处理外部访问,设备管理器收到API的访问请求之后,通过提取该请求的参数,达到调用实际设备对象的相应内部方法的目的。独立服务模式可以直接借助HDF设备管理器的服务管理能力,但需要为每个设备单独配置设备节点,增加内存占用。

独立服务模式下,核心层不会统一发布一个服务供上层使用,因此这种模式下驱动要为每个控制器发布一个服务,具体表现为:

驱动适配者需要实现HdfDriverEntry的Bind钩子函数以绑定服务。

device_info.hcs文件中deviceNode的policy字段为1或2,不能为0。

UART模块各分层作用:

接口层提供打开UART设备、UART设备读取指定长度数据、UART设备写入指定长度数据、设置UART设备波特率、获取设UART设备波特率、设置UART设备属性、获取UART设备波特率、设置UART设备传输模式、关闭UART设备的接口。

核心层主要提供UART控制器的创建、移除以及管理的能力,通过钩子函数与适配层交互。

适配层主要是将钩子函数的功能实例化,实现具体的功能。

图 3 UART独立服务模式结构图

请添加图片描述

4.1、开发步骤(待续…)

UART模块适配包含以下四个部分。

  • 驱实例化驱动入口
  • 配置属性文件
  • 实例化UART控制器对象
  • 驱动调试

坚持就有收获

在这里插入图片描述

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

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

相关文章

调用百度文心AI作画API实现中文-图像跨模态生成

作者介绍 乔冠华,女,西安工程大学电子信息学院,2020级硕士研究生,张宏伟人工智能课题组。 研究方向:机器视觉与人工智能。 电子邮件:1078914066qq.com 一.文心AI作画API介绍 1. 文心AI作画 文…

上传(图片)文件的功能实现

说句实话,现在的开发简单多了。因为有现成的第三方的上传文件的代码。如果放在我们以前做开发,上传文件的代码都得自己写。 那现在的程序员面对上传文件的功能到底写啥代码。 1)、对于前端人员:就是把后端的请求地址&#xff0c…

阿基米德签证小程序管理系统功能清单

阿基米德签证小程序管理系统,底层架构采用当前国内最流行的php框架thinkphp8.0、采用广泛使用的MYSQL数据库,管理后台前后台分离,同时使用了当今最流行的基于VUE3和elementPlus前端框架,小程序采用了支持多端合一的UNI-APP开发&am…

Kernel 地图

前言 在 Linux Kernel 中,根据 Makefile 和 Kconfig,可以快速地了解一个小的内核子系统。所以我将这两个文件称之为 Kernel 地图。 Kernel 地图 基本上,Linux 内核中,每一个目录下面都有一个 Makefile 和一个 Kconfig 文件。这…

docker 安装达梦dm8 包含lincese

1.加载达梦数据库docker镜像 dm_v8.1.1.66_x86_rh7_64_ent.tar为申请的镜像文件。 docker load -i dm_v8.1.1.66_x86_rh7_64_ent.tar 查看镜像 docker images 创建达梦数据库容器 执行创建命令: docker run -d -p 30236:5236 --restartalways --name dm8_test…

Day11-Linux系统iNode及链接知识及企业按哪里精讲

Day11-Linux系统iNode及链接知识及企业按哪里精讲 1. 文件核心 属性知识1.1 什么是索引节点(inode)。1.2 索引节点作用1.3 inode是怎么产生的?1.4 inode的特点?1.5 Linux系统读取文件的原理1.6 企业生产案例:No space …

行人重识别综述

Deep Learning for Person Re-identification: A Survey and Outlook 论文地址https://arxiv.org/pdf/2001.04193 1. 摘要 we categorize it into the closed-world and open-world settings. closed-world:学术环境下 open-world :实际应用场景下 2…

Python系列(15)—— int类型转string类型

Python中的int类型转string类型 一、引言 在Python编程中,我们经常会遇到需要将整数(int)类型转换为字符串(string)类型的情况。例如,当我们需要将数字与文本结合时,或者当我们需要将数字写入…

【算法 - 动态规划】力扣 691. 贴纸拼词

上一篇文章中的两道较为简单的题目都是通过 暴力递归 逐步修改成为 动态规划 ,并使用了严格的 dp表依赖 ,相信小伙伴对此有了初步的认识。 本文我们来练习一道 LeetCode 中 Hard 级别,不使用严格的表依赖的题目。 力扣691. 贴纸拼词 我们有…

《数据结构与算法之美》读书笔记

《数据结构与算法之美》读书笔记 写在前面 这本书的大部分内容比较浅显,因此只挑DSAA课程上没有涉及或没有深入讨论的点总结 第二章 数组相关 提高传统数组插入/删除数据效率的方法: 如果插入的数据不要求有序,可以直接把某位的原数据替换…

儿时游戏“红色警戒”之“AI警戒”

一、红色警戒里“警戒”命令背后的算法原理是什么 在《红色警戒》系列即时战略游戏中,“警戒”命令背后的算法原理相对简单但又实用,其核心目标是让单位能够自动检测并反击一定范围内的敌方单位。虽然具体的实现细节未公开,但可以推测其基本…

Slack 给平台加入了 AI 驱动的搜索和总结功能

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

有什么办法解决SQL注入问题

随着互联网的普及和数字化进程的加速,Web攻击已经成为网络安全领域的一大威胁。Web攻击不仅可能导致个人隐私泄露、财产损失,还可能对企业和国家的安全造成严重影响。下面德迅云安全就分享一种常见的web攻击方式-SQL注入,了解下什么是SQL注入…

final域的内存语义

目录 一、概述 二、final域的重排序规则 三、写final域的重排序规则 四、读final域的重排序规则 五、final域为引用类型 一、概述 与锁和volatile相比,对final域的读和写更像是普通的变量访问。下面将介绍final域的内存语义。 final比volatile的强度弱一些&…

代码随想录刷题第34天

第一题是柠檬水找零https://leetcode.cn/problems/lemonade-change/,感觉并没有特别靠近贪心算法,可供讨论的情况非常少,5元收下,10元返5元,20元返15元,对各种找零情况讨论一下即可。 class Solution { pu…

跟老吕学Python编程——目录(含全教程链接)

😐 !!!记得先关注订阅本专栏【跟老吕学Python编程】!!!!!不然后续找不到了哦!!! 😐 以下是老吕对本教程的目录内容梳理↓↓…

123.买卖股票的最佳时机II

123.买卖股票的最佳时机II 原题链接:完成情况:参考代码:_122买卖股票的最佳时机II_可以多次买入卖出01_122买卖股票的最佳时机II_可以多次买入卖出02_122买卖股票的最佳时机II_常规dp_122买卖股票的最佳时机II_一维dp_122买卖股票的最佳时机…

leetcode(动态规划)53.最大子数组和(C++详细解释)DAY12

文章目录 1.题目示例提示 2.解答思路3.实现代码结果 4.总结 1.题目 给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。 子数组 是数组中的一个连续部分。 示例 提示 2.解答思…

判断素数(java)

法一: import java.util.Scanner;public class SuShu {public static void main(String[] args) {Scanner scan new Scanner(System.in);int number scan.nextInt();isPrime(number);}public static void isPrime(int number) {int count 0;for (int i 2; i &l…

【阅读笔记】红外探测器盲元国标标准及盲元识别

1、盲元定义 盲元的定义:盲元是红外焦平面探测器中响应过高或过低的探测单元,即无法准确成像的像元。盲元主要分为噪声盲元和响应率差异盲元两大类。 线阵红外探测器应用中,经常存在相邻的像元之间响应率有明显差异,其灰度响应输…