嵌入式通信协议-----UART协议详解(基于智芯Z20k11X)

目录

一、简介

1.概念

2.结构

3.特点

4.优缺点

二、协议帧组成 

1.起始位

2.数据位

3.奇偶校验位

4.停止位

三、UART通信过程

四、USART与UART区别

五、代码实现

1.硬件框图

2.软件实现


一、简介

1.概念

        USART(Universal Synchronous Asynchronous Receiver Transmitter,通用同步异步收发器)是一串行通信设备,可以灵活地与外部设备进行进行全双工信息交换。

         UART(Universal Asynchronous Receiver/Transmitter,通用异步收发器)是一种双向、串行、异步的通信总线,仅用一根数据接收线和一根数据发送线就能实现全双工通信。

        两者相似,UART是在 USART 的基础上裁剪了同步通信功能,只保留异步通信功能,我们平时使用的串口通信都是 UART。

2.结构

        任何 UART 双向通信至少需要 3 个引脚,数据发送引脚 TXD,数据接收引脚 RXD,数据参考地 GND。这里特别需要注意的是连接方法,设备 A 和设备 B 信号需要交叉连接。如果电平不同,需要电平转换芯片。

ARM芯片和PC机的电平不同需接入电平转换芯片如RS232 

这里解释下电平标准,根据使用使用的电平标准不同,可以分为 TTL 和 RS232 标准, 如图所示:

因为控制器一般都是 TTL 标准,因此如果需要进行 RS232 通信时,一定要使用 R232 转换器进行 TTL 和 RS232 的电平转换。

3.特点

①  空闲时,RXD 和 TXD 默认高电平

②数据起始位为低电平,低位在前,高位在后,串口数据一般为8位

③串口可选择是否开启数据校验,校验位:单个字节数据校验,对数据中高低电平数据个数进行计数,常见的有奇偶校验。

4.优缺点

优点:

  • 简单性:实现简单,硬件需求少。
  • 无时钟信号:无需设备之间的时钟同步。
  • 广泛支持:被微控制器和外围设备广泛支持。

缺点:

  • 距离限制:适用于短距离通信,长距离会受到噪声和信号衰减的影响。
  • 速度限制:与SPI或I2C等同步通信协议相比,数据传输速率较低。
  • 单设备通信:主要设计为点对点通信,若要多设备通信需要额外的电路。

二、协议帧组成 

在 UART中,传输模式为数据包形式。数据包由起始位、数据帧、奇偶校验位和停止位组成。

1.起始位

         用于指示数据传输的开始。接收器通过检测到逻辑低电平来识别传输的开始。不传输数据时保持高电平(1),开始传输数据后变为低电平(0)。

2.数据位

        实际传输的数据。数据位的长度可以在通信双方协商时设置,通常为5到9位(常见的是8位)。不使用奇偶校验位为9位。

3.奇偶校验位

        用于错误检测。常见的校验方式包括偶校验(Even Parity)和奇校验(Odd Parity)。偶校验时,数据帧中的1的个数为偶数;奇校验时,1的个数为奇数。如果奇校验时 ,而数据帧1的总和为偶数,或者偶校验时 ,而总和为奇数,则UART 认为数据帧中的位已改变。如果不用校验位,可以省略这一部分。

4.停止位

        指示数据传输的结束,并用于接收器同步和复位。停止位提供了一段时间让接收器准备好接收下一帧数据。发送 UART 将数据传输线从低电压驱动到高电压并保持1 到 2 位时间。

示例:

假设发送8位数据,没有校验位,1位停止位,数据为0x55(即二进制01010101),其UART帧结构如下:

| 起始位 |  数据位     |  停止位 |
|   0        | 01010101 |    1       |   

三、UART通信过程

发送器

  • 发送器开始发送起始位。
  • 紧接着发送数据位(从LSB到MSB)。
  • 如果启用了校验,发送校验位。
  • 最后发送停止位。

接收器

  • 接收器通过检测起始位(逻辑低)开始数据接收。
  • 按照预设的波特率,依次接收数据位。
  • 检查校验位(如果有)进行错误检测。
  • 检测到停止位(逻辑高)后,完成一帧数据的接收。

四、USART与UART区别

UARTUSART
配置和使用只需配置波特率、数据位、校验位和停止位,适用于简单的点对点通信除了和UART一样的配置外,还需要配置同步模式的时钟设置,适用于需要高精度、高速度的通信场合。
数据传输例如,9600波特率下,每秒可以传输9600个比特在同步模式下,可以通过更高的时钟频率实现更高的数据传输率

