一文读懂串口(波形分析、起始位、数据位、停止位、空闲位)

2023-11-03 12:40

本文主要是介绍一文读懂串口(波形分析、起始位、数据位、停止位、空闲位),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

串口

    • 一、串口(串行接口)
    • 二、异步串口(以下统称串口)
    • 三、重要参数
      • 1、波特率
      • 2、报文格式
        • 2.1、起始位
        • 2.2、数据位
        • 2.3、奇偶校验位
        • 2.4、停止位
        • 2.5、空闲位
    • 四、波形
      • 1、具体连接
      • 2、波形分析
        • 2.1 发送1报文
        • 2.2 发送65报文
    • 五、总结

本文使用 STM32F407ZGT6单片机基于标准库进行测试

一、串口(串行接口)

概念: 串行接口 (英文:Serial Interface) 是指数据一位一位地顺序传送,一条信息的各位数据被逐位按顺序传送的通讯方式称为串行通讯。
特点: 串行通讯的特点是:数据位的传送,按位顺序进行,最少只需一根传输线即可完成;成本低但传送速度慢。串行通讯的距离可以从几米到几千米。
优点: 通信线路简单,只要一对传输线就可以实现双向通信,可以直接利用电话线作为传输线,从而大大降低了成本,特别适用于远距离通信,但传送速度较慢。

分类: 串口分为同步串行接口和异步串行接口

  • 同步串行接口(英文:SynchronousSerialInterface,SSI),即通信双方共用一个时钟,是一种常用的工业用通信接口。
  • 异步串行接口(英文:Universal Asynchronous Receiver/Transmitter, UART),通信双方通过使用相同的波特率来实现同步,采用固定的通信格式,数据以相同的帧格式进行传送,这里我们主要讨论异步串行接口。

二、异步串口(以下统称串口)

串口有TTL和RS232两种电平,它们的具体区别是:

电平TTLRS232
输出低电平Lo <= 0.8V+3V <= Lo <= +15V
输出高电平Ho >= 2.4V-15V <= Ho <= -3V
输入低电平Li <= 1.2V+3V <= Li <= +15V
输入高电平Hi >= 2.0V-15V <= Hi <= -3V

三、重要参数

1、波特率

串口通信最重要的是波特率,它实现了通信双方的时序同步。
波特(Baud)即调制速率,指的是有效数据讯号调制载波的速率,即单位时间内载波调制状态变化的次数。
波特率表示每秒钟传送的码元符号的个数,它是对符号传输速率的一种度量,它用单位时间内载波调制状态改变的次数来表示,1波特即指每秒传输1个符号。常用的波特率为:115200 、9600。

2、报文格式

串口的报文数据由:
起始位(1bit)+ 数据位(5~8bit)+ 奇偶校验位(1bit)+ 停止位(1~1.5bit)

2.1、起始位

在发送有效数据前,无需配置,会自动产生1bit 逻辑“0”的低电平的起始位,表示串口数据传输开始,之后开始发送有效数据。

2.2、数据位

数据位,决定了通信过程中传输的有效数据位数,数据位通常有5、6、7 、8 bit,需要根据需要进行相应的配置,这里我选择8位字长。还需要注意的是有效数据在报文中的存放顺序是以LSB还是以MSB进行存放,这里我的是LSB,在这里插入图片描述

2.3、奇偶校验位

奇偶校验位,因为在通信过程中易受到外部干扰而导致数据出现偏差,所以在有效数据之后增加了校验位来解决这个问题,校验方式需要配置,校验方式有奇校验、偶校验、0校验和1校验

  • 奇校验要求有效数据和校验位中“1”的个数为奇数;
  • 偶校验则要求有效数据和校验位中“1”的个数为偶数;
  • 0校验位则是校验位始终为0,在收到报文后,检测校验位是否为0;
  • 1校验则是校验位始终为1,在收到报文后,检测校验位是否为1;

0校验和1校验过于简陋,不建议使用,这里我选择不使用奇偶校验。在这里插入图片描述

2.4、停止位

停止位,停止位是一帧数据结束的标志,可以是1bit、1.5bit或者2bit逻辑“1” 高电平需要根据自己需求配置,每一个设备都有自己的时钟,在传输过程中可能出现了小小的不同步,停止位不仅仅表示传输的结束,并且提供了校正时钟同步的机会。这里我选择1bit停止位。在这里插入图片描述

2.5、空闲位

空闲位不算是串口报文内的数据, 它是发送完一组报文后,总线会自动将电平拉高,产生1bit 逻辑“1”空闲位

四、波形

1、具体连接

调节示波器触发方式为上升沿触发后,将程序烧入开发板,连接板子Tx端(PA)与GND 进行测试。
在这里插入图片描述
在这里插入图片描述

2、波形分析

以下串口配置我选择了

  • 8bit 的数据位
  • 无奇偶校验位
  • 1bit 的停止位
2.1 发送1报文

