STM32 —— 串口通讯

什么是串口通讯

串口通讯(Serial Communication)是一种设备间非常常用的串行通讯方式,因为它简单便捷,因此大部分电子设备都支持该通讯方式,其通讯协议可分层为协议层和物理层。物理层规定通信协议中具有机械、电子功能的特性,从而确保原始数据在物理媒体的传播;协议层主要规定通讯逻辑,统一双方的数据打包、解包标准。通俗的讲物理层规定我们用嘴巴还是肢体交流,协议层规定我们用中文还是英文交流。下面分析一下串口通讯协议的物理层和协议层。

USART(Universal Synchronous/Asynchronous Receiver/Transmitter):通用同步/异步串行接收/发送器

UART(Universal Asynchronous Receiver/Transmitter):通用异步收发传输器

终端与其他设备(例如其他终端、计算机和外部设备)通过数据传输进行通信。数据传输可以通过两种方式进行:并行通信和串行通信。

传输效果如图:

背景

设备之间的通讯方式

并行通信 串行通信
传输原理 数据各个位同时传输 数据按位顺序传输
优点 速度快 占用引脚资源少占用引脚资源少
缺点 占用引脚资源多 速度相对较慢

并行通信

并行通讯是指数据的每一位同时在多根数据线上发送或者接收

并行通信时数据的各个位同时传送,可以字或字节为单位并行进行。

对于并行通信来说其成本较高,速度快,抗干扰能力差,传输距离短。计算机或plc各种内部总线就是以并行方式传送数据的。另外,在 PLC 底板上,各种模块之间通过底板总线交换数据也以并行方式进行,常见的有 SDIO ,FSMC ,W500 等

特点: 多位数据同时传输,传输控制简单,传输速度快,但是在长距离传输时硬件成本较高

传输效果如图:

串行通信

串行通信是指使用一条数据线,将数据一位一位地依次传输,每一位数据占据一个固定的时间长度。

其只需要少数几条线就可以在系统间交换信息,这种方式传输速率较慢,抗干扰能力较强,通信距离较远。对于串行通信,常见的通信协议有:USART、I2C、SPI

特点: 数据逐位传输,传输线少,长距离传输时成本低,但数据的传输控制较复杂。按照实现数据同步的方式,可以分为同步串行和异步串行两种

传输效果如图:

常见的串行通信接口

通信标准 引脚说明 通信方式 通信方向
UART(通用异步收发器) TXD :发送端
RXT :接收端
GND :共地
异步通信 全双工
1-wire(单总线) DQ :发送/接收端 异步通信 半双工
SPI SCK :同步时钟
MISO :主机输入,从机输出
MOSI :主机输出,从机输入
同步通信 全双工
I2C SCK :同步时钟
SDA :数据输入/输出端
同步通信 半双工

按照数据传送方向进行分类:

· 单工:数据传输只支持数据在一个方向上传输

· 半双工:允许在两个方向上传输,但是,在某一时刻,只允许数据在一个方向上进行传输。半双工实际上是一种课以切换方向的单工通信,不需要使用独立的接收端何发送端,两者可以合并,一起使用同一个端口

· 全双工:允许数据同时在两个方向上进行传输。全双工是两个单工通信方式的结合,需要独立的接收端和发送端。

按通信方式进行分类:

· 同步串行通信:带时钟同步信号传输,比如:SPI 、IIC 通信接口

· 异步串行通信:不带时钟同步信号,比如:UART(通用异步收发器),单总线

同步通讯中,数据信号所传输的内容的绝大部分是有效数据,而异步通讯中则会包含数据帧的各种标识符,所以同步通讯效率较高,但是同步通讯双方的时钟允许误差小,稍稍时钟出错就可能导致数据错乱,异步通讯双方的时钟允许误差较大

同步串行通信

同步通信中,收发设备上会使用一根信号线传输信号,在时钟信号的驱动下双方进行协调,同步数据

例如:通讯中通常双方会统一规定在时钟信号的上升沿或者下降沿对数据线进行采样

特点: 数据传输以数据块(一组字符)为单位,在一个数据块内,字符与字符间无间隔,收发双方依靠独立的时钟线进行信号的同步。适用于大批量的数据传输

时钟信号如图:

异步串行通信