例子:

UART数据传输

  • 发送端:数据0x55(二进制01010101),波特率9600,无校验位,1个停止位。
  • 接收端:检测到起始位后,按配置的波特率读取数据位,校验(如果有),然后等待停止位。

USART数据传输(同步模式):

  • 发送端和接收端共享时钟信号。
  • 发送端:数据0x55(二进制01010101),时钟频率为1MHz。
  • 接收端:同步时钟信号,按时钟频率读取数据位,实现更高的传输速率。

五、代码实现

本次实验的效果是重定义printf函数输出Hello world!

1.硬件框图

2.软件实现

①初始化结构体

UART_Config_t tUartCfgStruct = {9600,             /* 波特率选择*/UART_DATABITS_8, /* 数据位大小 */UART_PARITY_NONE, /* 奇偶校验位选择*/UART_STOPBITS_1, /* 停止位 */DISABLE,         /* 数据流控制 */40000000         /* 函数时钟频率选择 */
};/* 初始化结构体配置 */
UART_Init(UART1_ID, &tUartCfgStruct);

 ②串口接收函数

 unsigned char ch;/* 等待清除DR寄存器 */while (RESET == UART_GetLineStatus(UART1_ID,UART_LINESTA_DR));
/* 接收数据 */ch = UART_ReceiveByte(UART1_ID);

③串口发送函数

/* 等待状态寄存器TEMT复位 */while(RESET == UART_GetLineStatus(UART1_ID,
UART_LINESTA_TEMT));/* 发送数据ch */UART_SendByte(UART1_ID, ch);}
}

 ④重定义printf

unsigned char  ch[100];int fputc(int ch, FILE *f)
{     (void) f; /* Wait untill FIFO is empty */while(RESET == UART_GetLineStatus(UART1_ID, UART_LINESTA_TEMT)){}/* Send data */UART_SendByte(UART1_ID, (uint8_t)ch);     return ch;
}

代码简单的介绍了串口发送和接收的函数以及重定向printf进行打印,代码很简单所以没有放入完整代码,有学习使用智芯开发板的小伙伴们可以留言一起进行交流。 

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

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

相关文章

2024年最新机动车签字授权人考试题库。

31."简易瞬态工况法"所使用的五气分析仪的温度范图:分析系统及相关部件应在( )。 A.0-40℃ B.0-50℃ C.0-60℃ D.-10-40℃ 答案:A 32.稀释氧传感器环境空气量程检测时的读数值位于( )%vol范围之外时,应…

成都百洲文化传媒有限公司助力电商品牌乘风破浪

在当今数字化时代,电商行业风起云涌,竞争异常激烈。成都百洲文化传媒有限公司凭借其对电商行业的深刻理解与实战经验,已然成为行业中的佼佼者。公司专注于电商服务领域,通过创新的营销模式和精准的市场策略,助力众多品…

北京互动阅读app开发,“身”临其境,阅读精彩

随着大数据与智能化的不断发展进步,线上阅读软件也越来越多,为了缓解对传统翻页阅读方式产生的疲劳,人们对线上阅读提出了新的要求。对此,与智能科技相结合的北京互动阅读app开发,以高互动、高体验感的优势&#xff0c…

类的默认成员函数——构造与析构函数

如果一个类中什么成员都没有,简称为空类。但是空类中真的什么都没有吗? 当然不是,任何类在什么都不写的情况下,编译器会自动生成6个默认成员函数 1.构造函数 1.1概念引入 对于以下这个Date类,可以通过Init公有方法给…

食品供应链管理商城系统的设计、实现和代码

上线食品供应链管理商城系统的设计与实现是一项复杂且重要的任务,它不仅涉及到技术层面的具体实现,还包括业务流程的优化和用户体验的提升。本文将从系统设计、功能模块、技术选型以及实现步骤等方面进行详细探讨。 ### 系统设计 在设计食品供应链管理…

从单一到多元:EasyCVR流媒体视频汇聚技术推动安防监控智能升级

随着科技的飞速发展,视频已成为我们日常生活和工作中的重要组成部分。尤其在远程办公、在线教育、虚拟会议等领域,视频的应用愈发广泛。为了满足日益增长的视频需求,流媒体视频汇聚融合技术应运而生,它不仅改变了传统视频的观看和…

