【嵌入式】常用串口协议与转换芯片详解
文章目录
- 0 前言
- 1 一个通信的协议的组成
- 2 常用协议名词解释
- 2.1 UART
- 2.2 RS-232
- 2.3 RS-485
- 2.4 RS-422
- 3 常用的芯片
- 3.1 MAX232
- 3.2 CP2102
- 3.3 CH340
- 3.4 FT232
0 前言
最近有点想研究USB协议,正好也看到有评论说对如何选择USB转串口模块有些疑惑,其实我也一直很想写一篇关于串口的总结式的文章,借此契机来完善一下。
1 一个通信的协议的组成
所谓通信协议,顾名思义,其本质就是一个协议,即一个约定,大家约定好通信的一些标准,这样大家就能根据这个标准来设计并生产产品,而避免了A产品不兼容B这样的情况发生。
那不妨先想一下,一个通信协议需要规定哪些内容呢?
一般来说,主要包括三个方面:
- 物理属性 主要是约定插头或接口的外在特性。包括这个插头长啥样(物理形状),有几个引脚(引脚定义)等等。
- 逻辑属性 逻辑属性主要是约定这个协议传输数据时的时序。因为在实际传输数据过程中,并不是直接把需要传输的数据依次传输的,这样接收端就不知道从哪里开始接收,数据传输就会错乱,因此往往是把数据切分为小块然后加上一些固定的字符,组成“一帧”,再传输,同样接收端也按照约定好的帧格式来进行解析。这样数据传输才能有序进行。
- 电气属性 在常见的串行数据传输协议中,都是传输数字信号,即用0 和 1来表示需要传输的数据,因此就需要明确多少电压代表0,多少电压代表1。
以下的内容也将按照上述思路来进行展开。
最后,再简单解释一些基本名词的概念:
- 单工:指信息传输是单向的,只能由A到B,不能B到A
- 双工:信息传输是双向的,A B之间可以交互信息
- 半双工:首先信息传输是双向的,但不能同时进行,即要么A给B传,要么B给A传,二者不能同时进行。
- 全双工:不仅信息传输是双向的,还可以同时进行。
2 常用协议名词解释
2.1 UART
对于玩单片机的同学来说,UART可能是接触的最早的串行通信协议了,基本每个单片机都有TXD,RXD两个引脚,此即所谓的Universal Asynchronous Receiver/Transmitter,异步串行通信。
- 物理属性:接口方面一般没什么要求,可以根据自己的需求自定义,但一般来说是三根线:RXD,TXD,GND,有时会加上电源信号VCC。
- 逻辑属性:即数据传输时的时序,这个可能是我们最关注的信息了。也是代码编写的主要内容体现:设置波特率、设置几位数据位,是否有奇偶校验等,即所谓的配置串口。
- 电气属性:采用正逻辑电平,即5V/3.3V为1;0V为0。这即是所谓的TTL电平,所以一般来说,单片机串口也叫TTL。
实际上现在大多数单片机使用的都是CMOS电路,电平容限比TTL要大一些,但由于TTL出现较早,目前仍然把这种电平称为TTL电平。
总结:
UART没有规定接口的具体样式,只是规定了引脚,所以在实际使用中比较灵活。但是引脚的电平要注意和单片机的电源保持一致,要注意区分3.3V和5V。UART是单片机中的基础外设,一般称之为串口,通过USB转TTL模块可以实现单片机与上位机之间的通讯。
2.2 RS-232
RS-232其实是出现比较早且应用较为广泛的标准。由美国电子工业协会(Electronic Industries Association,EIA)联合多家公司于1970年制定,目前最新的标准是RS232C(前面是A和B)。所谓RS,即Recommended Standard,推荐标准,232为代号。
- 物理属性:RS232规定了25根线,但其实常用的只有9根线(另外16根线包括:①9根线电流环信号,目前很少设备使用这些引脚;②6个空引脚;③一个保护地信号),这也是为什么目前很多RS232的接口都是DB9,而很少见到DB25的插头。DB9插头如下图所示。
形状和VGA接口很像,但只有9个针脚。这9个针脚定义如下所示
简写符 | DTE25芯(公) | DCE25芯(母) | DTE9芯(公) | DCE9芯(母) | 信号功能解释 |
---|---|---|---|---|---|
TXD | 2 | 3 | 3 | 2 | 发送数据 Transmit Data |
RXD | 3 | 2 | 2 | 3 | 接收数据 Receive Data |
GND | 7 | 7 | 5 | 5 | 信号地 Ground |
RTS | 4 | 5 | 7 | 8 | 请求发送 Require to Send |
CTS | 5 | 4 | 8 | 7 | 清除请求 Clear to Send |
DSR | 6 | 20 | 6 | 4 | 数据装置就绪 Data Set Ready |
DCD | 8 | 8 | 1 | 1 | 接收线信号检测 Data Carry Detected |
DTR | 20 | 6 | 4 | 6 | 数据终端准备好 Data Terminal Ready |
RI | 22 | 22 | 9 | 9 | 振铃指示 |
其中,前面三根线为必须的线,后面6根线其实都是流控信号,在实际使用时其实不一定会使用。
- 逻辑属性:值得一提的是,RS232的时序其实和上面提到的UART是一样的,也需要设置波特率、数据位、校验位、停止位等。但是需要注意的是,RS232波特率设置一般不超过19200,因为RS232传输的上限为20kbps。
- 电气属性:RS-232采用负逻辑电平,逻辑1:-15V ~ -3V 逻辑0:+3V ~ +15V
总结
RS-232是一种全双工通信方式,时序和UART相同,只是电气属性存在差异。此外,它只能实现单点通信,且最大通信速率为20kbps,最大通信距离为15m。
2.3 RS-485
RS-485相比于RS-232最大的特点就是传输距离更远,信号更加稳定,因为它的基于差分信号进行传输的,传输时,只看两个引脚之间的电压之差,从而来判断是逻辑0还是逻辑1.
RS-485相比于RS-232协议,通信距离更远,可以达到4000英尺(约1219米),最高传输速率可以达到10Mbps(40英寸内,约12.2米)
2.4 RS-422
- 物理属性:
- 逻辑属性:
- 电气属性:
总结
3 常用的芯片
由于目前很多电脑都不再配备老式的RS-232和RS-485等串口,主要以USB为主流,所以为了实现设备与普通计算机之间的通讯,往往需要使用一些转换成USB协议的芯片,这里主要列举一些并阐述其作用。
3.1 MAX232
3.2 CP2102
3.3 CH340
3.4 FT232
相关文章:

【嵌入式】常用串口协议与转换芯片详解
文章目录 0 前言1 一个通信的协议的组成2 常用协议名词解释2.1 UART2.2 RS-2322.3 RS-4852.4 RS-422 3 常用的芯片3.1 MAX2323.2 CP21023.3 CH3403.4 FT232 0 前言 最近有点想研究USB协议,正好也看到有评论说对如何选择USB转串口模块有些疑惑,其实我也一…...
缓存与数据库双写一致性问题解决方案
其实如果使用缓存,就会出现缓存和数据库的不一致问题,关键在于我们可以接受不一致的时间是多少,根据不同的需求采取不同的实现方案。 第一种:先更新数据库后更新缓存 做法简单,但是并发写情况下,会出现数…...
Java中的transient关键字是什么意思?
Java中的transient关键字是什么意思? 在Java中,transient 是一个关键字,用于修饰实例变量(成员变量)。当一个实例变量被声明为transient 时,它的值不会被持久化(即不会被序列化)。 …...

内存溢出和内存泄漏
内存溢出和内存泄漏 内存溢出 内存溢出相对于内存泄漏来说,尽管更容易被理解,但是同样的,内存溢出也是引发程序崩溃的罪魁祸首之一。由于GC一直在发展,所以一般情况下,除非应用程序占用的内存增长速度非常快…...

Java数组:没错,不装了我就是书架。
👑专栏内容:Java⛪个人主页:子夜的星的主页💕座右铭:前路未远,步履不停 目录 一、数组的概念1、什么是数组?2、数组的创建3、数组的初始化Ⅰ、动态初始化Ⅱ、静态初始化 二、数组的使用1、数组中…...

轻量级接口自动化测试框架
大致思路: jmeter完成接口脚本,Ant完成脚本执行并收集结果生成报告,最后利用jenkins完成脚本的自动集成运行. 环境安装: 1.jdk1.7 配置环境变量(参考前面的分页) 2.jmeter解压到本地,ant解压到本地 3.Ant解压到本地,并配置环境变量 ANT_HOME:D:\jmeter\apache-ant-1.9.6 P…...