异步通信中,不使用时钟信号进行数据同步,它们直接在数据数据中穿插一些用于同步的信号位,或者讲主题数据进行打包,以数据帧的格式传输数据。通讯中还需要双方约定好传输的速率(也就是波特率)等,以便更好的同步

三根通信线

任何通信都要有信息传输载体,或者是有线的或者是无线的,串口通信是有线通信,是通过串口线来通信的。串口通信线最少需要 2 根(GND 和信号线),可以实现单工通信,也可以使用 3 根通信线(Tx、Rx、GND)来实现全双工

RXD:数据输入引脚,数据接受

TXD:数据发送引脚,数据发送

异步串行通信

特点: 数据传输以单个字符为单位,字符和字符之间的间隙任意,字符内部每一位持续的时间相同。收发双方没有专门的时钟信号,而是依靠事先约定的字符格式和通信速率来完成通信

通信字符格式

字符格式决定了字符中数据的传输形式

常用字符格式: 1位起始位 8位数据位 无奇偶校验 1位停止位,如图:

传输时地位在前,高位在后,发送您数据为0xE9

通信速率

波特率:每秒钟传送二进制数码的位数,以 bit/s(bps) 为单位

常用的波特率有:9600 、19200 、38400 、57600 、115200

波特率决定了字符中每一位数据的持续时间
波特率为 115200 ,表示每秒传输 115200 位,且每一位数据在数据线上持续时间为 \(T_{bit} = \frac{1}{115200} \approx 8.68 us\)

数据接收过程

接收过程的本质是数据采集,假设接收端的采样时钟是波特率的16倍

具体接收过程如下:

  1. 接受过程由起始位的下降沿启动

  2. 接受等待 8 个时钟周期,以便建立一个接近比特周期中间的采样点

  3. 接收端等待 16 个时钟周期,使其进入第一个数据为周期的中点

  4. 第一个数据位被采样并存储在接收寄存器中

  5. 串口模块在采样第二个数据位之前等待另外 16 个时钟周期

  6. 重复此过程,直至所有数据都被采样和存储

  7. 由停止位的上升沿使数据线返回到空闲状态

数据传输方向

前面已经介绍了不同数据传输方向,这里仅介绍对应特点

单工:数据传输仅能沿一个方向,不能实现反向传输,只有一条通信线路

半双工:数据传输可以言两个方向,但需要分时进行,也只有一条通信线路

全双工:数据可以同时进行双向传输,具有两条通信线路,典型实例:UART

常用的错误校验方式

常用的错误校验方式有三种:奇偶校验、代码校验、循环冗余校验,下面将依次介绍

奇偶校验

奇校验表示数据中的 "1" 的个数与校验位 "1" 的个数之和为奇数;偶校验表示数据中的 "1" 的个数与校验位 "1" 的个数之和为偶数

没有奇偶校验的内存,每个字节只有 8 位,而奇偶校验就是在每一字节( 8 位)之外又增加了以为错误检测位

奇偶校验只能检测出错误,而无法对其进行修正,同时虽然双位同时发生错误的概率相当低,但奇偶校验却无法检测出双位错误

代码校验

发送方讲所发数据块求和,产生一个字节的校验字符附加到数据块末尾。接收方采用同样方式进行检测

循环冗余校验

通过某种数学运算实现有效信息与校验位之间的循环校验,常用于磁盘信息的传输、存储区的完整性校验等

参口文献

  1. 带你认识RS232通讯

  2. STM32第五章-串口通讯详解

