【STM32】USART串口协议

news2024/9/20 20:30:08

1 通信接口

通信的目的:将一个设备的数据传送到另一个设备,扩展硬件系统

通信协议:制定通信的规则,通信双方按照协议规则进行数据收发

USRT:TX是数据发送引脚,RX是数据接受引脚;

I2C:SCL是(Serial clock)时钟,SDA(Serial Data)是数据;

SPI:SCLK是时钟(Serial Clock),MOSI(Master output Slave Input)主机输出数据脚,MISO(Master intput Slave output)主机输入数据脚,CS(chip select) 片选:用于指定通信对象;

CAN通信:引脚CAN_H、CAN_L,用两个引脚表示差分数据;

USP通信:引脚是DP(Data positive)和DM(Data Minus)(D+/D-),也是差分数据脚。

全双工:同时双向通信,一般有两根通信线(一根发,一根收);

I2C和SPI有单独时钟线,所以它们是同步的,接收方可以在时钟信号的指引下进行采样。

USART、I2C、SPI都是单端电平,即它们引脚的高低电平都是对GND的电压差,还需要GND

CAN和USB是差分信号,它是靠两个差分引脚的电压差来传输信号的,不需要GND。提高抗干扰特性

1.1 串口通信

串口是一种应用十分广泛的通讯接口,串口成本低、容易使用、通信线路简单,可实现两个设备的互相通信

单片机的串口可以使单片机与单片机、单片机与电脑、单片机与各式各样的模块互相通信,极大地扩展了单片机的应用范围,增强了单片机系统的硬件实力

USB转串口模块:把串口协议转换成USB协议

陀螺仪传感器模块、蓝牙串口模块

1.2 硬件电路

