STM32——串口通信(总结)

news2024/11/29 2:45:15

文章目录

    • 串行通信概述:
      • 串行通信的基本原理和特点
      • 常见的串行通信标准和协议:
    • 串口硬件接口:
      • 串口接口的特点包括:
      • 串口的物理接口和连接方式。
      • 串口引脚功能和作用。
    • 串口通信参数:
      • 波特率(Baud Rate)的概念和影响。
      • 数据位、停止位和校验位的设置和选择。
      • 数据流控制和硬件握手信号的使用。
    • 串口通信协议:
      • 数据帧的组成和结构。
      • 常见的数据传输格式
    • 串口编程:
    • 串口调试和故障排除:
    • 常见应用场景:
    • 最后的话

串行通信概述:

串行通信的基本原理和特点

串行通信是一种数据传输方式,通过逐位(一位接一位)的方式在发送端和接收端之间传输数据。相比并行通信(同时传输多个位),串行通信只使用单个信道传输数据,因此在物理连接和传输线路上更简单、成本更低。
基本原理:
1.数据传输顺序:串行通信按照固定的顺序逐位传输数据,通常是从最高位到最低位或反之。发送端和接收端需要同步传输的速率和数据位数,以确保正确的数据解析和还原。
2.时钟同步:为了确保发送端和接收端的数据同步,通常会使用时钟信号作为参考。发送端根据时钟信号逐位发送数据,接收端根据时钟信号进行采样和解析。
3.编码方式:为了提高传输的可靠性和抗干扰能力,常使用特定的编码方式对数据进行编码和解码。例如,使用差分编码、奇偶校验、CRC等机制来检测和纠正传输错误。
特点:
1.简单性和成本:相比并行通信,串行通信的物理连接和传输线路更简单,通常只需要一对信号线。这降低了硬件设计和成本。
2.长距离传输:串行通信可以通过适当的传输协议和调制技术(如RS-485、光纤传输)实现长距离的数据传输,适用于远距离通信需求。
3.抗干扰能力:串行通信在单个信道上传输数据,相比并行通信具有更好的抗干扰能力。通过使用差分信号传输、编码方式和校验机制等手段,可以提高数据传输的可靠性。
4.适用于低速率通信:串行通信逐位传输数据,适用于低速率的数据传输需求。它可以满足很多应用场景,如传感器数据采集、控制信号传输等。
5.可扩展性:串行通信可以通过串行总线拓展到多个设备,实现多个设备之间的数据交换。常见的串行总线包括SPI、I2C、CAN等。

总的来说,串行通信是一种简单、成本低、适用于长距离和抗干扰的数据传输方式。它在许多领域中得到广泛应用,如计算机通信、工业自动化、汽车电子等。

常见的串行通信标准和协议:

1.RS-232:RS-232是一种常见的串行通信标准,用于在计算机和外部设备之间进行数据传输。它定义了物理层的电气特性、信号线的连接方式和通信协议。
2.RS-485:RS-485也是一种常见的串行通信标准,用于在多个设备之间进行数据传输。它支持多点通信和差分信号传输,具有更高的抗干扰能力和长距离传输能力。
3.UART:UART(Universal Asynchronous Receiver/Transmitter)是一种通用的异步串行通信接口,用于在计算机和外部设备之间传输数据。它负责串行数据的发送和接收,并处理数据的位数、速率、校验等。
4.SPI(Serial Peripheral Interface):SPI是一种同步串行通信协议,用于在微控制器和外部设备之间进行数据传输。它使用四根信号线(时钟、数据输入、数据输出、片选)来实现高速全双工通信。
5.I2C(Inter-Integrated Circuit):I2C是一种串行通信协议,用于在芯片之间进行数据交换。它使用两根信号线(时钟线和数据线)来传输数据,支持多主机和多从机的通信。
6.Modbus:Modbus是一种通信协议,用于在工业自动化系统中实现设备之间的通信。它支持串行通信(如RS-232、RS-485)和以太网通信,定义了一套数据传输格式和通信规则。
7.CAN(Controller Area Network):CAN是一种广泛应用于汽车和工业领域的串行通信协议。它使用差分信号传输,在多个节点之间实现高速、实时的数据通信。

