0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

STM32的串口通信原理介绍

奈因PCB电路板设计 来源:STM32嵌入式开发 作者:STM32嵌入式开发 2021-08-26 09:23 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

介绍串口通信

按照数据传送方向分类

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

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

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

按照通信方式分类

同步通信:带时钟同步信号传输。比如:SPI,IIC通信接口

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

在同步通讯中,收发设备上方会使用一根信号线传输信号,在时钟信号的驱动下双方进行协调,同步数据。例如,通讯中通常双方会统一规定在时钟信号的上升沿或者下降沿对数据线进行采样。

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

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

STM32串口通信基础

STM32的串口通信接口有两种,分别是:UART(通用异步收发器)、USART(通用同步异步收发器)。而对于大容量STM32F10x系列芯片,分别有3个USART和2个UART。

UART引脚连接方法

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

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

对于两个芯片之间的连接,两个芯片GND共地,同时TXD和RXD交叉连接。这里的交叉连接的意思就是,芯片1的RxD连接芯片2的TXD,芯片2的RXD连接芯片1的TXD。这样,两个芯片之间就可以进行TTL电平通信了。

若是芯片与PC机(或上位机)相连,除了共地之外,就不能这样直接交叉连接了。尽管PC机和芯片都有TXD和RXD引脚,但是通常PC机(或上位机)通常使用的都是RS232接口(通常为DB9封装),因此不能直接交叉连接。RS232接口是9针(或引脚),通常是TxD和RxD经过电平转换得到的。故,要想使得芯片与PC机的RS232接口直接通信,需要也将芯片的输入输出端口也电平转换成RS232类型,再交叉连接。

经过电平转换后,芯片串口和RS232的电平标准是不一样的:

单片机是TTL电平:+5V表示1,0V表示0

RS232是负逻辑电平,-3~-15V为1,+3~+15V为0

所以单片机串口与PC串口通信就应该遵循下面的连接方式:在单片机串口与上位机给出的RS232口之间,通过电平转换电路(如下面图中的Max232芯片) 实现TTL电平与RS232电平之间的转换。下图中的P10,也就是上文中提到的DB9。

STM32的UART特点

全双工异步通信;

分数波特率发生器系统,提供精确的波特率。发送和接受共用的可编程波特率,最高可达4.5Mbits/s;

可编程的数据字长度(8位或者9位);

可配置的停止位(支持1或者2位停止位);

可配置的使用DMA多缓冲器通信;

单独的发送器和接收器使能位;

检测标志:① 接受缓冲器 ②发送缓冲器空 ③传输结束标志;

多个带标志的中断源,触发中断;

其他:校验控制,四个错误检测标志。

串口通信过程

STM32中UART参数

串口通讯的数据包由发送设备通过自身的TXD接口传输到接收设备的RXD接口,通讯双方的数据包格式要规约一致才能正常收发数据。STM32中串口异步通信需要定义的参数:起始位、数据位(8位或者9位)、奇偶校验位(第9位)、停止位(1,15,2位)、波特率设置。

UART串口通信的数据包以帧为单位,常用的帧结构为:1位起始位+8位数据位+1位奇偶校验位(可选)+1位停止位。

奇偶校验位分为奇校验和偶校验两种,是一种简单的数据误码校验方法。奇校验是指每帧数据中,包括数据位和奇偶校验位的全部9个位中1的个数必须为奇数;偶校验是指每帧数据中,包括数据位和奇偶校验位的全部9个位中1的个数必须为偶数。

校验方法除了奇校验(odd)、偶校验(even)之外,还可以有:0 校验(space)、1 校验(mark)以及无校验(noparity)。0/1校验:不管有效数据中的内容是什么,校验位总为0或者1。

这个框图分成上、中、下三个部分,具体的可以看《STM32中文参考手册》中的描述。

框图的上部分,数据从RX进入到接收移位寄存器,后进入到接收数据寄存器,最终供CPU或者DMA来进行读取;数据从CPU或者DMA传递过来,进入发送数据寄存器,后进入发送移位寄存器,最终通过TX发送出去。

然而,UART的发送和接收都需要波特率来进行控制的,波特率是怎样控制的呢?

这就到了框图的下部分,在接收移位寄存器、发送移位寄存器都还有一个进入的箭头,分别连接到接收器控制、发送器控制。而这两者连接的又是接收器时钟、发送器时钟。也就是说,异步通信尽管没有时钟同步信号,但是在串口内部,是提供了时钟信号来进行控制的。而接收器时钟和发送器时钟又是由什么控制的呢?

可以看到,接收器时钟和发送器时钟又被连接到同一个控制单元,也就是说它们共用一个波特率发生器。同时也可以看到接收器时钟(发生器时钟)的计算方法、USRRTDIV的计算方法。

这里需要知道一个知识点:

UART1时钟:PCLK2(高速)

UART2、UART3、UART4时钟:PCLK1(低速)

责任编辑:haq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 通信
    +关注

    关注

    18

    文章

    6450

    浏览量

    140269
  • STM32
    +关注

    关注

    2313

    文章

    11195

    浏览量

    374667
  • 串口
    +关注

    关注

    15

    文章

    1627

    浏览量

    83353

原文标题:一文为你讲清楚STM32串口通信基本原理