第二天的课根本跟不上啊 难难难啊

编程实现三个数求最大 编程实现求解一元二次方程 传参问题 直接使用返回值 复制控制 复制控制是指在C中控制对象复制行为的机制, 包括拷贝构造函数(copy constructor)、 赋值操作符(copy assignment operator)、 …

mysql workbench使用schema视图导出表和列结构到excel

目的:导出所有表和列的名字和注释 很多时候没有正规的数据库文档,为了快速交流啊,需要一个快捷的基础。数据库建表的时候可能有注释,也可能没有注释。有当然好,查看注释就能清楚很多,没有的话最好一个一个补…

零基础如何制作一个GIS可视化大屏?免费无难度!

一.GIS是什么? GIS(地理信息系统)开发是一种利用计算机技术对地理信息进行处理、分析、存储和展示的技术。GIS开发可以应用在很多领域,如城市规划、环境保护、交通管理、农业生产等。 二.如何将GIS与数字孪生结合起来&#xff1f…

Verilog的逻辑系统及数据类型(二):参数和参数重载

目录 3.参数(parameters)3.1 参数重载(overriding)3.2 参数重载举例 微信公众号获取更多FPGA相关源码: 3.参数(parameters) 用参数声明一个可变常量,常用于定义延时及宽度变量。参数定义的语法:paramete…

安卓应用开发学习:获取经纬度及地理位置描述信息

前段时间,我在学习鸿蒙应用开发的过程中,在鸿蒙系统的手机上实现了获取经纬度及地理位置描述信息(鸿蒙应用开发学习:手机位置信息进阶,从经纬度数据获取地理位置描述信息)。反而学习时间更长的安卓应用开发…

【WEB】关于react的WEB应用中使用React Developer Tools便捷快速查看元素数据

1、往扩展工具中添加React Developer Tools的扩展包 2、检查是否生效,如下图: 可以看到右上角多出来一个Components的tab选项,就是成功了

WebStorm 环境配置带@符号的相对路径穿透

在使用WebStorm 环境开发web页面项目时有时想快速查看页面的引用代码,只能手工找到引入文件路径,这很不方便,只需通过配置webStorm单击打开。 1 使用符号相对路径,在默认情况下没有配置环境是无法打开,如下图&#xf…

AI全栈之coze的logo生成

前言 前几日体验了国产的AI-Agents产品coze 它是一种能够自主执行任务、与环境进行交互并根据所获取的信息做出决策和采取行动的软件程序 并且可以自己去创建属于自己的AIBot,还是很有意思的,大家可以去体验体验 在体验过程中,我发现在创…

Linux操作系统进程同步的几种方式及基本原理

1,进程同步的几种方式 1.1信号量 用于进程间传递信号的一个整数值。在信号量上只有三种操作可以进行:初始化,P操作和V操作,这三种操作都是原子操作。 P操作(递减操作)可以用于阻塞一个进程,V操作(增加操作)可以用于…

Go 实现继承的方式

💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

Java高级重点知识点-12-Collection、iterator迭代器、泛型

文章目录 Collection集合Iterator迭代器泛型(难点) Collection集合 集合是java中提供的一种容器,可以用来存储多个数据。 集合框架 单列集合java.util.Collection双列集合java.util.Map 集合类继承体系图: List集合的特点&am…

新品发布 | TC1018Pro和TC1034Pro正式发布,功能升级,多设备时间同步

新品发布/New products release 同星智能最新推出TC1018Pro和TC1034Pro两款产品,新版本在保留原来基本功能的基础上做了升级,主要新增IO功能、错误帧ID检测、多设备间时间同步等功能。 接下来,让我们看看这两款产品带来了哪些具体功能升级&a…

玄奘取经线路矢量图分享

我们在《透过丝绸之路,看古人都走过哪些地方》一文中,为你分享过丝绸之路的矢量图数据。 现在,我们再为你分享一下玄奘取经线路的矢量图,你可以在文末查看这些数据的领取方式。 玄奘取经线路 《西游记》的故事相信大家都不陌生…

ABC234G Divide a Sequence 题解

题目来源 ABC234G 洛谷 Description 给定长度为 n n n 的序列 { a n } \{a_n\} {an​}。定义一种将 { a n } \{a_n\} {an​} 划分为若干段的方案的价值为每段的最大值减去最小值的差的乘积。求所有划分方案的价值的总和并对 998244353 998244353 998244353 取模。 1 ≤…