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

news2024/11/29 6:27:37

在这里插入图片描述

目录

  • 一、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.coloradmin.cn/o/1455803.html

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

相关文章

Chrome浏览器安装Axure-Chrome-Extension插件

Chrome浏览器打开Axure生成的HTML静态文件页面时,会显示如下图AXURE RP EXTENSION FOR CHROME,这是因为Chrome浏览器没有安装Axure插件Axure-Chrome-Extension导致的。 解决方法: 插件下载地址:https://download.csdn.net/downlo…

CleanMyMacX需要付费吗?多少钱?有哪些新功能

CleanMyMac X是一个付费应用程序**,需要许可证或订阅来解锁所有功能。不过,CleanMyMac X提供免费试用版供您访问其有限的功能。在试用模式下,用户可以使用部分功能进行体验,但这并非完全免费,因为某些功能会受到限制。…

Android下SF合成流程重学习之GPU合成

Android下SF合成流程重学习之GPU合成 引言 SurfaceFlinger中的图层选择GPU合成(CLIENT合成方式)时,会把待合成的图层Layers通过renderengine(SkiaGLRenderEngine)绘制到一块GraphicBuffer中,然后把这块GraphicBuffer图形缓存通过调用setClientTarget传递…

代码随想录算法训练营 DAY20 | 二叉树(7)

一、LeetCode 530 二叉搜索树的最小绝对值 题目链接:530.二叉搜索树的最小绝对值https://leetcode.cn/problems/minimum-absolute-difference-in-bst/ 思路一:利用搜索二叉树的中序遍历结果为有序数组的性质,将遍历结果保存到数组中&#xf…

分析:香港2亿港元诈骗案的风险特征及技术检测思路

目录 深度伪造带来的新挑战 如何有效检测深度伪造? 多管齐下的安全策略 据香港公共广播公司报道,一家跨国公司香港分行的一名员工在一次电话会议后被骗支付了2亿港元(超过2500万美元)的资金。 据介绍,这起骗局始于202…

【深度优先搜索】【树】【有向图】【推荐】685. 冗余连接 II

LeetCode685. 冗余连接 II 在本问题中,有根树指满足以下条件的 有向 图。该树只有一个根节点,所有其他节点都是该根节点的后继。该树除了根节点之外的每一个节点都有且只有一个父节点,而根节点没有父节点。 输入一个有向图,该图由…

Python学习(16)|列表_遍历_排序_max_min_sum

列表的遍历: a [10,20,30,40] for obj in a: #obj 是临时变量名称,随意起名print(obj) 执行结果: 复制列表所有的元素到新列表对象: list1 [30,40,50] list2 list1 #只是将list2也指向了列表对象。也就是说list…

基于Python3的数据结构与算法 - 01 复杂度和列表查找

一、时间复杂度 定义:用来评估算法运行效率的一个式子。 例如:此处的O(1) 详单与一个时间单位 接下来我们看下面两个式子: 如果按照上面的定义,那么打印三次相当O(3),下面的循环相当于O(n21) 但是实际不是这样的 因…

YOLO v5项目实战 P5 解决运行detect文件时设置了--view-img但是显示不出来的问题

up主讲的实时显示目标检测后的图片的两种方法: (1)在下面的Terminal中输入下列命令: python detect.py --view-img (2)点击进入右上方的detect的Edit Configurations 然后在这个参数这里输入 --view img…

Pulsar-架构与设计

Pulsar架构与设计 一、背景和起源二、框架概述1.设计特点2.框架适用场景 三、架构图1.Broker2.持久化存储(Persistent storage)3.Pulsar元数据(Metadata store) 四、功能特性1.消息顺序性2.消息回溯3.消息去重4.消息重投递5.消息重…

一键安装ROS适用于Ubuntu22/20/18

一键安装ROS适用于Ubuntu22/20/18 1、简介 ROS(Robot Operating System,机器人操作系统)是一个用于机器人软件开发的框架。它提供了一套工具和库,用于机器人应用程序的开发、测试和部署。ROS是由美国斯坦福大学机器人实验室&…

银河麒麟操作系统自动同步时间更新

1、银河麒麟操作系统基于Centos8的,因centos8取消了ntp服务器,所以导致之前使用ntpdate命令无法同步时间 2、centos默认使用chrony模块来进行同步时间 3、修改chrony配置同步时间服务器 vim /etc/chrony.conf 4、目前使用的是阿里云的时间服务器&…

2024年初中生古诗文大会安排预测和备考建议、资料

今天(2024年2月19日)是上海市中小学正式开学的日子,神兽归位,各位家长可以松口气了,为孩子规划今年的竞赛、学科活动了。根据一些家长朋友的咨询,今天六分成长介绍2024年中学生古诗文大会(初中组…

图数据库 之 Neo4j - Cypher语法基础(5)

节点(Nodes) Cypher使用()来表示一个节点。 () # 最简单的节点形式,表示一个任意无特征的节点,其实就是一个空节点(movie) # 如果想指向一个节点在其他地方,我们可以给节点添加一个变量名(如movie),表示一个变量名为 movie的节点…

SQL Developer 小贴士:Unshared Worksheet

在Oracle SQL Developer中,最常用的功能应该是SQL Worksheet,或Worksheet。 可以创建两类Worksheet,即Worksheet和Unshared Worksheets。前者是共享数据库连接的,后者会单独创建自己的连接。前者的快捷键是AltF10;后者…

SSM项目启动错误[main] ERROR org.springframework.boot.SpringApplication

[main] ERROR org.springframework.boot.SpringApplication - Application run failed org.yaml.snakeyaml.error.YAMLException: java.nio.charset.MalformedInputException: Input length 1 这个错误是由于Spring Boot应用程序在解析YAML文件时遇到了字符编码问题。java.ni…

国产降压芯片 小封装 外围简单 支持36V 48V 60V 85V 100V电压-H6225L

国产降压芯片,也就是由中国企业设计和生产的用于电压转换的集成电路芯片,随着国内半导体产业的快速发展,这些芯片已经开始在一些领域显示出其优势。主要优势涵盖以下几个方面: 成本优势:国产降压芯片因为本土化生产&a…

NLP_GPT生成式自回归模型

文章目录 介绍完整代码小结 介绍 自回归(Autoregressive)是自然语言处理模型的一种训练方法,其核心思想是基于已有的序列(词或字符)来预测下一个元素。在GPT中,这意味着模型会根据给定的上文来生成下一个词,如图所示。 在GPT模型的训练和推…

数据分析 — 动画图 pyecharts

目录 一、概念二、安装和导入三、绘图逻辑四、绘图1、柱状图2、折线图3、散点图4、饼图5、南丁格尔图6、Geo() 地理坐标第7、Map() 绘制区域8、词云图9、层叠图10、3D 图11、仪表板 一、概念 Pyecharts 是一个基于 Echarts 的 Python 可视化库,它通过 Python 生成 …

猪圈Pigsty-PG私有RDS集群搭建教程

博客 https://songxwn.com/Pigsty-PG-RDS/ 简介 Pigsty 是一个更好的本地自建且开源 RDS for PostgreSQL 替代,具有以下特点: 开箱即用的 PostgreSQL 发行版,深度整合地理、时序、分布式、图、向量、分词、AI等 150 余个扩展插件&#xff…