文章出处:【微信号:pcbgood,微信公众号:奈因PCB电路板设计】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    STM32驱动串口屏,STM32F103C8T6串口发送指令控制HMI串口

    仅是一部分常用的基础指令,更多更仔细的指令或者函数可以访问陶晶驰资料官网。 硬件和接线 硬件需要一块STM32F103C8T6的开发板,杜邦线诺干,2.4寸串口屏一块 接线 串口STM32
    的头像 发表于 02-10 17:07 561次阅读
    <b class='flag-5'>STM32</b>驱动<b class='flag-5'>串口</b>屏,<b class='flag-5'>STM32</b>F103C8T6<b class='flag-5'>串口</b>发送指令控制HMI<b class='flag-5'>串口</b>屏

    RK3588平台串口配置修改指南:切换至串口8

    在嵌入式开发中,串口作为基础调试接口至关重要。本文档针对 RK3588 平台,详细介绍如何将系统默认串口修改为串口 8(UART8),包括 U-Boot 阶段和内核阶段的配置调整。该修
    的头像 发表于 02-01 16:37 1390次阅读

    单片机中的串口通讯串行同步通信与串行异步通信

    中始终保持精确的同步时钟,即发送时钟和接收时钟要严格的同步。常用的做法是两个设备使用同一个时钟源。 在串口通信与编程中应用最多的是异步通信方式。STM32
    发表于 01-15 08:06

    串口通信基石:Air8000下Modbus RTU串口初始化详解!

    串口初始化是Modbus RTU通信稳定可靠的关键起点。本篇深入剖析Air8000开发板串口参数配置、初始化代码实现及调试要点,结合master_rtu示例,分享实际操作中的经验与避坑指南,让您
    的头像 发表于 10-28 16:33 1787次阅读
    <b class='flag-5'>串口</b><b class='flag-5'>通信</b>基石:Air8000下Modbus RTU<b class='flag-5'>串口</b>初始化详解!

    基于FPGA开发板TSP的串口通信设计

    本文详细介绍基于Terasic FPGA开发板TSP(又名C5P和OSK)和其板载CP2102N USB-UART桥接芯片的串口通信系统设计与实现。系统采用Verilog HDL编写UART收发控制器,通过CP2102N实现FP
    的头像 发表于 10-15 11:05 4823次阅读
    基于FPGA开发板TSP的<b class='flag-5'>串口</b><b class='flag-5'>通信</b>设计

    基于FPGA开发板DE23-Lite的串口通信设计

    DE23-Lite开发板提供了一个UART通信接口(物理接口是下图的Type C接口),用户能够通过主机与Agilex 3 FPGA进行串口通信
    的头像 发表于 10-15 10:57 4770次阅读
    基于FPGA开发板DE23-Lite的<b class='flag-5'>串口</b><b class='flag-5'>通信</b>设计

    串口通信有哪些方式

    串口通信(Serial Communication)是一种通过串行方式逐位传输数据的通信方式,广泛应用于嵌入式系统、工业控制、仪器仪表等领域。其通信方式可根据不同的分类标准划分为多种类
    的头像 发表于 09-28 18:02 1308次阅读

    关于stm32f4zgt6和mspm0g3507串口通信问题

    本人在使用stm32f4zgt6和mspm0g3507串口通信时出现问题,情况如下: m0芯片使用软件超时解析进行数据接收,使用标准库的transmit函数进行数据发送。 stm32使
    发表于 09-01 11:11

    PLC串口自由协议通信概述

    串口自由协议通信是一种灵活的串行通信方式。在该模式下,开发者无需遵循特定标准协议,可根据实际需求自由定义数据格式与交互规则。
    的头像 发表于 08-07 09:15 2331次阅读
    PLC<b class='flag-5'>串口</b>自由协议<b class='flag-5'>通信</b>概述

    智嵌物联串口转光纤转换器-延长串口通信距离,增强抗干扰性能

    智嵌物联研发的串口光纤收发器是将RS-485/422/RS232接口信号转换为光纤接口传输,通信距离可达20Km,大大延长串口通信距离以及抗干扰性能。设备可自适应
    的头像 发表于 06-27 17:08 928次阅读
    智嵌物联<b class='flag-5'>串口</b>转光纤转换器-延长<b class='flag-5'>串口</b><b class='flag-5'>通信</b>距离,增强抗干扰性能

    ESP32用作经典蓝牙串口透传模块与手机进行串口通信

    本文介绍了如何把ESP32用作一个蓝牙串口透传设备使用,其功能和常用的HC-05/06串口蓝牙设备一样。并与手机蓝牙串口APP进行双向蓝牙通信
    的头像 发表于 06-20 17:45 3403次阅读
    ESP32用作经典蓝牙<b class='flag-5'>串口</b>透传模块与手机进行<b class='flag-5'>串口</b><b class='flag-5'>通信</b>

    使用USB转TTL串口板和ST-LINK调试下载器给STM32单片机下载程序

    本文详细介绍如何使用ST-LINK/V2和USB转TTL串口板为STM32单片机下载程序,包括STM32启动模式、JTAG与SWD接口对比、驱动安装及官方软件
    的头像 发表于 06-20 17:26 3234次阅读
    使用USB转TTL<b class='flag-5'>串口</b>板和ST-LINK调试下载器给<b class='flag-5'>STM32</b>单片机下载程序

    串口网关是什么

    串口网关是什么? 串口网关(Serial Gateway) 是一种硬件或软件设备,用于将 串口通信协议 (如RS-232、RS-485、TTL等)转换为 网络
    的头像 发表于 06-05 11:31 955次阅读

    常用通信接口一(串口、RS232、RS485、USB、TYPE-C原理与区别)

    一、什么是串口通信?常见的串口通信一般是指异步串行通信。与串行通信相对的是并行
    的头像 发表于 05-29 15:44 4475次阅读
    常用<b class='flag-5'>通信</b>接口一(<b class='flag-5'>串口</b>、RS232、RS485、USB、TYPE-C原理与区别)

    第七章 串口通信

    本章介绍了W55MH32的串口通信,讲述了数据通信基础概念、串口通信协议和特性与功能,以及DMA
    的头像 发表于 05-26 17:00 1141次阅读
    第七章 <b class='flag-5'>串口</b><b class='flag-5'>通信</b>