.some方法、vh、多列布局、DNS域名解析过程、空页面文字内容渲染
nodeEndTime.some((time) > !!time) 这个方法主要用来判断nodeEndTime这个数组中是否有至少一个非假值的元素。它会遍历 nodeEndTime 数组中的每个元素,如果至少有一个元素是真值(不是 null、undefined、0、false 或空字符串等假值&#x…...

Eclipse iceoryx™ - 真正的零拷贝进程间通信
1 序言 通过一个快速的背景教程,介绍项目范围和安装所需的所有内容以及第一个运行示例。 首先:什么是冰羚? iceoryx是一个用于各种操作系统的进程间通信(IPC)中间件(目前我们支持Linux、macOS、QNX、FreeBS…...
【C++】面向对象编程(二)面向对象的编程思维:virtual虚拟调用、继承、protected成员、派生类与基类
默认情形下,成员函数的解析都是编译时静态进行。如果要让成员函数的解析在程序运行时动态进行,需要在成员函数的声明前加上关键字virtual: //LibMat声明表示,其析构函数和print()函数皆为虚函数 class LibMat{ public:LibMat(){c…...
【古谷彻】算法模板(更新ing···)
目录 一、数学 1、逆元 (一)费马小定理/欧拉定理(快速幂) 2、组合数 (1)求组合数C(n,m) 方法一:阶乘+逆元+快速幂求组合数 方法二:记忆化搜索 方法三:递推公式 (2)组合数求概率 3、高精度sqrt (1)二分法 (2)递加递减 4、快速幂 5、欧拉函数 方法一:…...

Day-06 基于 Docker 安装 Nginx 镜像
1.去官方公有仓库查询nginx镜像 docker search nginx 2.拉取该镜像 docker pull nginx 3. 启动镜像,使用nginx服务,代理本机8080端口(测试是不是好使) docker run -d -p 8080:80 --name nginx-8080 nginx docker ps curl 127.0.0.1:8080...

k8s集群-7 service
工作负载的应用是如何暴露出去的 解决访问问题 Service可以看作是一组提供相同服务的Pod对外的访问接口。借助Service,应用可以方便地实现服务发现和负载均衡。 service默认只支持4层负载均衡能力,没有7层功能。(可以通过Ingress实现) service的类型: C…...
JS进阶-防抖和节流
防抖(debounce) 单位时间内,频繁触发事件,只执行最后一次。 例子:王者荣耀回城,只要被打断就需要重新来 使用场景: 1)搜索框搜索输入。只需用户最后一次输入完,再发送…...

踩坑日记 uniapp 底部 tabber遮挡住购物车结算
tabbar 被购物车结算遮挡 在小程序上tabbar没有将固定栏遮挡,如果直接调高,浏览器H5页面是对了,但在小程序上面离底部的定位就太高了 原代码 // 底部结算样式.shop-foot {border-top: 2rpx solid #F7F7F7;background-color: #FFF;position: …...

【MySQL】表的约束(一)
文章目录 为什么要有约束一. 空属性二. 默认值三. 列描述四. zerofill结束语 为什么要有约束 数据库是用来存放数据的,所以其需要保证数据的完整性和可靠性 数据类型也算是一种约束,比如,整型的数据无法插入字符型。 通过约束,让…...

Excel宏管理库存清单
1. 开启宏: - 打开 Excel - 选择 “文件” > “选项” > “自定义功能区” > “开发工具” ,将其添加到功能区。 - 返回Excel界面,点击 “开发工具” 选项卡。 2.准备你的库存清单: - 在一个新的工作表中创建你的库存清单。…...
C语言练习百题之排序算法
题目:C语言实现排序算法 冒泡排序 思路: 依次比较相邻的元素,如果顺序不对则交换,直到整个数组有序。 实现代码: #include <stdio.h>void bubbleSort(int arr[], int n) {for (int i 0; i < n - 1; i) {for (int j…...

通过ElementUi在Vue搭建的项目中实现CRUD
🏅我是默,一个在CSDN分享笔记的博主。📚📚 🌟在这里,我要推荐给大家我的专栏《Vue》。🎯🎯 🚀无论你是编程小白,还是有一定基础的程序员,这个专栏…...
【CSS如何进行圣杯布局】
圣杯布局是一种经典的三栏布局,其中中间的主栏宽度自适应,两侧的边栏宽度固定。实现圣杯布局可以使用CSS中的浮动、定位、负边距等属性。 以下是一种实现圣杯布局的方法: HTML结构: <div class"container"><…...
flex 实现的圣杯布局
关键点 通过 margin-left 与 left 属性将左右两列放置到准确的位置; 父元素需要设置 padding; margin-left 取值为百分比时,是以其父元素的宽度为基准的;和双飞翼不同的地方 圣杯布局的的左中右三列容器没有多余子容器存在,通过控制父元素的 padding 空出左右两列的宽度。…...
web vue 项目 Docker化部署
Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段: 构建阶段(Build Stage):…...

解决Ubuntu22.04 VMware失败的问题 ubuntu入门之二十八
现象1 打开VMware失败 Ubuntu升级之后打开VMware上报需要安装vmmon和vmnet,点击确认后如下提示 最终上报fail 解决方法 内核升级导致,需要在新内核下重新下载编译安装 查看版本 $ vmware -v VMware Workstation 17.5.1 build-23298084$ lsb_release…...

华硕a豆14 Air香氛版,美学与科技的馨香融合
在快节奏的现代生活中,我们渴望一个能激发创想、愉悦感官的工作与生活伙伴,它不仅是冰冷的科技工具,更能触动我们内心深处的细腻情感。正是在这样的期许下,华硕a豆14 Air香氛版翩然而至,它以一种前所未有的方式&#x…...

Python基于历史模拟方法实现投资组合风险管理的VaR与ES模型项目实战
说明:这是一个机器学习实战项目(附带数据代码文档),如需数据代码文档可以直接到文章最后关注获取。 1.项目背景 在金融市场日益复杂和波动加剧的背景下,风险管理成为金融机构和个人投资者关注的核心议题之一。VaR&…...

【电力电子】基于STM32F103C8T6单片机双极性SPWM逆变(硬件篇)
本项目是基于 STM32F103C8T6 微控制器的 SPWM(正弦脉宽调制)电源模块,能够生成可调频率和幅值的正弦波交流电源输出。该项目适用于逆变器、UPS电源、变频器等应用场景。 供电电源 输入电压采集 上图为本设计的电源电路,图中 D1 为二极管, 其目的是防止正负极电源反接, …...
CSS | transition 和 transform的用处和区别
省流总结: transform用于变换/变形,transition是动画控制器 transform 用来对元素进行变形,常见的操作如下,它是立即生效的样式变形属性。 旋转 rotate(角度deg)、平移 translateX(像素px)、缩放 scale(倍数)、倾斜 skewX(角度…...
多模态图像修复系统:基于深度学习的图片修复实现
多模态图像修复系统:基于深度学习的图片修复实现 1. 系统概述 本系统使用多模态大模型(Stable Diffusion Inpainting)实现图像修复功能,结合文本描述和图片输入,对指定区域进行内容修复。系统包含完整的数据处理、模型训练、推理部署流程。 import torch import numpy …...
在RK3588上搭建ROS1环境:创建节点与数据可视化实战指南
在RK3588上搭建ROS1环境:创建节点与数据可视化实战指南 背景介绍完整操作步骤1. 创建Docker容器环境2. 验证GUI显示功能3. 安装ROS Noetic4. 配置环境变量5. 创建ROS节点(小球运动模拟)6. 配置RVIZ默认视图7. 创建启动脚本8. 运行可视化系统效果展示与交互技术解析ROS节点通…...

归并排序:分治思想的高效排序
目录 基本原理 流程图解 实现方法 递归实现 非递归实现 演示过程 时间复杂度 基本原理 归并排序(Merge Sort)是一种基于分治思想的排序算法,由约翰冯诺伊曼在1945年提出。其核心思想包括: 分割(Divide):将待排序数组递归地分成两个子…...
深度解析:etcd 在 Milvus 向量数据库中的关键作用
目录 🚀 深度解析:etcd 在 Milvus 向量数据库中的关键作用 💡 什么是 etcd? 🧠 Milvus 架构简介 📦 etcd 在 Milvus 中的核心作用 🔧 实际工作流程示意 ⚠️ 如果 etcd 出现问题会怎样&am…...