在这里插入图片描述

  • 首先是1bit 的起始位,则报文为: 0;
  • 发送1, 8bit有效数据即为: 0000 0001 又因为是小端字节序( 英文:little endian)所以在报文中的实际存储为:1000 0000,则此时报文为: 0 1000 0000 ;
  • 没有使用奇偶校验,不使用奇偶校验位,此时报文没有变化为:0 1000 0000;
  • 使用1bit的停止位,则完整数据报文为: 0 1000 0000 1 ;
  • 发送完成后,自动产生1bit的空闲位,具体见下图:

在这里插入图片描述

2.2 发送65报文

在这里插入图片描述

  • 首先是1bit 的起始位,则报文为: 0;
  • 发送65,8bit数据即为:0100 0001, 又因为是小端字节序,所以实际储存为:1000 0010, 则此时报文为: 0 1000 0010;
  • 没有使用奇偶校验,则不使用奇偶校验位,原报文不做变化,此时报文为:0 1000 0010;
  • 使用1bit的停止位,则完整的数据报文为:0 1000 0010 1
  • 发送完成后,自动产生1bit的空闲位,详情见下图:

在这里插入图片描述

五、总结

通过抓取串口波形,对串口的报文格式有了进一步了解,串口报文格式为:

起始位(1bit)+ 数据位(5~8bit)+ 奇偶校验位(1bit)+ 停止位(1~1.5bit)

在发送完成一组报文后,会自动产生1 bit 的空闲位,以便进行下一组数据的传输。

这篇关于一文读懂串口(波形分析、起始位、数据位、停止位、空闲位)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/338246

相关文章

怎样通过分析GC日志来定位Java进程的内存问题

《怎样通过分析GC日志来定位Java进程的内存问题》:本文主要介绍怎样通过分析GC日志来定位Java进程的内存问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、GC 日志基础配置1. 启用详细 GC 日志2. 不同收集器的日志格式二、关键指标与分析维度1.

一文详解Git中分支本地和远程删除的方法

《一文详解Git中分支本地和远程删除的方法》在使用Git进行版本控制的过程中,我们会创建多个分支来进行不同功能的开发,这就容易涉及到如何正确地删除本地分支和远程分支,下面我们就来看看相关的实现方法吧... 目录技术背景实现步骤删除本地分支删除远程www.chinasem.cn分支同步删除信息到其他机器示例步骤

MySQL中的表连接原理分析

《MySQL中的表连接原理分析》:本文主要介绍MySQL中的表连接原理分析,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、背景2、环境3、表连接原理【1】驱动表和被驱动表【2】内连接【3】外连接【4编程】嵌套循环连接【5】join buffer4、总结1、背景

python中Hash使用场景分析

《python中Hash使用场景分析》Python的hash()函数用于获取对象哈希值,常用于字典和集合,不可变类型可哈希,可变类型不可,常见算法包括除法、乘法、平方取中和随机数哈希,各有优缺点,需根... 目录python中的 Hash除法哈希算法乘法哈希算法平方取中法随机数哈希算法小结在Python中,

一文详解Java Stream的sorted自定义排序

《一文详解JavaStream的sorted自定义排序》Javastream中的sorted方法是用于对流中的元素进行排序的方法,它可以接受一个comparator参数,用于指定排序规则,sorte... 目录一、sorted 操作的基础原理二、自定义排序的实现方式1. Comparator 接口的 Lam

Java Stream的distinct去重原理分析

《JavaStream的distinct去重原理分析》Javastream中的distinct方法用于去除流中的重复元素,它返回一个包含过滤后唯一元素的新流,该方法会根据元素的hashcode和eq... 目录一、distinct 的基础用法与核心特性二、distinct 的底层实现原理1. 顺序流中的去重

关于MyISAM和InnoDB对比分析

《关于MyISAM和InnoDB对比分析》:本文主要介绍关于MyISAM和InnoDB对比分析,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录开篇:从交通规则看存储引擎选择理解存储引擎的基本概念技术原理对比1. 事务支持:ACID的守护者2. 锁机制:并发控制的艺

一文深入详解Python的secrets模块

《一文深入详解Python的secrets模块》在构建涉及用户身份认证、权限管理、加密通信等系统时,开发者最不能忽视的一个问题就是“安全性”,Python在3.6版本中引入了专门面向安全用途的secr... 目录引言一、背景与动机:为什么需要 secrets 模块?二、secrets 模块的核心功能1. 基

一文详解MySQL如何设置自动备份任务

《一文详解MySQL如何设置自动备份任务》设置自动备份任务可以确保你的数据库定期备份,防止数据丢失,下面我们就来详细介绍一下如何使用Bash脚本和Cron任务在Linux系统上设置MySQL数据库的自... 目录1. 编写备份脚本1.1 创建并编辑备份脚本1.2 给予脚本执行权限2. 设置 Cron 任务2

一文详解如何在idea中快速搭建一个Spring Boot项目

《一文详解如何在idea中快速搭建一个SpringBoot项目》IntelliJIDEA作为Java开发者的‌首选IDE‌,深度集成SpringBoot支持,可一键生成项目骨架、智能配置依赖,这篇文... 目录前言1、创建项目名称2、勾选需要的依赖3、在setting中检查maven4、编写数据源5、开启热