串口硬件接口:

串口硬件接口是一种用于连接计算机或其他设备与外部设备之间的通信接口。它允许通过串行传输方式在设备之间传输数据。串口接口通常用于连接串口设备,例如串口打印机、调制解调器、传感器、嵌入式系统等。
串口接口通常使用一组称为串行通信线(Serial Communication Lines)的物理线路来传输数据。常见的串口接口标准包括RS-232、RS-485和UART等。
1.RS-232:RS-232是一种常见的串口标准,用于在计算机和外部设备之间进行数据传输。它定义了串口的物理连接和电气特性,包括信号线的连接方式、电平范围和通信协议。RS-232接口通常使用DB-9或DB-25连接器。
2.RS-485:RS-485是一种支持多点通信的串口标准,适用于在多个设备之间进行数据传输。与RS-232相比,RS-485具有更高的抗干扰能力和长距离传输能力。它支持半双工或全双工通信,并使用差分信号传输。
3.UART:UART(Universal Asynchronous Receiver/Transmitter)是一种通用的异步串行通信接口,用于在计算机和外部设备之间传输数据。UART负责串行数据的发送和接收,并处理数据的位数、速率、校验等。UART通常集成在计算机芯片或外部设备中。

串口接口的特点包括:

串行传输:串口接口逐位传输数据,相比并行传输(同时传输多个位),使用的信道和线路更少,简化了物理连接和线路设计。
可靠性:串口接口通常使用较低的数据传输速率,具有较好的抗干扰能力,适用于工业环境和长距离传输。
简单性:串口接口的硬件设计相对简单,成本较低。它广泛应用于嵌入式系统、传感器、工业自动化等领域。
兼容性:许多设备都支持串口接口,使得不同设备可以通过串口进行连接和通信。(不太重要)

串口的物理接口和连接方式。

RS-232:之前的是25针,采用的是DB-25连接,后来改成了DB-9,在投影仪通信上很常见。如图:
在这里插入图片描述
RS-485:其实主机的通信方式仍然是RS-232,但是由于RS-232的通信距离很短,原因是232规定的电压范围在-12~+12v,在传输的过程中会因为电压衰减、噪声干扰导致电压流失,距离太远则不能达到通信时所需的电压差,因此采用485通信方式,其原理就是在232屁股后面加一个RS-232/RS485通信转换器,到接收端再用转换器转换过来,如图所示
在这里插入图片描述
在这里插入图片描述
UART:UART的通信方式一般是D9,通信协议为RS-232,有的为了传输方便也采取USB传输。
在这里插入图片描述
在这里插入图片描述

串口引脚功能和作用。

DB-9和DB-25的引脚功能图
在这里插入图片描述
UART:
RX——接收数据
TX——发送数据
GND——接地

串口通信参数:

波特率(Baud Rate)的概念和影响。

波特率简单来说就是传播速度,每秒间传播的比特数。
其影响就是决定了串口上传播数据的速度以及不同的通信方式都有波特率的兼容性,一般支持多个传输速率,如果主机和从机的传播速率不同,有可能无法收到数据或数据乱码。

数据位、停止位和校验位的设置和选择。

简单来说数据位是每个字符传输时候所需要的位数,一般有5、6、7、8,常用的是8位数据位传输。

停止位就是在数据位后面多那么1、2位,增大数据传输的容错率,《信号论与编码》一书中有提,在数据传输的过程中可能因为某种原因而导致数据的传输错误,例如噪声导致某一位位反转,本来传输的是11100111,结果成11000111,此时有一位发生了反转,在停止位能够及时发现并修正,大大提高了数据传输的容错率。

校验位就是校验用的嘛,不过可以做标记之后详细说,因为校验位的校验方式有很多种:奇校验、偶校验、无校验等。

数据流控制和硬件握手信号的使用。

