当前位置:首页 > 单片机 > 单片机
[导读] UART串口,作为单片机最常用的通讯接口已经深入每一个嵌入式工程师的脑海。UART串口有着简单、实用的特性,嵌入式工程师常常用来将其作为调试系统的重要工具。UART串口的配置参数有很多,但是最常用,且需要修改的参

 UART串口,作为单片机最常用的通讯接口已经深入每一个嵌入式工程师的脑海。UART串口有着简单、实用的特性,嵌入式工程师常常用来将其作为调试系统的重要工具。UART串口的配置参数有很多,但是最常用,且需要修改的参数只有通讯波特速率这一个。可是这仅有的一个参数又常常给我们带来许多困扰。那么,我们对于串口波特速率该如何识别呢?笔者在这里介绍三种识别串口速率的方法,供大家参考。

UART(Universal Asynchronous serial Receiver and Transmitter)异步串行接收/发送接口,是嵌入式系统里最为重要的接口之一,它不仅用于板级芯片之间的通讯,而且应用于实现系统之间的通信和系统调度中。UART作为异步串口通信协议的一种,工作原理是将传输数据的每个字符一位接一位地传输,其字符数据帧格式如下图所示:

图1 UART字符数据帧格式

从上面图中的帧格式可以看出,UART数据帧由1个开始同步位,1个数据字,1个结束停止位,以及可选的校验位组成。由于UART为异步通讯,因此,其按位发送时必须严格遵守设定的波特率,而接收方也必须在相同的波特率下才能正确解析发送的字符数据。于是,接收方正确识别、配置波特率就相当关键了。下面笔者根据实际经验介绍三种识别串口波特率的方法:

穷举法

理论上,发送波特率可以设定为任意的值,但是平时我们使用的串口速率只有这么几种数值,如图2所示:

图2 常用串口波特速率

既然知道了常用串口速率,于是我们就可以一个一个试,总会有一个是成功。当然前提是我们知道主机发送的内容是什么,否则如何才能知道串口速率正确匹配呢!这里必须注意,在设定波特率与实际波特率成倍数的情况下,是可以读出来数据——当然,数据是错误的。

示波器法

示波器被秒为电子工程师的“眼睛”,我们可以就用这双眼睛来“看”出串口发送数据的波特率。这里我们先排除掉高端的带有数字逻辑分析功能的示波器,因为,这样的示波器已经远超笔者的IQ了,不是我们本篇讨论的内容。

上一部分,我们讲述了波形的帧格式,这里我们就利用波形,发送一个特殊的字符0x55(1010 1010B)。从理论上面分析,这个波形应该会产生一个按位翻转的波形效果。图3是笔者使用示波器采集下来的截图:

图3 9600bps发送0x55波形图

看到图3所示的波形图,再加上理论分析,我们知道波形是按位翻转,于是我们使用示波器的指针功能(cursor)来直接查看波特率。如图3左上角的测量结果显示,每位翻转的频率为9.615KHz,与我们设定的频率9600kbps基本相符,可以确定此发送频率为9600bps。

芯片自识别法

UART串口常常用来做为固件升级使用的接口,因此,其波特率要根据上位机的实际情况而定。如果环境较差时,就需要使用低波特率的通讯。这时,自动波特率识别的方法就诞生了。下面我们以TI Stellaris里bootloader里的串口波特率自动识别源程序为例进行分析:

int UARTAutoBaud(unsigned long *pulRatio){

long lPulse, lValidPulses, lTemp, lTotal;

volatile long lDelay;

// 配置systick,将其值设定为最大值;

HWREG(NVIC_ST_RELOAD) = 0xffffffff;

HWREG(NVIC_ST_CTRL) = NVIC_ST_CTRL_CLK_SRC | NVIC_ST_CTRL_ENABLE;

// 打开引脚的边沿触发中断

HWREG(GPIO_PORTA_BASE + GPIO_O_IBE) = UART_RX;

// 使能UART RXD引脚边沿触发中断

HWREG(NVIC_EN0) = 1;

// 采集引脚边沿中断,两个字节的边沿

while(g_ulTickIndex < MIN_EDGE_COUNT)

{

}

// 计算systick采样下来的值,对溢出进行处理

for(lPulse = 0; lPulse < (MIN_EDGE_COUNT - 1); lPulse++){

lTemp = (((long)g_pulDataBuffer[lPulse] -

(long)g_pulDataBuffer[lPulse + 1]) & 0x00ffffff);

g_pulDataBuffer[lPulse] = lTemp;

}

// 此循环计算两个连续脉冲之间的宽度

for(lPulse = 0; lPulse < (MIN_EDGE_COUNT - 1); lPulse++){

// 精确计算两个连续脉冲之间的宽度

lTemp = (long)g_pulDataBuffer[lPulse];

lTemp -= (long)g_pulDataBuffer[lPulse + 1];

if(lTemp < 0) {

lTemp *= -1;

}

// 验证两个边沿的脉宽是否正确,其算法如下:

// abs(Pulse[n] - Pulse[n + 1]) < Pulse[n + 1] / PULSE_DETECTION_MULT

// 或者

// PULSE_DETECTION_MULT * abs(Pulse[n] - Pulse[n + 1]) < Pulse[n + 1]

if((lTemp * PULSE_DETECTION_MULT) < (long)g_pulDataBuffer[lPulse + 1]) {

lTotal += (long)g_pulDataBuffer[lPulse];

lValidPulses++;

}

else{

lValidPulses = 0;

lTotal = 0;

}

// 7个有效脉冲,就可以计算UART串口速率

if(lValidPulses == 7) {

// 将最后一个脉冲加入计数器,并计算波特率

lTotal += (long)g_pulDataBuffer[lPulse];

*pulRatio = lTotal >> 1;

// 返回成功标识

return(0);

}

}

// 检测失败

return(-1);

}

