串口通讯(USART)

2023-05-16

对于通讯协议,我们也以分层的方式来理解,最基本的是把它分为物理层和协议层。

物理层规定通讯系统中具有机械、电子功能部分的特性,确保原始数据在物理媒体的传输。

协议层主要规定通讯逻辑,统一收发双方的数据打包、 解包标准。

1. 物理层

其中接线口以针式引出信号线的称为公头,以孔式引出信号线的称为母头

在计算机中一般引出公头接口,而在调制调解器设备中引出的一般为母头,使用上图中的串口线即可把它与计算机连接起来。

编号引脚定义
1DCD数据载波检测
2RXD数据接收
3TXD数据发送
4DTR数据终端准备好
5GND信号地
6DSR数据设备准备好
7RTS请求发送
8CTS清除发送
9RI振铃提示

 在目前的其它工业控制使用的串口通讯中,一般只使用RXD、TXD以及GND三条信号线,直接传输数据信号,而 RTS、CTS、DSR、DTR 及 DCD 信号都被裁剪掉了。

2. 协议层

波特率

异步通讯中由于没有时钟信号 (如前面讲解的 DB9 接口中是没有时钟信号的),所以两个通讯设备之间需要约定好波特率,即每个码元的长度,以便对信号进行解码,上图中用虚线分开的每一格就是代表一个码元,常见的波特率为 4800、9600、 115200 等。

起始位与停止位

串口通讯的一个数据包从起始信号开始,直到停止信号结束。数据包的起始信号由一个逻辑 0 的 数据位表示,而数据包的停止信号可由 0.5、1、1.5 或 2 个逻辑 1 的数据位表示,只要双方约定 一致即可。

有效数据

在数据包的起始位之后紧接着的就是要传输的主体数据内容,也称为有效数据,有效数据的长度 常被约定为 5、6、7 或 8 位长。

数据校验

在有效数据之后,有一个可选的数据校验位。由于数据通信相对更容易受到外部干扰导致传输数据出现偏差,可以在传输过程加上校验位来解决这个问题。

校验方法有奇校验 (odd)、偶校验 (even)、0 校验 (space)、1 校验 (mark) 以及无校验 (noparity)。

3. STM32H750 USART

(1)引脚

A. USART双向通信

USART双向通信需要至少两个引脚:接收数据输入(RX)和发送数据输出(TX)。

RX (Receive Data Input)

RX是串行数据输入。数据恢复采用过采样技术区分有效的传入数据和噪声。

TX (Transmit Data Output)

当发射器被禁用时,输出引脚返回到它的I/O端口配置。

当发射器是启用的,没有数据需要传输,TX引脚是高电平。在单线和智能卡模式下,该I/O用于传输和接收数据。

B. RS232 硬件流控制模式

CTS和RTS引脚在USART RS232硬件流控制模式中使用。

CTS (Clear To Send)

如果使能RS232硬件流控制,发送器在发送下一帧数据之前会检测 nCTS 引脚。

如果为低电平,表示可以发送数据;

如果为高电平则在发送完当前数据帧之后停止发送。

该引脚只适用于硬件流控制。

RTS (Request T o Send)

如果使能RS232硬件流控制,当USART接收器准备好接收新数据时就会将 nRTS 变成低电平;当接收寄存器已满时,nRTS 将被设置为高电平。

该引脚只适用于硬件流控制。

C. RS485 硬件控制模式

DE (Driver Enable)

该信号激活外部收发器的传输模式。DE和RTS共用同一个引脚。

D. 同步主从模式和智能卡模式

CK

该引脚在同步主模式和智能卡模式下充当时钟输出;作为时钟输入是同步从模式。

NSS

该引脚在同步从模式下充当从选择输入。

(2)字符

 传输字长(world length)通过USART_CR1寄存器的12位和28位:M0和M1控制。

An Idle character is interpreted as an entire frame of “1”s (the number of “1”s includes the 
number of stop bits).
A Break character is interpreted on receiving “0”s for a frame period. At the end of the 
break frame, the transmitter inserts 2 stop bits. 

(3)FIFO

(4)USART发射器

根据M位的状态,发射机可以发送7位或8位或9位的数据字。

必须设置发送使能位(TE)才能激活发送功能。传输移位寄存器中的数据输出到TX引脚上,而相应的时钟脉冲输出到SCLK引脚上。

A. 字符发送

在USART传输过程中,数据首先移出TX引脚上的最低有效位(默认配置)。在这种模式下,USART_TDR寄存器由内部总线和传输移位寄存器之间的缓冲区(TDR)组成。 

在写入要传输到USART_TDR的数据之前,必须设置TE位。在数据传输过程中不能复位TE位。TE位使能时会发送一个空闲帧(idle frame)。

B. 停止位配置

C. 字符传送寄存器配置过程

 D. 字符传送过程

