前言

什么是串口?

串口意思是串行通信接口,与之对应的是并行通信接口。下面具体来看下什么是串行通信和并行通信。

串行通信

串行通信,就是数据是按时间先后顺序一串串发出去的。比如现在要发一个13(对应二进制是1101)的数据,那第一个时钟周期先给一个1,第二个时钟周期给个0,第三个给1,第四个给1。然后当对方这四个时钟周期接收到这4个数据后,再把它还原成原本13的数据,这就完成了一次串行通信。

并行通信

并行通信,就是数据是按空间角度并行发送的。比如现在一样要发一个13(对应二进制是1101)的数据,那如果要在同一时刻发出去,那最少需要有4根数据线,第一根发送数据1,第二根发数据0,第三根数据1,第四根数据1。然后当对方在这个时刻收到这4个数据后,再把它还原成原本13的数据,这就完成了一次并行通信。

串并两者对比

串行通信 并行通信
IO口资源 占用少 占用多
通信效率 效率低 效率高
适合场景 远距离传输 近距离传输

串行通信包括同步串行通信和异步串行通信,同步串行通信有IIC、SPI等这种带同步时钟信号的通信方式,而异步串行通信则是像UART、CAN等这种不带同步时钟信号的。而玩单片机的应该都知道,一般说的串口,都是特指UART这种。

各种串行通信对比

UART CAN SPI IIC
通信方式 全双工 半双工 全双工 半双工
线制 2线制 2线制 3/5线制 2线制

单工:通信双方中,一方固定为发送端,一方则固定为接收端。信息只能沿一个方向传输,使用一根传输线。

半双工:数据传输指数据可以在一个信号载体的两个方向上传输,但是不能同时传输。

全双工:通信允许数据在两个方向上同时传输,它在能力上相当于两个单工通信方式的结合。

通用异步收发传输器-UART

概述

轮到我们的主角登场了,通用异步收发传输器(Universal Asynchronous Receiver/Transmitter),通常称作UART。如上文所说,UART属于异步串行通信的,所以它并没有时钟线,总共就只有收(RX)跟发(TX)两根数据线,两根数据线可独立工作,互不冲突,所以它是可以进行全双工通信的。这时候问题就来了,因为串行通信是把数据分割到不同时间段时进行发送,而此时使用UART通信的双方并没有时钟线进行时钟同步,那怎么知道对方哪个时刻发的是什么数据呢?所以这里要引进一个概念,叫波特率。

波特率

波特(Baud)即调制速率,指的是有效数据讯号调制载波的速率,即单位时间内载波调制状态变化的次数。由于没有用于同步双方通信信号的时钟信号,所以通信时需要双方按照同样的通信速度进行通信。波特率表示的是一秒钟传输的位数。比如波特率9600,就表示1秒钟可以传输9600个位(bit),波特率19200则表示1秒钟可以传输19200个位(bit)。因此波特率越高,表示速度越快。

通信时序

这里分四个部分来讲,分别是起始位,数据位,校验位,停止位。

起始位

总线数据从高拉到低,为一个信号的起始,起始的低电平信号需要持续1个位的时间。

数据位

起始位过后,连续8个位的时间,都是数据位的内容,如果是使用单片机进行编程,这个位数一般是可设的。

校验位

在数据位的最后一位,会带有一个校验位,如果是使用单片机进行编程,这个位可有可无,一般有三个选项:无校验、奇校验和偶校验。

注:在STM32里的UART,如果选用奇校验或偶校验时,会占用数据位的最后一位作为校验位。也就是说如果设置的是8个数据位,那实际数据位只有7个,最后一个位是校验位。但一些工具则是数据位跟校验位完全独立,比如串口调试工具,设置8个数据位,一个奇校验位,则实际数据收发就是8个数据位再加一个校验位。

停止位

在数据传输完后,最后需要从低电平变为高电平来表示一个数据的结束,数据结束后,到下个数据的起始之前,需要有一个位时间的高电平,用来表示停止位数。如果是使用单片机进行编程,停止信号的高电平持续时间可根据设置而定。常用的有1个停止位和2个停止位的设置,当然还有0.5和1.5的停止位时间,根据实际使用来定。

从上面的时序来看,我们可以得到几个基本信息:

1、Uart在空闲时候,一般是保持高电平,这对应STM32单片机里的Uart寄存器中空闲的标志。如果Uart通信总线上一直是保持低电平,则说明此时总线存在异常。

2、当通信总线上出现高电平到低电平的一个下降沿信号后,低电平持续时间达不到一个位的时间,说明此时通信双方的波特率没有对应上,或者通信总线上存在干扰,对应STM32单片机里的Uart寄存器中噪声的标志。

3、常见的可配置项,就是波特率、数据位、校验位、停止位,这在很多串口调试工具里都可以看得到。

工具推荐

串口调试助手sscom,一直在持续更新,目前使用的是5.13.1的版本,比较稳定了。已经集成了很多功能,除串口调试外还可以调试Tcp。

