| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 嵌入式 -> 串口调试常见问题和排查方法 -> 正文阅读 |
|
[嵌入式]串口调试常见问题和排查方法 |
串口UART作为嵌入式应用和通讯领域中最常用的接口之一,接口协议虽然简单,但在实际应用中不同设备之间的通讯也会存在各种小问题,下面对使用中各种常见的问题做下总结和梳理,可作为调试参考。串口可分为异步串口(UART)和同步串口(USART),后者多出时钟信号线用作通讯时信号同步。本偏仅介绍异步串口。 一、串口通信常见问题串口通信乱码串口通讯乱码通常是指接收方接收到的数据不符合预期,出现此情况时需要考虑的因素通常包含以下几个方面:
串口无法发送串口无法发送通常是指与此串口的TXD连接的对端设备RXD通道接收不到任何数据,总结如下:
串口无法接收 当串口接收不到任何数据的原因通常如下:
二、常用的排查小技巧对于以上的常见串口调试问题,有以下几个方法和技巧可供参考使用。 使用硬件仪器善于使用示波器等硬件采集或分析工具查找问题,用此方法可以确定线路上信号的串口电压、串口数据格式、串口通信波特率等参数。 串口Loopback检测当手头没有硬件仪器时,将设备自身的TXD和RXD短接起来进行自收发测试也是一个不错的选择,此方式可以简单确认硬件通路和整个逻辑是否是打通的。但缺点是定位问题不够精准。 更换串口调试软件计算机端串口软件种类较多,不排除一些设备或驱动软件没法成功适配所有的串口调试软件,此时可尝试多使用几款不同的软件对比测试。 三、串口通信基础当两个设备使用UART进行通信时,它们至少通过三根导线连接:TXD串口发送、RXD串口接收、GND。串口设备通过改变TXD信号线上的电压来发送数据,接收端通过检测RXD线上的电压来读取数据。 什么是串口通信 计算机一次传输信息(数据)一位或多个比特位。串行是指传输数据一次只传输一位。当进行串口通信时发送或者接收的每个字(即字节或字符)一次发送一位。每一位都是逻辑‘1’或者‘0’。也用Mark表示逻辑1,Space表示逻辑0。 串口数据速率使用 bits-per-second ("bps") 或者 baud rate ("baud")。这表示一秒内可以传输多少逻辑1和0。当波特率超过 1000,你会经常看到用Kbps表示的速率。对于超过 1000000 的速率一般用Mbps 来表示。 TTL串口 实际应用中,使用TTL电平逐渐成为趋势,在MCU与串口转接芯片提供的串口中比较常见,此时逻辑1电压值:+5V或+3.3V等,逻辑0电压值:0V(逻辑地)。 RS-232串口 RS-232 是由 EIA 定义的用于串口通信的标准电气接口。RS-232 实际上有三种不同的类型(A,B和C),每一种对于逻辑1和逻辑0,电平定义了不同的电压范围。最常用的种类是 RS-232C,它定义逻辑1电压范围:-3V~-12V 和逻辑0电压范围:+3V~+12V。 下面列举最为常见的 DB-9 接口分布图,引脚和功能描述如下所示: ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? 其他还有RS-422以及 RS-485 串口标准。RS-422 使用更低电压与差分信号允许线缆长达 1000英尺(300m)。 常用串口信号定义 GND - 逻辑地 从技术上讲,逻辑接地不是信号,但没有它,其他信号就不能工作。从根本上说,逻辑地充当一个参考电压,从而知道哪些电压为正或负。 TXD - 发送数据 RXD - 接收数据 RTS - 请求发送 RTS设置为逻辑0电平表示己方准备好接收数据。一般与CTS一起用于串口流控,通常被设置为默认有效状态。 除流控功能外,RTS也可用作通用输出信号,输出高低电平。常用于单片机复位或串口下载电路。 CTS - 清除发送 CTS信号接收自串口线缆的另一端。信号线逻辑0电平表示己方可以发送数据。一般与RTS一起用于串口数据流控。 DTR - 数据终端就绪 DTR 信号用于通知对端计算机或设备己方已就绪(逻辑0电平)或未就绪(逻辑1电平)。DTR也可用作通用输出信号,输出高低电平。常用于单片机复位或串口下载电路。 串口波特率 波特率是指串口每秒钟传输的bit总数,如:9600波特率。表示1s传输9600个比特。1个比特所需时间为:1/9600 ≈ 0.104ms 串口异步通信 解析串口数据需要确定一个字符的结束与下一个字符的开始。 串口数据线空闲时保持在逻辑1状态直到有字符发送。每个字节起始位在前,字节的每一位紧随其后,一位可选校验位以及一位或者两位停止位。起始位始终是逻辑0,通知对方有新串口数据可用。数据可以同时发送和接收,因此称为“异步”。 偶校验:数据位加上校验位中的“1”的个数保持为偶数。 奇校验:数据位加上校验位中的“1”的个数保持为奇数。 空白校验:也称Space校验,校验位永远是0。 标志校验:也称Mark校验,校验位永远是1。 无校验:没有校验位存在或被传输。 剩下的位称作停止位。在字符之间可能会有 1,1.5 或者 2 位停止位并且这些位总为 1。异步数据格式通常表达成“8N1”,“7E1”等。 什么是全双工和半双工 全双工是指设备可以同时发送和接收数据,有两个独立数据通道(一路输入,一路输出)。 半双工是指设备不能同时发送和接收数据,这通常意味着只有一路可以通讯,如RS485串口。 串口流控 在两个串口设备间传输数据时经常有必要进行数据流控。这可能是受到中间串口通信线路、其中一个设备或者其他存储介质的限制。异步数据流控通常使用的有两种方法。 第一种方法通常称为“软件”流控,使用特殊字符开始(XON or DC1)或者停止(XOFF or DC3)数据流。这些字符定义参见 ASCII 码表。这些码值在传输文本信息时很有用,但不能在未经特殊编程时用于传输其他类型的信息。 第二种方法称作“硬件”流控,使用RTS和CTS信号线取代特殊字符。当接收方准备好接收数据时会将RTS置为逻辑0以请求对方发送数据,当未准备好时置为逻辑1,因此发送方会通过检测 CTS 电平状态判断是否可以发送数据。 使用硬件流控至少需要连接的信号线有GND、RXD、TXD、RTS、CTS。 使用软件流控只需要GND、RXD、TXD。 Break信号 通常情况下收发数据信号线保持在逻辑1状态直到传输一个新字节。如果信号拉低至逻辑0一段时间(各平台定义不同,通常是 1/4 到 1/2 秒)那么就说一个 break 条件满足。一个break信号有时用于复位通讯或者改变通讯硬件的操作模式,如MODEM。 ——————————————————————————————————————————— 以上为串口使用经常遇到的问题和调试技巧,欢迎工程师讨论补充~ |
|
嵌入式 最新文章 |
基于高精度单片机开发红外测温仪方案 |
89C51单片机与DAC0832 |
基于51单片机宠物自动投料喂食器控制系统仿 |
《痞子衡嵌入式半月刊》 第 68 期 |
多思计组实验实验七 简单模型机实验 |
CSC7720 |
启明智显分享| ESP32学习笔记参考--PWM(脉冲 |
STM32初探 |
STM32 总结 |
【STM32】CubeMX例程四---定时器中断(附工 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 | -2024/12/28 2:24:50- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |
数据统计 |