简单双向串口通信有两根通信线(发送端TX和接收端RX

TX与RX要交叉连接

当只需单向的数据传输时,可以只接一根通信线

当电平标准不一致时,需要加电平转换芯片

1.3 电平标准

电平标准是数据1和数据0的表达方式,是传输线缆中人为规定的电压与数据的对应关系,串口常用的电平标准有如下三种;

TTL电平:+3.3V+5V表示10V表示0

RS232电平:-3~-15V表示1+3~+15V表示0

RS485电平:两线压差+2~+6V表示1-2~-6V表示0(差分信号)

1.4 串口参数及时序

波特率:串口通信的速率(Band、比特率)

波特率是1000bps,表示1m发送1000位,每一位的时间就是1ms

起始位:标志一个数据帧的开始,固定为低电平

串口的空闲状态是高电平,打破高电平

数据位:数据帧的有效载荷,1为高电平,0为低电平,低位先行

校验位:用于数据验证,根据数据位计算得来(奇偶校验)

停止位:用于数据帧间隔,固定为高电平

发送0xf的电平

串口中,每一行字节都装在一个数据帧里,每个数据帧由起始位、数据位、停止位组成的;第二张图多了校验位。

1.5 串口时序

发送0x55,无校验,波特率是9600,一位的时间是1/9600 = 104us

低位先行(0101 0101)-》(1010 1010)

发送0xAA,无校验,波特率是9600,一位的时间是1/9600 = 104us

低位先行(1010 1010)-》(0101 0101)

下面同理

发送0x55,无校验,波特率是4800,一位的时间是1/4800 = 208us

低位先行(0101 0101)-》(1010 1010)

发送0x55,加了偶校验,波特率是4800,一位的时间是1/4800 = 208us

低位先行(0101 0101)-》(1010 1010),不用增加1

停止位也是可以设置的

上图的停止位是一位,下图的停止位是两位。

2 USART简介

USART(Universal Synchronous/Asynchronous Receiver/Transmitter通用同步/异步收发器

USART是STM32内部集成的硬件外设,可根据数据寄存器的一个字节数据自动生成数据帧时序,从TX引脚发送出去,也可自动接收RX引脚的数据帧时序,拼接为一个字节数据,存放在数据寄存器里

自带波特率发生器,最高达4.5Mbits/s

可配置数据位长度(8/9)、停止位长度(0.5/1/1.5/2

可选校验位(无校验/奇校验/偶校验)

支持同步模式、硬件流控制、DMA、智能卡、IrDALIN

STM32F103C8T6 USART资源: USART1(APB2) USART2(APB1) USART3(APB1)

2.1 USART框图

先忽略寄存器,看引脚部分。左上角有TX和RX,就是发送和接收引脚,后面几个暂时不用管。

右上角是发送数据寄存器和接收数据寄存器,这两个寄存器占用同一个地址。

TDR是只写的,数据写到TDR中;RDR是只读的,数据从RDR读出。

发送移位寄存器的作用是:把一个字节的数据一位一位地移出去,正好对应串口协议的波形数据位。

工作方式:例如某时刻给TDR写入0x55这个数据,在寄存器里存储是0101 0101,此时硬件检测写入了数据,就会检查当前移位寄存器是不是有数据正在移位,如果没有,这个0101 0101就会立刻全部移动到发送移位寄存器,准备发送;当数据从TDR移动到移位寄存器时,会置一个标志位TXE,发送寄存器空,检查这个标志位如果置1了,就可以在TDR写入下一个数据了。当TXE置1时,数据其实没有发送出去,只要数据从TDR转移到发送移位寄存器了,TXE就会置1,就可以重新写入数据了。

然后发送移位寄存器就会在下面这里的发生控制器的驱动下,向右移位,然后一位一位的把数据输出到TX引脚,这里实现向右移位的,所以正好和串口通信规定的低位先行是一致的。当数据移位完成后,新的数据就会再次自动的从TDR转移到发送移位寄存器里来;如果当前移位还没有完成,TDR的数据就会进行等待,一旦移位完成,就会立刻转移过来。有了TDR和移位寄存器的双重缓存,可以保证连续发送数据的时候,数据帧之间不会有空闲。简单来说,数据一旦从TDR转移到移位寄存器了,不管有没有完成,就立刻把下一个数据放在TDR等着,一旦移完了,新的数据就会立刻跟上。

接收端类似的。数据从RX引脚通向接收移位寄存器,在接收器控制驱动下,一位一位的读取RX电平,先放在最高位,然后向右移,移位8次之后,就能接收一个字节了,低位先行,所以接收移位寄存器是从高位往低位这个方向移动的,之后当一个字节移位完成后,这一个字节的数据就会整体的一下子转移到接收数据移位寄存器RDR里,在转移的过程中也会置一个标志位RXNE(TX Not Empty,接收数据寄存器非空),当检测到RXNE置1后,就可以把数据读走了,同样,这里也是两个寄存器进行缓存,当数据从移位寄存器转移到RDR时,就可以直接接收下一位帧数据了,这就是USART的整个工作流程。

下面是发送器控制,用来控制发送移位寄存器工作的,接收器控制是控制接收移位寄存器工作的。

左边有硬件数据流控,如果发送设备发送的太快,接收设备来不及处理,就会出现数据覆盖丢失的现象,有了流控,可以避免这个问题。两个引脚,nRTS和nCTS,nRTS是请求发送,是输出脚(能不能接收);nCTS是清除发送,是输入脚(接收信号),n是低电平有效。(TX和CTS是一对,RX和RTX是一对)。

右边是用于产生同步的时钟信号。

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

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

相关文章

基于SSM的高校疫情管理系统设计与实现论文

摘 要 当下疫情不容松懈,此次新冠肺炎疫情是传播速度最快、感染范围最广、防控难度最大的一次重大突发公共卫生事件,疫情防控尤为重要,传统的基于纸质文本的疫情信息管理模式,效率低,无法满足管理需求,所以…

node-sass@4.14.1 postinstall: `node scripts/build.js`

遇到一个前端项目安装node-sass依赖的问题:node-sass4.14.1 postinstall: node scripts/build.js 提供一个解决思路: 1、把package.json中node-sass这一行删掉 2、Terminal中执行 npm i node-sass -D 重新安装 3、package.json中会新增一个匹配当前n…

椋鸟C语言笔记#26:数据在内存中的存储(大小端字节序)、浮点数的存储(IEEE754)

萌新的学习笔记,写错了恳请斧正。 目录 大小端字节序 什么是大小端 写一个判断大小端的程序 浮点数在内存中的存储(IEEE 754规则) 引入 存储规则解释 读取规则解释 1.阶码不全为0或全为1(规格化数) 2.阶码全为…

代码随想录27期|Python|Day15|二叉树|层序遍历|对称二叉树|翻转二叉树

本文图片来源:代码随想录 层序遍历(图论中的广度优先遍历) 这一部分有10道题,全部可以套用相同的层序遍历方法,但是需要在每一层进行处理或者修改。 102. 二叉树的层序遍历 - 力扣(LeetCode) 层…

root登录提示:Access denied

一、问题: 在使用xshell工具用root账号登录服务器时提示Access denied,拒绝访问,SSH服务器拒绝了密码,但用其它用户又可以连接. 二、原因 是因为sshd的设置不允许root用户用密码远程登录的问题 三、解决办法 使用可以登录的账…

Parade Series - Message Interaction

if (true) {Swal.fire("节目发布", "发布完毕", "success");event.preventDefault(); } if (false) {Swal.fire("节目发布", "发布失败", "error");event.preventDefault(); }if (true) {for (var i 0; i < b…

Matlab论文插图绘制模板第130期—函数曲面图

在之前的文章中&#xff0c;分享了Matlab函数折线图的绘制模板&#xff1a; 函数三维折线图&#xff1a; 函数网格曲面图&#xff1a; 进一步&#xff0c;再来分享一下函数曲面图。 先来看一下成品效果&#xff1a; 特别提示&#xff1a;本期内容『数据代码』已上传资源群中&a…

DBCA创建RAC的过程截图

以下错误是由于配置的内存较大&#xff0c;而大页&#xff08;HugePage&#xff09;配置较小导致&#xff0c;调整大页后就好了。

Luminar Neo:超强AI图像编辑器,助力你轻松创作完美照片!

如果你是一位热爱摄影和图像编辑的人&#xff0c;那么我相信你一定会喜欢 Luminar Neo&#xff08;超强AI图像编辑器&#xff09;&#xff01;不仅仅是一款普通的图像编辑软件&#xff0c;Luminar Neo融合了人工智能技术&#xff0c;让你在编辑照片时拥有更多可能性和创意。 L…

Python小程序 - 表格数值统计

题设&#xff1a;Excel表格中&#xff0c;计算如下图所示不同颜色&#xff08;蓝、黄、桔&#xff09;单元格值&#xff1a;各颜色填涂的单元格值的总和条件&#xff1a; - Excle表格中 - 分色标记&#xff0c;单元格有值 - 开始列&#xff08;当前为D&#xff09;&#xff0c;…

基于SSM的咖啡销售系统vue论文

摘 要 现代社会是计算机技术普遍发展与应用的社会&#xff0c;甚至无网不成行&#xff0c;由此可见信息网络已经在商家活动或者人们生活中占据非常重要的地位&#xff0c;成为各行业不可割舍的重要组成。而随着网络地位的越来越突出&#xff0c;网络平台已经超越电视、报纸等传…

记一次clickhouse启动报错

clickhouse一次排错 clickhouse启动报错 报错&#xff1a; Application: Code: 210. DB::Exception: Listen [::]:8123 failed: Poco::Exception. Code: 1000, e.code() 0, DNS error: EAI: Address family for hostname not supported (version 23.3.1.2823 (official bui…

新零售ERP软件功能有哪些?新零售ERP系统哪个操作简单

新零售企业通常存在多仓库、多营销渠道、多业务模式、价格策略灵活、供应链复杂等情况&#xff0c;如何实现配送、财务、客户、订单、仓储等业务数据一体化和智能化管理&#xff0c;是不少新零售企业需要解决的难点。 随着新零售企业数量不断增多&#xff0c;行业之间的竞争也…

【Python必做100题】之第十四题(反向输出四位数)

题目&#xff1a;编写程序&#xff1a;输入一个四位整数&#xff0c;反向输出对应的四位数 思路&#xff1a;将整数转化为字符串类型&#xff0c;利用字符串的切片进行逆转输出 代码如下&#xff1a; #编写程序&#xff1a;输入一个四位整数&#xff0c;反向输出对应的四位数…

小间距LED显示屏在会议室的应用

LED显示屏作为自发光显示设备&#xff0c;在其高亮度、远观距离、高对比度和清晰度等特点的推动下&#xff0c;已经成为不可或缺的显示设备之一。随着LED显示屏厂家和整个产业链对产品的不断完善&#xff0c;小间距LED显示屏正逐渐成为会议室中的首选。那么&#xff0c;什么是细…

【深度学习】强化学习(三)强化学习的目标函数

文章目录 一、强化学习问题1、交互的对象2、强化学习的基本要素3、策略&#xff08;Policy&#xff09;4、马尔可夫决策过程5、强化学习的目标函数1. 总回报&#xff08;Return&#xff09;2. 折扣回报&#xff08;Discounted Return&#xff09;a. 折扣率b. 折扣回报的定义 3.…

文章解读与仿真程序复现思路——电网技术EI\CSCD\北大核心《基于乐观行动-评判深度强化学习的含氢综合能源系统低碳经济调度》

这个标题涉及到基于乐观行动的深度强化学习在含氢综合能源系统低碳经济调度方面的评判。让我们逐步解读&#xff1a; 基于乐观行动&#xff08;Optimistic Action&#xff09;&#xff1a; 可能指的是在决策或行动中采取积极、乐观的策略&#xff0c;即在不确定性环境下&#x…

高效排队,紧急响应:RabbitMQ Priority Queue全面指南【RabbitMQ 九】

欢迎来到我的博客&#xff0c;代码的世界里&#xff0c;每一行都是一个故事 高效排队&#xff0c;紧急响应&#xff1a;RabbitMQ Priority Queue全面指南 引言前言第一&#xff1a;初识RabbitMQ Priority Queue插件插件的背景和目的&#xff1a;为什么需要消息优先级&#xff1…

C++ 指针基础

指针的定义 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h>int main() {int a 10;printf("%p\n", &a); // &a 表示取&#xff08;a&#xff09;的地址 000000842FD9FB64// 存放指针&#xff08;地址&#xff09;的变量就是指针变量&#xff0c…

系统运行占用过高

1、CPU过高的问题排查 示例代码&#xff1a; public class Test { static class MyThread extends Thread { public void run() { // 死循环&#xff0c;消耗CPU int i 0; while (true) { i; } } } public static void main(String args[]) throws InterruptedException { ne…