STM32 —— 串口通讯相关推荐

  1. stm32串口通讯问题

    stm32串口通讯问题 在串口试验中,串口通讯不正常,则可能会出现以下问题: 1. 配置完成后,串口没有任何消息打印. 原因:1,端口配置有问题,需要重新检查I/O口的配置 2,接线有问题,检查接线是 ...

  2. K210学习笔记(五)——MAIX BIT(K210)与STM32串口通讯

    前言 uart 模块主要用于驱动开发板上的异步串口,可以自由对 uart 进行配置.k210 一共有3个 uart,每个 uart 可以进行自由的引脚映射. 一.MAIX BIT串口使用步骤 1.引脚 ...

  3. STM32—串口通讯详解

    串口通讯目录 物理层 协议层 USART简介 开发板与上位机的连接 代码讲解: 一.初始化结构体 二.NVIC配置中断优先级 三.USART配置函数讲解 四.传输数据的函数: 1.发送一个字节 2.发 ...

  4. 作业—STM32串口通讯

    STM32串口通信 一.基于寄存器与基于固件库的stm32 LED流水灯例子的编程方式有什么差异 二.STM32的USART窗口通讯程序 1.烧录代码 2.代码 3.效果图 三.c语言程序里全局变量. ...

  5. STM32串口通讯实现——USB转串口

    一.RS232,TTL简介 RS232是个人计算机的通讯接口之一,一般会有两组RS323接口,分别为COM1和COM2,电平标准为+12V为逻辑负,-12为逻辑正. TTL电平为5V为逻辑正,0为逻辑 ...

  6. STM32串口通讯数据丢失原因分析及解决办法

    在进行串口通讯实验时,一时不仔细可能会发现通讯不正常,数据丢失的现象,包括丢失第一个字符,或只收到最后一个字符等等,本文接下来将就这类问题展开讨论. 首先是通过MCU向上位机发送数据: 若程序如下图所 ...

  7. 嵌入式作业(六):STM32串口通讯

    目录 一.基于寄存器与基于固件库的编程方式有什么差异. 二.STM32的USART窗口通讯程序 1.烧录代码的方式 2.代码及效果图 三.C语言程序里全局变量.局部变量.堆.栈等概念 四.stm32的 ...

  8. Stm32串口通讯的几种方式及其优缺点

    1.延时等待 原理:串口发送指令/数据之后,通过延时函数延时一定时间,等待从机的响应. 优点:实现简单,对于快速相应和长度不长的通讯可以使用此方法 缺点:(1)在非实时环境中,由于延时的存在会影响系统 ...

  9. python与STM32串口通讯(踩坑记录)

    1.环境 python端需要安装pyserial包和serial包,安装命令为 pip install pyserial 和 pip install serial.如果安装速度很慢可考虑使用清华镜像源 ...

最新文章

  1. 案例分析 | SAP如何帮助企业实现端到端的数字化供应链管理
  2. 计算是计算机科学独有的方法,大学计算机基础教学中的计算思维培养.doc
  3. BAT集体升级云事业部,这背后都藏着哪些“小心思”?
  4. 用为知发布博客到博客园、使用Wiz编写和发布博客园(cnblogs)博客
  5. java windows so文件_windows下编译使用NDK,调用SO文件 | 学步园
  6. 【Elasticsearch】all shards failed no shard available for get .xxx[doc] routing null
  7. 基于SSM的企业OA系统
  8. Ex2010学习(十),恢复用户已删除邮件
  9. win10 UWP RSS阅读器
  10. 威伦触摸屏和三菱PLC通信
  11. thinkphp使用ajax、jquery、Mysql实现了简单的客户端通信功能
  12. 实现添加数据、地图放大、缩小、漫游、全景视图、鹰眼图的操作(ICommand、ITool)...
  13. 计算机中的颗粒度(granularity)什么是颗粒度?
  14. 【C】指针的相关运算练习题
  15. x265代码解读博客合集
  16. mac安装pygraphviz找不到头文件
  17. Something went wrong while dowloading dependencies could not open caffe-builder-config.cmake
  18. XML fragments parsed from previous mappers already contains value for 解决办法
  19. 游戏引擎与游戏引擎开发入门
  20. oracle插入日期异常,Oracle插入日期数据常见的2个问题和解决方法

热门文章

  1. unity Mirror使用心得一(玩家角色创建,控制,及其攻击其他玩家的血量同步设置)
  2. 前端异常监控平台之Sentry落地
  3. 如何从PowerPoint幻灯片中删除幻灯片编号
  4. 为 Oracle Fusion Middleware 产品获取 Java SE (JDK/JRE)
  5. Interest-aware Message-Passing GCN for Recommendation WWW2021
  6. Opencv中Rect类
  7. 黄油刀的使用(andriod x)
  8. [C语言]八皇后问题回溯算法
  9. 前序、中序、后序。(中序最重要)
  10. java创建对象后花括号_java – 创建数组对象和使用花括号分配数组有什么区别?...