当FIFO模式未使能时,

写入传输数据寄存器总是清除TXE位。TXE标志由硬件设置。

——数据已经从USART_TDR寄存器移动到移位寄存器,数据传输已经开始;

——USART_TDR寄存器为空;

——下一个数据可以写入USART_TDR寄存器,而不覆盖前一个数据。

如果设置了TXEIE位,该标志将产生一个中断。

当传输正在进行时,对USART_TDR寄存器的写指令将数据存储在TDR缓冲区中。然后将其复制到当前传输末尾的移位寄存器中。

当没有传输正在进行时,对USART_TDR寄存器的写指令将数据放在移位寄存器中,数据传输开始,并设置TXE位。

在将最后的数据写入USART_TDR寄存器后,必须等待TC设置好后才能禁用USART或导致微控制器进入低功耗模式(参见图571:传输时的TC/TXE行为)。

(5)USART接收器

A. 字符接收

 

(6)波特率配置

接收机和发射机(Rx和Tx)的波特率都设置为USART_BRR寄存器中编程的值。

  

 (7)校验控制

寄存器名称作用
USART_CR1PCE使能奇偶校验控制
USART_CR1PS设置奇校验或者偶校验

 接收时,如果奇偶校验失败,则在USART_ISR寄存器中设置PE标志,如果在USART_CR1寄存器中设置PEIE,则产生中断。通过软件向USART_ICR寄存器中的PECF写入1来清除PE标志。

如果在USART_CR1中设置了PCE位,那么写入数据寄存器的数据的MSB位将被传输,但是被奇偶位更改(如果选择偶偶校验位则为偶数个“1”(PS=0),如果选择奇偶校验位则为奇数个“1”(PS=1))。

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