数据流控制:其实这个大家可以根据自己的理解,简单解释-举个栗子:数据流可以看作是水流,一方放水,一方接水,当接水这边由于某些原因无法按照原来的速率接水或者是无法接水,会给放水的一个信号——数据流控制信号,告诉他我这接不了了。
常用的流控制协议,如XON/XOFF、RTS/CTS、DTR/DSR等。

硬件握手信号:是通过硬件层面的某根线来控制数据流,常见的硬件握手信号包括(可以比对DB-9的线和DB-25的线):
RTS/CTS:用于数据流控制,如上述所述。
DTR/DSR:用于指示数据终端设备(DTE)和数据通信设备(DCE)之间的连接状态。当DTE和DCE都准备好进行通信时,DTR和DSR信号线都处于高电平状态。
CD(Carrier Detect):用于指示DCE设备是否检测到数据调制解调器的载波信号。
硬件握手信号的使用需要硬件支持,并且发送端和接收端之间需要进行正确的线路连接和配置。通过硬件握手信号,发送端和接收端可以进行握手协商,确保数据传输的可靠性和正确性。

串口通信协议:

数据帧的组成和结构。

起始位(Start Bit)
数据位(Data Bits)
校验位(Parity Bits)
停止位(Stop Bits)
奇偶校验位(Odd/Even Parity Bit)

常见的数据传输格式

如ASCII、二进制等。

串口编程:

以个人——空气质量检测仪项目——串口配置——主控芯片为STM32芯片

void USART_Config(void)
{
	GPIO_InitTypeDef GPIO_InitStruct={0};
	USART_InitTypeDef USART_InitStruct={0};
	//开启GPIOA和USART1时钟
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_USART1,ENABLE);
	//配置IO口
	GPIO_InitStruct.GPIO_Mode=GPIO_Mode_AF_PP;//复用推挽输出模式
	GPIO_InitStruct.GPIO_Speed=GPIO_Speed_10MHz;
	GPIO_InitStruct.GPIO_Pin=GPIO_Pin_9;
	GPIO_Init(GPIOA,&GPIO_InitStruct);
	
	GPIO_InitStruct.GPIO_Mode=GPIO_Mode_IN_FLOATING;//浮空输入模式
	GPIO_InitStruct.GPIO_Speed=GPIO_Speed_10MHz;
	GPIO_InitStruct.GPIO_Pin=GPIO_Pin_10;
	GPIO_Init(GPIOA,&GPIO_InitStruct);
	//配制串口
	USART_InitStruct.USART_BaudRate=115200;//波特率
	USART_InitStruct.USART_HardwareFlowControl=USART_HardwareFlowControl_None;//不使用硬件流控制
	USART_InitStruct.USART_Mode=USART_Mode_Rx | USART_Mode_Tx;//同时开启接受和发送
	USART_InitStruct.USART_Parity=USART_Parity_No;//不使用奇偶校验
	USART_InitStruct.USART_StopBits=USART_StopBits_1;//1位停止位
	USART_InitStruct.USART_WordLength=USART_WordLength_8b;//8位字长
	USART_Init(USART1,&USART_InitStruct);
	//使能串口
	USART_Cmd(USART1,ENABLE);
	
	USART_NVICConfig();
}

串口发送字符

//串口发送单个字符
void USART1_SendData(uint8_t data)
{
	while(USART_GetFlagStatus(USART1,USART_FLAG_TC)==RESET);//判断数据是否可以发送
	//USART1->DR=data;//寄存器模式发送
	USART_SendData(USART1,data);//库函数模式发送
}

//串口发送字符串
void USART1_SendStr(uint8_t *data)
{
	while(*data!='\0')
	{
		USART1_SendData(*data);
		data++;
	}
}

串口中断和数据校验就不写啦,不同环境的配置也不一样

串口调试和故障排除:

使用串口调试工具进行数据监控和分析。
常见的串口通信故障和排查方法。
如何处理噪声、干扰和传输错误。

常见应用场景:

串口与外部设备的连接,如传感器、显示器、打印机等。
嵌入式系统中的串口通信应用。
远程控制和监控系统中的串口通信应用。

最后的话

乐,这篇文章托了一周每天打开关上,打开关上的,我真服喽我自个,主要是我对串口通信的认识很少,而串口通信的东西又不单单是一个USART这么简单,所以我就搜罗了很多概念+理解,本文中有参考电子发烧友微信公众号的知识点汇总:https://mp.weixin.qq.com/s/CsNEtUk9SJAtXq_uT2sUKQ,连接在这里大家可以自己看。
另外我写本篇文章的时候居然想起来我大三学期学习的信号论与编码的知识,当时只顾学习,却不能体会到实际运用中的道理,简单来说就是纸上谈兵啦,甚至算不上,因为我都不会用。没想到毕业后居然能够与以前的知识联系起来,所以不要因为你觉得读完一本书没用,读书是为了增长见识的,说不定在某个时刻就能用上

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

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

相关文章

OJ练习第166题——课程表(拓扑排序问题)

课程表 力扣链接:207. 课程表 题目描述 你这个学期必须选修 numCourses 门课程,记为 0 到 numCourses - 1 。 在选修某些课程之前需要一些先修课程。 先修课程按数组 prerequisites 给出,其中 prerequisites[i] [ai, bi] ,表…

source insight keil 中文乱码

1. 乱码的根本原因就是编码的方式太多了,你用这种编码,他用那种编码,就变成鸡同鸭讲了,对牛弹琴就要用牛语,如果全世界只有一种编码方式,就肯定不会有乱码问题,但这是不可能的。keil 设置编码格…

PyQt5安装以及使用

PyQt5安装以及使用 1 简介2 安装方法2.1 pip install PyQt52.2 pip install PyQt5‑5.15.9‑cp37‑cp37m‑win_amd64.whl 3 Qt相关工具介绍4 安装PyQt5-tools5 设置环境变量6 测试 1 简介 开发工具为PyCharm,Anaconda,因为Python安装相关包的方便性&…

sql:SQL优化知识点记录(十五)

(1)MySQL主从复制 我们这里配置一Windows上的MySql做主机,Linux上的MySql做从机,搭建一主一从 测试以下是否能够拼通:从Linux上:167,连接Windows的165 从Windows的165 连接Linux上:…

校园网免认证服务器大增加

这学期搞拐了,服务器整多了,结果没有几个人来消耗带宽,监控图片为证,网速快,线路多 线路展示 # 无为WIFI配置 # 欢迎使用无为WIFI破解软件 # 招收实力代理,定制独立软件,独立代理后台 # clie…

MicroStation中将二维对象投射到三维实体

在三维建模中,偶而会遇到需要将一个2D对象沿Z轴或指定方向投射到一个3D实体,在3D实体表面生成这个2D对象的投影对象。 需要使用的操作命令为: Stencil 2D Elements on 3D Geometry,位于可视化工作流、实用工具栏内。 操作时先后选…

基于Java+SpringBoot+Vue前后端分离火锅店管理系统设计和实现

博主介绍:✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专…

管理类联考——数学——汇总篇——知识点突破——数据分析——计数原理——排列组合——排队

🐟 排队问题常用方法有以下几种: (1)特殊元素优先法、特殊位置优先法; (2)剔除法; (3)相邻问题捆绑法; (4)不相邻问题插空…

从 BBR 失速到带宽探测

看一下 pacing 流失速的成因: 一段时间收不到 ack,丢了 ack 自时钟,cwnd 将耗尽,bbr 虽有 cwnd_gain(上图没有表现),但在该 cwnd_gain 下不依赖 ack 持续坚持发送多久取决于 cwnd_gain 的数值。 bbr 失速的后果在于…

分类预测 | Matlab特征分类预测全家桶(BP/SVM/ELM/RF/LSTM/BiLSTM/GRU/CNN)

