A. 单片机串行通信程序调试原因
串口UART作为嵌入式应用和通讯领域中最常用的接口之一,接口协议虽然简单,但在实际应用中不同设备之间的通讯也会存在各种小问题,下面对使用中各种常见的问题做下总结和梳理,可作为调试参考。串口可分为异步串口(UART)和同步串口(USART),后者多出时钟信号线用作通讯时信号同步。本偏仅介绍异步串口。
一、串口通信常见问题
串口通信乱码
串口通讯乱码通常是指接收方接收到的数据不符合预期,出现此情况时需要考虑的因素通常包含以下几个方面:
双方设定的串口参数是否匹配,需检查设置的:串口波特率、串口数据格式等参数。
串口通讯电压不匹配,不同的串口设备接收可正常进行解码的高低电平门限不同,如同样是3.3V串口通讯,A设备低电平门限1.5V,B设备低电平门限1V。当实际串口电压低电平只有1.5V时,B设备无法正常接收数据。又如:A设备为5V串口,B设备为3.3V串口,同样有电压不匹配的问题。
串口通讯实际工作波特率误差较大,即:串口工作实际波特率和理论值偏差较大,因一些MCU和串口设备所用时钟为了兼顾其他资源和应用需要,实际工作的串口速率和设定会有偏差。比如:标称为9600bps时,实际工作在了10000bps(误差超过4%),此时可能已经超出接收方的设计标准。
串口通讯信号质量差,如通讯时信号上升下降抖动严重,信号有过冲或者变化比较迟缓,此时检查硬件上共地是否良好,以及线路上有无串接/并联其他器件导致。
数据格式显示问题,通常使用十六进制或ASCII码格式居多,使用时需要区分。
串口无法发送
串口无法发送通常是指与此串口的TXD连接的对端设备RXD通道接收不到任何数据,总结如下:
使用仪器对TXD通道进行实际测量,观察硬件波形,确定信号是否有输出以及是否正常。(串口电压、串口信号上升下降时间)
短接设备的TXD和RXD通道回环测试,看自收发是否可以成功。排除是自身设备异常还是对端异常。
确定应用软件是否打开串口硬件流控,如当启用RTS/CTS硬件流控后但实际该引脚并没有连接或连接但不生效时,按照协议规定,CTS输入无效则发送方暂停发送数据。
MCU软件编码问题或计算机端软件工作异常。
串口无法接收
当串口接收不到任何数据的原因通常如下:
对端串口实际未能成功发送数据。
串口发送有效电压不满足芯片接收解码要求。
MCU软件编码问题或计算机端软件工作异常。
二、常用的排查小技巧
对于以上的常见串口调试问题,有以下几个方法和技巧可供参考使用。
使用硬件仪器
善于使用示波器等硬件采集或分析工具查找问题,用此方法可以确定线路上信号的串口电压、串口数据格式、串口通信波特率等参数。
串口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 来表示。
B. 单片机中的位选与段选的区别
单片机中的位选与段选的主要区别为:
1、数字显示不同
段选用于控制数码管的笔画,也就是数码管显示数字内容,字母也可以显示。
位选用于控制多个数码管中的一个或几个数码管是否显示数字或字符。
2、关闭是否显示内容不同
位选如果关闭就不会显示任何内容。
3、重影问题
位选与段选都需要不同的消隐方法,需要根据外部硬件来适当修改。基本思路就是别让上次遗留的IO状态影响到当前需要的数据。但是数码管动态扫描要求比较高,在设计的时候按经验来说的话都说先段选,
例如:
wei = 1; 先关闭数码管位选
P0 = 0xC0; 段选赋值
wei = 0; 开启位选
Delay(); 延时这里延时是停留时间,
如果先段选在为选,会出现重影。
(2)单片机消除重影扩展阅读:
以4位7段共阴极数码管为例:
4位就是指4个数码管,7段就是指数码管的a到g段。
位选控制哪个数码管选通,段选控制每个数码管a到g段哪个点亮。
如果是共阴极,那么每个数码管的led阴极连在一起(即位选),那么只有位选为低才选通,此时如果段选为高,则数码管点亮(4个数码管的所有段选是连在一起的)。总言之应该是:位选是选中它,段选才是让它显示什么数。
C. 什么是数码管的消影单片机是如何做的
这是数码管动态扫描显示方式造成的:当你在数码管上循环显示1,2时,(过程是在所有位的数码管上送出1的段码,然后只给第一位使能,就会在第一位上显示1,以此类推)因为人有视觉暂留,当显示完1后,再显示2,如果间隔时间过短,那就会感觉1、2两个数字是叠加在一起显示的:如果你在两位数码管上显示,那就会两位同时显示出叠加字--重影了。
那就要消影:单片机要做的是,当第一位显示完1后,给出信号,关闭数码管,然后再第二位显示2,就不会重影了。