嵌入式通信协议-----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.rhkb.cn/news/356364.html

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

相关文章

数字营销新玩法:拓新与裂变的完美结合

在当今这个飞速发展的数字化时代,数字营销已经成为了企业发展中至关重要的一环。拓新,简单来说就是不断去开拓新的客户群体,让更多的人了解并接触到我们的产品或服务。要做到这一点,那可得充分利用各种线上渠道。像热闹非凡的社交…

ffmpeg音视频开发从入门到精通——ffmpeg实现音频抽取

文章目录 FFmpeg 实现音频流抽取1. 包含FFmpeg头文件与命名空间声明2. 主函数与参数处理3. 打开输入文件4. 获取文件信息5. 查找音频流6. 分配输出文件上下文7. 猜测输出文件格式8. 创建新的音频流9. 打开输出文件10. 写入文件头信息11. 读取并写入音频数据12. 写入文件尾部信息…

vue实现的商品列表网页

一、商品列表效果如下 二、代码&#xff1b; vue实现的商品列表网页 &#xff0c; 图片在vue项目的Public文件夹里的 imgs中 <template><div class"common-layout"><!-- el-container:外层容器。 当子元素中包含 <el-header> 或 <el-foo…

如何修复“AI的原罪”

如何修复“AI的原罪” 上个月&#xff0c;《纽约时报》声称&#xff0c;科技巨头OpenAI和谷歌不顾服务条款和版权法的禁止&#xff0c;将大量YouTube视频转录成文本&#xff0c;并将其用作人工智能模型的额外训练数据&#xff0c;从而进入了版权灰色地带。《纽约时报》还援引Me…

细说MCU输出两路PWM波形及改变占空比的实现方法

目录 一、硬件及工程 二、建立工程 三、代码修改 四、下载运行 五、改变PWM波形占空比 1、定义两个全局变量 2、启动定时器 3、重写TIM3中断回调函数 六、下载并运行 一、硬件及工程 文章依赖的硬件及工程配置参考本文作者的其他文章&#xff1a;细说ARM MCU的串口接…

VC++学习(5)——文本编程,插入符的初始化,图形插入符;文字始终在窗口;字符输入功能,回车换行,删除,左键定位;字体修改,字体平滑变色

目录 引出第五讲 文本编程新建项目输入线的初始化根据字体大小定义插入符大小创建图形插入符文字始终保存在窗口中CString类通过字符串资源 路径层字符输入的功能键盘输入消息鼠标左键消息保存点击位置的坐标 输入回车键的处理删除文字的实现 字符输入功能代码字体的修改模拟卡…

开发中遇到的一个bug

遇到的报错信息是这样的&#xff1a; java: Annotation processing is not supported for module cycles. Please ensure that all modules from cycle [hm-api,hm-common,hm-service] are excluded from annotation processing 翻译过来就是存在循环引用的情况&#xff0c;导…

FFmpeg源码:AV_RB32宏定义分析

一、AV_RB32宏定义的作用 AV_RB32是FFmpeg源码中经常出现的一个宏&#xff0c;其定义如下&#xff1a; #ifndef AV_RB32 # define AV_RB32(p) AV_RB(32, p) #endif 该宏定义有多层。把它简化为函数&#xff0c;其函数声明可以等价于&#xff1a; uint32_t AV_RB32(uint…

【机器学习 复习】 第1章 概述

一、概念 1.机器学习是一种通过先验信息来提升模型能力的方式。 即从数据中产生“模型”( model )的算法&#xff0c;然后对新的数据集进行预测。 2.数据集&#xff08;Dataset&#xff09;&#xff1a;所有数据的集合称为数据集。 训练集&#xff1a;用来训练出一个适合模…

【分布式系列】分布式锁timeout了怎么办?

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

ffmpeg windows系统详细教程