串口通讯(USART) 的相关文章

  • MANIFOLD 2-G开发 之 利用ROS话题编程实现UART1串口通讯

    目录 MANIFOLD 2 G开发笔记1 项目描述2 遇到的问题3 解决方案4 示例代码5 注意事项6 资源附件6 运行与调试 MANIFOLD 2 G开发笔记 本博客内容将记录MANIFOLD 2 G 开发过程中遇到的问题及解决方案 xf
  • STM32F系列USART的IDLE中断要注意了

    只是调用USART ClearITPendingBit之类的方法是清除不了中断标志的 xff0c 必须必须在调用USART GetITStatus之后调用 USART ReceiveData xff0c 因为IDLE被搞成了一个帧 xff0
  • STM32串口读取一帧数据USART_IT_IDLE

    stm32 串口读取数据中断 USART IT RXNE xff1a 读取到一个数据产生中断USART IT IDLE xff1a 读取到一帧数据产生中断 以前串口读取一帧数据的方法 xff1a 收到数据后重置定时器的值 xff0c 等到定
  • ..\OBJ\USART.axf: Error: L6218E: Undefined symbol I2C_CheckEvent (referred from oled_i2c.o).

    OBJ USART axf Error L6218E Undefined symbol I2C CheckEvent referred from oled i2c o OBJ USART axf Error L6218E Undefined
  • 野火学习笔记(13) —— USART —串口通讯

    文章目录 1 串口通讯协议简介1 1 物理层1 1 1 电平标准1 1 2 RS 232 信号线 1 2 协议层1 2 1 波特率1 2 2 通讯的起始和停止信号1 2 3 有效数据1 2 4 数据校验 2 STM32 的 USART 简介
  • UART串口通讯

    UART代表通用异步接收器 发送器也称为串口通讯 xff0c 它不像SPI和I2C这样的通信协议 xff0c 而是微控制器中的物理电路或独立的IC UART的主要目的是发送和接收串行数据 xff0c 其最好的优点是它仅使用两条线在设备之间传
  • USART---串口发送数据

    xfeff xfeff while USART1 gt SR amp 0X40 61 61 0 等待发送结束 解析 xff1a USART1 gt SR xff1a 串口 状态 寄存器 USART1 gt SR amp 0X40 即串口状态
  • STM32CubeMX系列|串口通讯

    串口通讯 1 串口简介 在串行通信中 xff0c 一个字符一个字符地传输 xff0c 每个字符一位一位地传输 xff0c 并且传输一个字符时 xff0c 总是以 起始位 开始 xff0c 以 停止位 结束 在进行传输之前 xff0c 双方一
  • STM32串口接受和发送数据的程序(USART/UART)

    本实验中 STM32通过串口1和串口2上位机对话 xff0c STM32通过串口1在收到上位机发过来的字符串 以回车换行结束 后 xff0c 通过串口2原原本本的返回给上位机 串口 xff08 USART UART xff09 通信配置详解
  • 【STM32学习】——USART串口数据包&HEX/文本数据包&收发流程&串口收发HEX/文本数据包实操

    文章目录 前言一 数据包格式 xff08 江科大规定 xff09 1 HEX数据包2 文本数据包3 两者对比 二 数据包收发流程1 HEX数据包接收 xff08 只演示固定包长 xff09 2 文本数据包接收 xff08 只演示可变包长 x
  • 笔记(STM32篇)day13——USART串口与PC通信实例

    USART 常用来实现控制器与电脑之间的数据传输 这使得我们调试程序非常方便 xff0c 比如我们可以把一些变量的值 函数的返回值 寄存器标志位等等通过 USART 发送到串口调试助手 xff0c 这样我们可以非常清楚程序的运行状态 xff
  • 使用STM32G4 ----串口发送数据USART_TX的使用

    一 引脚的配置 串口对应的引脚 PA10 span class token operator span span class token operator span span class token operator span span c
  • android串口通讯

    一 配置 1 下载文件 https github com cepr android serialport api 2 复制android serialport api文件夹至app src main java 3 复制jni文件至app s
  • STM32使用串口空闲中断接收不定长数据帧-USART_IT_IDLE使用(不使用DMA方式)

    STM32使用串口空闲中断接收不定长数据帧 USART IT IDLE使用 xff08 不使用DMA方式 xff09 前言串口空闲中断介绍清中断方法串口中断处理函数串口中断用到的全局变量定义串口初始化 xff08 使能接收中断 空闲中断 x
  • NX串口通讯windows

    我用windows与NX进行通讯 xff0c 用的线是CH340下载线 USB端连接windows xff0c 绿色的TXD连接NX的10号 RXD xff0c 白色的RXD连接NX的8号 TXD 目录 1 windows端 2 NX端 2
  • STM-32:USART串口协议、串口外设—数据发送/数据发送+接收

    目录 一 串口通信1 1通信接口1 2串口通信1 2 1简介1 2 2硬件电路1 2 3串口参数及时序 二 STM32的USART外设2 1USART简介2 2USART框图 三 数据传输3 1数据帧3 2输入数据策略3 2 1起始位侦测3
  • STM32使用FIFO实现USART串口发送中断

    fifo就不要造轮子了 xff0c 用现成的就行了 linux内核中有目前人类写出的基于c语言的最强FIFO xff0c 请自行搜索学习 巧夺天工的kfifo xff0c kfifo精妙无比 xff0c 实在是高 xff0c 其中用到的环回
  • STM32-USART串口初始化配置

    一 串行通信的基本概念 1 同步通信和异步通信 通信 xff0c 最少要两个对象 xff0c 一个收 xff0c 一个发同步通信 xff1a 通信双方根据同步信号进行通信的方式 异步通信 xff1a 数据传输速度匹配依赖于通信双方有自己独立
  • MCU-串口通信协议

    MCU 串口通信协议 一 介绍 串行通信就像单车道 所有数据得一个一个通行 并行就像多车道 一次可以通行多辆车 MCU常用到的串口通信模块主要有两种 UART和USART UART 全称是Universal Asynchronous Rec
  • STM32 上的 ADC 单次转换

    我正在研究 STM32 F103x 上的 ADC 编程 并从最简单的情况 单次转换开始 测量内部温度传感器 连接到 ADC1 的值 并使用 USART 将其发送到 COM 端口 目标似乎很明确 但是当我尝试将源代码下载到闪存时 它不会向 C