串口监视助手AccessPort,在进行正常的串口数据收发的同时,还可以监视抓取通信的数据,包括对一些串口的操作也可以抓取,对进行上层协议开发或上位机开发调试有很大的帮助。

相关知识

STM32、单片机、Modbus

【知识分享】异步串行收发器Uart(串口)-通信协议详解相关推荐

  1. 基于51的串行通讯原理及协议详解(uart)

    串行与并行通讯方式 并行:控制简单,传输速度快.线多,长距离成本较高且同时接受困难. 串行:将数据字节分成一位一位的行驶在一条传输线上进行传输.如图: 同步与异步串行通讯方式 同步串行通讯方式:同步通 ...

  2. max232c语言,串行口通信(STC89C52+MAX232):串行口通信硬件设计详解

    一. STC89C52与MAX232连接原理图 二. 串行口通信原理 1. 基本通信方式 a. 并行通信 定义: 将数据字节的各位用多条数据线同时进行传送, 每一位数据都需要一条传输线, 还需要一条信 ...

  3. UART串口协议详解

    通用异步收发器(Universal Asynchronous Receiver/Transmitter),通常称作UART,是一种串行.异步.全双工的通信协议,在嵌入式领域应用的非常广泛. UART作 ...

  4. UART 和 USART 的区别 == 通用异步收发传输器 通用同步/异步串行接收/发送器

    UART 通用异步收发传输器(Universal Asynchronous Receiver/Transmitter),通常称作UART,是一种异步收发传输器,是电脑硬件的一部分.它将要传输的资料在串 ...

  5. 同步和串行的区别_[深度思考]·为什么CNN是同步(并行)而RNN是异步(串行)的呢?...

    为什么CNN是同步(并行)而RNN是异步(串行)的呢? 个人主页--> https://xiaosongshine.github.io/ 1.问题引出 CNN与RNN都是采用parameter ...

  6. CAN总线技术 | 物理层02 - CAN总线的异步串行通讯

    文章目录 一.前言 二.如何解决波特率误差带来的通信错误? 三.填充位 一.前言 广州虹科录制的CAN总线技术课程非常不错,建议同学们学习一下.B站的地址:https://www.bilibili.c ...

  7. 异步串行通讯和同步串行通讯对比

    异步串行通讯和同步串行通讯对比 作者:刘洪涛,华清远见嵌入式学院高级讲师,ARM ATC授权培训讲师. 在计算机系统中,CPU和外部通信有两种通信方式:并行通信和串行通信.而按照串行数据的时钟控制方式 ...

  8. 通信协议详解(一):UART串口(协议+数据格式+设计实现)

    uart串口通信协议及verilog实现 文章目录 一.uart串口通信简介 二.串口传输 1.数据协议 2.整体架构 三.串口传输实现 1.发送模块 2.接收模块 四.串口收发仿真 总结 一.uar ...

  9. stm32串口接收不定长数据_基于STM32之UART串口通信协议--接收

    一.前言 1.简介 回顾上一篇UART发送当中,已经讲解了如何实现UART的发送操作了,接下来这一篇将会继续讲解如何实现UART的接收操作. 2.UART简介 嵌入式开发中,UART串口通信协议是我们 ...

最新文章

  1. MySQL · 引擎介绍 · Sphinx源码剖析(三)
  2. python 如何判断一个数为整数?(判断整数,没有小数)(取余)判断整型 isinstance()
  3. 在windows上实现多个java jdk的共存解决办法
  4. 007API网关服务Zuul
  5. android fragment 抽屉,如何从Fragment Android中禁用或隐藏抽屉布局
  6. 互联网做手机 伤国际品牌 救国内品牌
  7. 安卓原生开机动画_安卓开机动画 74款
  8. 间隙锁(Gap Lock)
  9. 敏捷产品计划:愿景,战略和策略
  10. 安卓开发——显示网速
  11. mysql如何创建全文索引_从零开始学习MySQL全文索引
  12. 利用神经网络逼近sin(x)函数
  13. 光滑曲线_高等数学八:(3)曲线积分与路径无关的条件
  14. Bupt桌游馆--共享资源清单
  15. 电子报刊制作软件之比较
  16. 前端--鼠标跟随特效
  17. 【字符串】字符串长度与字节长度
  18. Centos通过yum安装Jenkins
  19. 你管这破玩意叫“小程序”?
  20. 搜狗站群系统需要准备哪些?如何使用搜狗工具实现网站收录

热门文章

  1. 自创文字小游戏《人类末日·丧尸危机》
  2. 什么是传递函数模型?
  3. WebP 支持:超乎你想象
  4. 从git上克隆的vue项目在本地运行步骤
  5. 查oracle的tps,Oracle TPS指标
  6. grep命令的使用;正则;位置锚定
  7. 欧拉函数和莫比乌斯反演(Mobius)
  8. SpringMVC的在线人数统计监听器
  9. PHP连接MySql/SQLServer数据库
  10. 数字微镜器件(DMD)呈现不同灰度(强度)原理的验证实验