视频做预览时黑屏&#xff0c;但有声音问题解决方案。 需要将 .mp4编成H.264格式的.mp4 一般上传视频的站点&#xff0c;如YouTube、Vimeo 等&#xff0c;通常会在用户上传视频时自动对视频进行转码&#xff0c;以确保视频能够在各种设备和网络条件下流畅播放。这些网站通常…

【尚庭公寓SpringBoot + Vue 项目实战】预约看房与租约管理(完结)

【尚庭公寓SpringBoot Vue 项目实战】预约看房与租约管理&#xff08;完结&#xff09; 文章目录 【尚庭公寓SpringBoot Vue 项目实战】预约看房与租约管理&#xff08;完结&#xff09;1、业务说明2、接口开发2.1、预约看房管理2.1.1.保存或更新看房预约2.1.2. 查询个人预约…

【Java】已解决java.io.InterruptedIOException异常

文章目录 一、分析问题背景二、可能出错的原因三、错误代码示例四、正确代码示例五、注意事项 已解决java.io.InterruptedIOException异常 在Java中&#xff0c;java.io.InterruptedIOException异常通常与I/O操作被中断有关。这种中断可能由多种因素引起&#xff0c;如线程被中…

Palo Alto GlobalProtect App 6.3 (macOS, Linux, Windows, Andriod) - 端点网络安全客户端

Palo Alto GlobalProtect App 6.3 (macOS, Linux, Windows, Andriod) - 端点网络安全客户端 Palo Alto Networks 远程访问 VPN 客户端软件 请访问原文链接&#xff1a;https://sysin.org/blog/globalprotect-6/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。…

本地部署Ollama+qwen本地大语言模型Web交互界面

什么是 Ollama WebUI&#xff1f; Ollama WebUI 已经更名为 Open WebUI. Open WebUI 是一个可扩展、功能丰富且用户友好的自托管 WebUI&#xff0c;旨在完全离线操作。它支持各种 LLM 运行程序&#xff0c;包括 Ollama 和 OpenAI 兼容的 API。 Ollama WebUI 是一个革命性的 L…

python数据分析-糖尿病数据集数据分析预测

一、研究背景和意义 糖尿病是美国最普遍的慢性病之一&#xff0c;每年影响数百万美国人&#xff0c;并对经济造成重大的经济负担。糖尿病是一种严重的慢性疾病&#xff0c;其中个体失去有效调节血液中葡萄糖水平的能力&#xff0c;并可能导致生活质量和预期寿命下降。。。。 …

matlab 路面点云标线提取

目录 一、算法原理二、代码实现三、结果展示四、参考链接本文由CSDN点云侠原创,原文链接。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫与GPT。 一、算法原理 算法来自本人自创。实现效果如下图所示,具体实现原理看代码即可。 二、代码实现 clc; cle…

与Vatee万腾平台同行,共创智能未来

在科技日新月异的今天&#xff0c;智能化已成为推动社会进步的重要力量。Vatee万腾平台&#xff0c;作为这一浪潮中的佼佼者&#xff0c;正以其独特的创新力和前瞻的视野&#xff0c;引领我们迈向智能未来。与Vatee万腾平台同行&#xff0c;我们不仅能享受到科技带来的便捷与舒…

DPDK与传统收发报文的区别

1.去除中断 传统的收发报文方式都必须采用硬中断来做通讯&#xff0c;每次硬中断大约消耗100微秒&#xff0c;这还不算因为终止上下文所带来的Cache Miss。 DPDK采用轮询模式驱动(PMD)。 PMD由用户空间的特定的驱动程序提供的API组成&#xff0c;用于对设备和它们相应的…

Java也能做OCR!SpringBoot 整合 Tess4J 实现图片文字识别

文章目录 1. 环境准备1.1 安装 Tesseract OCR 引擎1.2 引入 Tess4J 依赖 2. 创建 Spring Boot 项目2.1 初始化项目2.2 目录结构 3. 编写 OCR 功能代码3.1 创建服务层3.2 创建控制器层 4. 配置 Tesseract 语言包5. 运行和测试5.1 启动 Spring Boot 应用5.2 使用 Postman 或 cURL…