分类预测 | Matlab特征分类预测全家桶(BP/SVM/ELM/RF/LSTM/BiLSTM/GRU/CNN) 目录 分类预测 | Matlab特征分类预测全家桶(BP/SVM/ELM/RF/LSTM/BiLSTM/GRU/CNN)预测效果基本介绍程序设计参考资料致谢 预测效果 基本介绍 分类预测 | …

ResNet 09

一、发展 1989年,Yann LeCun提出了一种用反向传导进行更新的卷积神经网络,称为LeNet。 1998年,Yann LeCun提出了一种用反向传导进行更新的卷积神经网络,称为LeNet-5 AlexNet是2012年ISLVRC 2012(ImageNet Large Sca…

计算机组成与设计硬件软件接口学习1

计算机的算术运算 子字并行 (大致浏览)pdf 170页左右 浮点加法不满足结合律: 适用于整型数据类型的并行执行策略并不适用于浮点数据类型 ,原因如上↑

TSN时间敏感网络

目录 时间敏感网络介绍 子协议介绍 时间同步 IEEE802.1AS 调度和流量整形 IEEE802.1Q IEEE802.1Qbv IEEE802.1cr IEEE802.1Qbu IEEE802.1Qch IEEE802.1Qav IEEE802.1Qcc 纠错机制与安全 IEEE802.1Qci IEEE802.1CB IEEE802.1Qca 参考 时间敏感网络介绍 TSN(Tim…

人大金仓分析型数据库备份和恢复(一)

目录 前言 备份和恢复概述 并行备份 非并行备份 需求和限制 前言 定期执行备份能确保在数据损坏或者系统失效发生时能恢复数据或者重建数据库系统。用户还可以使用备份从一个数据库系统迁移数据到另一个数据库系统。 备份和恢复概述 数据库支持并行和非并行的方法来备份和…

监控系统部署prometheus基本功能

wget -c https://github.com/prometheus/prometheus/releases/downloa d/v2.37.1/prometheus-2.37.1.linux-amd64.tar.gz下载必要的组件。 mkdir -p /opt/prometheus创建目录。 tar zxf prometheus-2.37.1.linux-amd64.tar.gz压缩文件解压至当前目录下,cp -far pr…

windows10使用wheel安装tensorflow2.13.0/2.10.0 (保姆级教程)

安装过程 安装虚拟环境安装virtualenv安装满足要求的python版本使用virtualenv创建指定python版本的虚拟环境 安装tensorflow安装tensorflow-docs直接下载使用wheel下载 在VSCode编辑器中使用虚拟环境下的包常见错误 注意: tensorflow 2.10.0是最后一个支持GPU的版本…

JavaSE【 String 类】(2)(

一、字符串的不可变性 1.String本身不可变 字符串修改 注意:尽量避免直接对 String 类型对象进行修改,因为 String 类是不能修改的,所有的修改都会创建新对象,效率 非常低下。 public static void main(String[] args) {/*** S…

AutoCAD Civil 3D中文本地化模板下载及设置

安装AutoCAD Civil3D后默认使用的是其自带的公制模板,其中各种标签、样式均不符合我们国内的标准,因此必须使用本地化地制图模板。参照本文说明完成模板的设置。 模板下载 链接:https://share.weiyun.com/5nhj0Fw 密码:njwxw8 也…

Revit SDK 介绍:NewForm 新建体量

前言 这个例子介绍如何新建体量。 内容 图形生成效果。 用 Extrusion 创建体量 // 创建一个轮廓 ReferenceArray ref_ar new ReferenceArray(); // 创建三条直线,并放入轮廓 Autodesk.Revit.DB.XYZ ptA new Autodesk.Revit.DB.XYZ(10, 10, 0); Autodesk.Rev…

【c++每天一题】 字符串压缩

字符串压缩 时间限制:C/C 1000MS,其他语言 2000MS 内存限制:C/C 128MB,其他语言 256MB 难度:简单 分数:100 OI排行榜得分:12(0.1*分数2*难度) 描述 给定一个字符串,将连续相同的字符…