
前言:什么是UART
通用异步收发传输器(Universal Asynchronous Receiver/Transmitter),通常称作UART(串口通讯),是一种异步收发传输器,异步意味着没有时钟信号来同步从发送设备进入接收端的输出位,因此通讯双方必须设定相同的波特率才能成功通讯。(波特率:每秒钟可以传输多少个bit)。
一、波特率允许的误差范围
1.1:串口发送每一个字节都有一个起始位做同步,所以误差只会在一个字节内累计,在最后一个位采样时,允许极限误差为0.5位。 1.2:当串口选择模式2或3--- 9位串口通讯由起始位、数据位、效验位、停止位组成。即1+8+1+1=11位。0.5/11=4.54%, 2个IC间允许最大频率误差是4.54%;每个IC允许的误差范围是±2.27%。
1.3:当串口选择模式0或1--- 8位串口通讯由起始位、数据位、停止位组成。即1+8+1=10位。0.5/10=5%, 2个IC间允许最大频率误差是5%;每个IC允许的误差范围是±2.5%。
二如何计算MCU主频是否能得到准确的波特率
海速芯MCU常用波特率模式为模式1、模式3。是否可以设定到用户所需的波特率,一般利用“主频Fsysclk÷32÷波特率=? ”, 结果得到的是整数,或者非常接近整数则可以输出到对应的波特率。
以TM52F1363 16.588M为例:
16.588*1000000÷32÷19200=26.998, 如果KEIL用宏定义自动计算波特率则会出错,因为电脑自动取整数,得到是26,导致误差3.8%。把主频宏定义适当改为16.589M, 16.589*1000000÷32÷19200=27.0003, 电脑自动取整27,理论波特率误差万分之0.48。
注意:以上均是主频跑1分频计算结果,如跑2分频,部分波特率超范围,不可取。如何填充计数值TH1:
例如:TM52F1363主频1分频,波特率设定19200,重装计数值为27,SMOD=1则TH1=256-27。
三、设定好波特率后必须用示波器确认是否正确
以9600波特率为例:
下图UART发送AA/55实际波形频率是4.799K,4799*2/9600=0.99979. 误差约0.02%,也可以用1 bit的时间计算(下图是104.2us),1/104.2*1000000=9596.9。
常温下正常IC波特率误差应该在1%以内。(注意获取频率应该采用示波器measure 自动获取),如果发现波特率误差在2%以上,一般是设定参数不对,需要检查程序。
四、需要考虑温度变化对波特率的影响
以TM52F1363为例子,IRC内振频率在不同电压下受到温度的影响也不同。温度漂移建议控制在1%以内。因为常温下IC本身偏差就可能在1%左右, 总体应该控制在±2.27%以内。
五、TXD,RXD IO的设定
TXD建议设为推挽输出,RXD应当设为输入上拉电阻模式。
来源:海速芯 十速
免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。