随机推荐

  • 通过PCF8591读取电压值(AD转换)

    通过PCF8591读取电压值 xff08 AD转换 xff09 A D的主要指标常用A D器件 PCF8591PCF8591的控制字节 A D的主要指标 1 ADC的位数 xff1a n位ADC代表 xff0c 2的n次方个刻度 2 基准源
  • STM32的光敏传感器

    STM32的光敏传感器 简介硬件连接计算公式程序 简介 1 照射光敏二极管的光强不同 xff0c 通过光敏二极管的电流大小就不同 xff0c 所以可以通过检测电流大小 xff0c 达到检测光强的目的 利用这个电流变化 xff0c 我们串接一
  • MPU6050寄存器介绍

    MPU6050寄存器介绍 MPU6050寄存器介绍电源管理寄存器1 xff08 0X6B xff09 陀螺仪配置寄存器 xff08 0X1B xff09 加速度传感器配置寄存器 xff08 0X1C xff09 FIFO使能寄存器 xff0
  • (10)查看RGB摄像头和深度摄像头

    查看RGB摄像头和深度摄像头 RGB摄像头深度摄像头 1 小车开机 xff0c 连接wifi xff0c 远程登录 登录密码 xff1a dongguan ssh wheeltec 64 192 168 0 100 2 挂载 挂载密码 xf
  • (11)色块跟踪

    色块跟踪 一 查看色块追踪的文件位置 xff1a 在ros simple follower文件下的simple followe的Launch文件 二 可调整识别色块的阈值 xff0c 追踪过程中最大速度 xff0c 中距值 xff0c PI
  • (6)ROS与STM32之间的联系

    ROS与STM32之间的联系 简介两者之间的关系两者之间的通信ROS如何在代码层面去接收stm32发送过来的数据1 整体框架2 机器人底盘类3 构造函数4 主函数5 循环功能函数6 析构函数 简介 1 如何实现ROS与stm32之间的通信
  • keil 局部变量不能查看值,显示为not in scope

    关于编译器的优化 xff0c 参考网上的8051系列的说明如下 xff1a xfeff xfeff 0级优化 xff1a 1 常数折叠 xff1a 只要有可能 xff0c 编译器就执行将表达式化为常数数字的计算 xff0c 其中包括运行地址
  • 算法——均方根检波

    均方根检波 1 均方根检波技术2 高精度采样技术3 STM32的ADC4 程序工程文件 1 均方根检波技术 1 均值检波电路通常采用电容充放电电路作为平均值电路 2 由于输出为整流平均值 xff0c 要求电容充放电时间常数相等 3 电容充放
  • 二.LVGL学习——(lv_obj基础对象)

    二 LVGL学习 xff08 lv obj基础对象 xff09 1 介绍2 对象的工作机制3 对象的创建与删除4 Screen 屏幕对象5 实例代码 xff08 1 xff09 6 实例代码 xff08 2 xff09 1 介绍 LVGL是
  • 三.LVGL学习——(Buttons styles)

    三 LVGL学习 xff08 Buttons styles xff09 1 按钮对象样式 2 程序 定义三个lv style t变量 static lv style t style btn 按钮1按下前的样式变量 static lv sty
  • 51单片机串行通信原理

    51单片机串行通信原理 计算机通信串行通信异步通信同步通信数据传送速率传输方向 单片机串行口串行口特殊功能寄存器串行口控制寄存器SCON电源控制寄存器PCON 波特率的设定与计算 PC与多个单片机通信串口如何使用 计算机通信 计算机通信 x
  • 基于动态窗口法(DWA)的局部避障算法研究及MATALB的实现

    一 动态窗口法基本概念 1 1 速度采样空间 1 2 评价函数 二 基于Matlab的机器人局部避障仿真 一 动态窗口法基本概念 动态窗口方法 DynamicWindowApproach 是一种可以实现实时避障的局部规划算法 xff0c 通
  • ROS(python)如何实现1个节点同时订阅2个话题,并实现话题同步,调用同一个callback

    1 创建talker1 span class token comment usr bin env python span span class token comment license removed for brevity span s
  • java与c++的性能比较

    java与c 43 43 的性能比较 参考其他文章 一 从编译器的角度分析性能差异 许多程序员印象中可能认为c 43 43 相比较于java语言性能会更好一点 xff0c 运行速度会快一点 这其中主要是因为java刚出现的时候JIT编译技术
  • OO-数字串char*与数值int_double之间转换

    OO 数字串char 与数值int double之间转换 文章目录 OO 数字串char 与数值int double之间转换 一 任务描述二 TestCase 2 测试集 需要填空的代码源代码 xff08 可以复制在编译器里面自行调试 xf
  • Altium Designer 生成 BOM(Bill of Material)

    画好图后 xff0c 生成 BOM xff08 Bill of Material xff09 xff1a 1 选择 Reports xff08 报告 xff09 gt gt Bill of Materials 材料清单 2 选择BOM表表头
  • CAN总线协议:标准CAN和扩展CAN

    CAN通讯协议是一个载波侦听 基于报文优先级碰撞检测和仲裁 xff08 CSMA CD 43 AMP xff09 的多路访问协议 CSMA的意思是总线上的每一个节点在企图发送报文前 xff0c 必须要监听总线 xff0c 当总线处于空闲时
  • c++new操作符笔记

    c 43 43 new语句 功能 xff1a 堆区开辟一组数据 语法 xff1a new 数据类型 注意点 xff1a new创建的数据会返回该数据对应的类型指针 xff0c 另外堆区开辟的数据由程序员手动释放
  • 循环冗余校验

    循环冗余校验 xff08 CRC xff09 是一个错误检测码在数字常用网络和存储设备 xff0c 以检测到的原始数据的意外改变 进入这些系统的数据块将根据其内容的多项式除法运算的余数获得一个简短的校验值 在检索时 xff0c 将重复计算
  • 串口通讯(USART)

    对于通讯协议 xff0c 我们也以分层的方式来理解 xff0c 最基本的是把它分为物理层和协议层 物理层规定通讯系统中具有机械 电子功能部分的特性 xff0c 确保原始数据在物理媒体的传输 协议层主要规定通讯逻辑 xff0c 统一收发双方的