UART串口有着这样或者那样的优点,但新兴的USB接口的USB DFU功能可以更加有效替代串口来完成固件升级;性能优越的CAN总线,其硬件价格不断下降,而且CAN总线的MAC接口更多集成在最新MCU芯片上;CAN2.0B接口正在挤压着UART接口器件的市场;对于我们普通民众,现在新型号电脑已经没有DB9串口座。在残酷的现实下,多年后也许只有我们电子工程师才会记得曾经的简单、实用的UART串口

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

串行通信需要传输的数据通过调制器(Modulator)将数据转换为模拟信号,经过信号调制(Modulation)后在传输线上传输,接收端通过解调器(Demodulator)将信号解码还原成原始数据。

关键字: 串口 串行通信 并行通信

51 单片机内部有一个全双工串行接口。什么叫全双工串口呢?一般来说,只能接受或只能发送的称为单工串行;既可接收又可发送,但不能同时进行的称为半双工;能同时接收和发送的串行口称为全双工串行口。串行通信是指数据一位一位地按顺...

关键字: 单片机 全双工 串口

上海2023年2月17日 /美通社/ -- 2月16日,全球领先的物联网解决方案提供商移为通信宣布,推出两款双SIM卡高性能LTE Cat. 4工业路由器。WR201LEU面向欧洲市场发售,支持GNSS定位的WR201L...

关键字: LTE SIM卡 路由器 通信

为游客提供全天候互动信息及导游服务 香港2022年12月15日 /美通社/ -- 紧贴世界不断进步的潮流和胍搏,香港大富翁梦想世界™将与诺达科技机械人(Novelte Robotics)携手推出机械人管家服务,在主题体...

关键字: BSP LTE NOVEL GB

串口是“串行接口”的简称,即采用串行通信方式的接口。串行通信将数据字节分成一位一位的形式在一条数据线上逐个传送,其特点是通信线路简单,但传输速度较慢。因此串口广泛应用于嵌入式、工业控制等领域中对数据传输速度要求不高的场合...

关键字: 串口 RS232 同步传输

北京2022年11月11日 /美通社/ -- 为加强中国临床案例成果数据库(以下简称"案例库")的内容建设,进一步丰富案例库资源,11月4日下午,中华医学会杂志社与威科集团(Wolters Kluwe...

关键字: 数据库 MEDICINE 大赛 LTE

(全球TMT2022年11月5日讯)马斯克完成收购推特;谷歌收购AI虚拟形象初创公司Alter;美国司法部审查Adobe收购Figma交易;美国法官阻止企鹅兰登22亿美元并购案;Meta收购Giphy交易被正式否决等。...

关键字: 马斯克 IP AIR LTE

北京2022年11月2日 /美通社/ -- 2022年10月13日,由威科与汇业律师事务所联合主办的上海法务大会在沪圆满落幕。作为一年一度的行业盛会,300多位来自不同行业的企业法律顾问和业界专家相聚申城,多维度、多角度...

关键字: 供应链管理 BSP LTE RS

串口作为单片机开发的一个常用的外设,应用范围非常广。大部分时候,串口需要接收处理的数据长度是不定的。那么怎么才能判断一帧数据是否结束呢,今天就以STM32单片机为例,介绍几种接收不定长数据的方法。

关键字: 单片机 串口 STM32

这是FPGA之旅设计的第十例啦,在上一例中,已经成功驱动了OLED屏幕,本例将结合上一例,以及第四例多bytes串口通信做一个有趣的例程。

关键字: FPGA OLED屏 串口
关闭
关闭