单片机MSP430精准配置高速串口波特率的方法

发布者:电子科技爱好者最新更新时间:2018-03-20 来源: eefocus关键字:单片机  MSP430  高速串口  波特率 手机看文章 扫描二维码
随时随地手机看文章

    在实际项目大批量生产调试设备时,笔者发现同样版本的程序在不同设备上运行时效果不一致,一部分设备串口通信正常,另外一部分串口通信不正常。通过示波器对多个设备的串口波特率及系统时钟频率测试,发现不同设备之间的系统时钟频率及波特率存在差异,与理论值不一致,用示波器测试出的系统时钟频率及波特率与理论值偏差较大。由于系统时钟频率的偏差导致波特率设置值超过了串口所允许的最大误差值,故而导致串口通信失败。其根本原因是系统的时钟频率会随环境温度、电压或其他因素变化。

    1 原因分析
    在异步通信中,波特率是很重要的指标,表示为每秒传送二进制数码的位数,反映了异步串行通信的速度。MSP430的波特率发生器使用一个分频计数器和一个调整器来构成分频因子,此方法能够用较低时钟频率实现高速通信,从而在系统低功耗的情况下,实现高性能的串行通信。MSP430波特率发生器的时钟源可以为通用时钟(Universal CLOCk,UCLK)、辅助时钟(Auxiliary Clock,ACLK),子系统时钟Subsystem Master Clock,SMCLK)。其中,ACLK通常为32 768 Hz,稳定但无法满足高速串口通信;SMCLK为可配置的系统频率,可满足高速串口通信,但不稳定。SMCLK是由数字控制振荡器(DigitallycontrolLED Oscillator,DCO)的调节器模块混合两个频率Fdco和Fdco+,用以产生介于Fdco和Fdco+1之间的频率。从本质上来说,这种调制将时钟能量扩散到一个宽带中,减少了电磁干扰(EMI)。但这样得到的平均频率的调制时钟,其负面影响的表现形式就是频率的抖动。
    DCO频率会随着温度和电压的变化而有所波动,在fDCO=1 MHz时,飘移频率随漂移温度变化的比例为0.1%/℃,飘移频率随漂移电压变化的比例为1.9%/V。因此使用SMCLK作为串口时钟源时,用理论频率计算的分频因子和实际频率分频因子有差异,导致串口无法通信。

2 解决方案
2.1 方案1——自动波特率检测模式
    MSP430串口通信支持自动波特率检测,在这种通信模式下,在数据帧前面会有一个包含打断/同步域的同步序列,如图1所示。为了LIN的一致性,该模式下字符格式应为8个数据位,低位优先,没有奇偶校验位和停止位,且地址位不可用。在接收打断/同步域时,串口是不能发送数据的,如果在帧错误下接收到一个0H字节,那么此时发送的任何数据都会遭到破坏。由此可见其通信过程较复杂,使用不便。

a.JPG

    
2.2 方案2——外接高频晶振
    MSP430可外接稳定的高速晶振,但该系列芯片设计为超低功耗的单片机,如外接高频晶振,与该系列低功耗设计理念相违背。即MCU进入低功耗模式(Low-Power Mode,LPM)下晶振并不进入低功耗模式,且会一直耗电,因此会增加系统的耗电量,减少续航时间。
2.3 方案3——根据时钟源自动计算波特率
    可使用内部低频晶振,通常为32 768 Hz。经过DCO调节器,产生较高的可供串口高速通信的频率FSMCLK。该频率是由DCO调节器模块在32个DCO时钟周期内混合Fdco和Fdco+1产生的介于Fdco和Fdco+1之间的频率,该调节模式从本质上减小了电磁干扰。并且FSMCLK会在MCU进入LPM模式后自动关闭以节电,直至MCU退出低功耗模式。得到高频时钟后,可通过两个定时器精准计算出FSMCLK,并根据该值设置波特率,此方法可消除器件差异性,以保证单片机串口在不同温度和电压下正常工作。该方案简单、易实现、抗电磁干扰强、省电效果好,并且从一定程度上消除了系统频率随温度、电压变化所带来的影响。该方案优于方案1和方案2;其实现流程如图2所示。

b.JPG

3 系统工作频率计算
    对于定时器A0,其时钟源频率为F0,使定时器A0工作在计数器模式下并设置每计数T0次产生一次中断,即每中断一次的时间t0为:
    c.JPG
    对于定时器A1,其时钟源频率为F1,使定时器A1工作在计数器模式下并设置每计数T1次产生一次中断,即每中断一次的时问t1为:
    d.JPG
e.JPG

4 波特率设置
    对于给定串口时钟源BRCLK,分频因子N满足:
    N=BRCLK/Baudrate
    分频因子N常常不是整数,因此,至少需要一个分频计数器和一个调整器来产生一个近似于分频因子N的数。
    在低频模式下,整数部分分频因子满足:
    UCBRx=INT(N)
    且分数部分满足下列公式:
    UCBRSx=round[(N-INT(N))×8]
    设置波特率程序如下:
    division_factor=f_smclk/(Baudrate*1.0);
    UCA0BR0=(int)division_factor;
    UCA0BR1=((int)division_factor)>>8;
    UCA0MCTL|=(int)((division_factor_(int)division_factor)*8);

5 方案验证
    如方案3所述,先测出串口时钟源的当前频率,再根据该频率设置波特率寄存器及调整器的值。将修改后的程序下载到串口能通信和串口不能通信的多个设备进行验证。通过示波器测试发现,被测设备的时钟频率存在差异,各设备之间的频率不一定相同,同时发现串口的实际波特率与理论波特率一致,其表现形式为串口能正常通信。至此,方案3通过验证,该方案可有效避免因串口时钟源时钟偏移导致不能通信的问题。

结语
    实践证明,计算出内部时钟经过倍频后的高频时钟,再根据该时钟频率设置串口波特率的方法可行。该方法从纯软件的角度有效地解决了单片机内部时钟频率不稳定,单片机因环境温度、气压、电磁等导致系统时钟频率偏差,以及单片机器件之间的差异性等因素导致串口通信失败的问题。

关键字:单片机  MSP430  高速串口  波特率 引用地址:单片机MSP430精准配置高速串口波特率的方法

上一篇:基于MSP430F149单片机的高精度温箱温度控制系统设计
下一篇:单片机多任务的实现方式

推荐阅读最新更新时间:2024-03-16 15:58

基于AT89C52单片机的光立方
void main() { P0M0 = 0xff; P0M1 = 0x00; P3M0 = 0xff; P3M1 = 0x00; P1M0|=0x06; P1M1|=0x06; //timer1_init(); while(1) { DisplayMode2(); } } void timer1() interrupt 3 { TH1 = 0; TL1 = 0; if(S_1==1 && S1()) { TimeDelay++; if(TimeDelay MAX_Delay) TimeDelay = MIN_Delay; while(S1()); } if(S_2==1 && S2()) { } }
[单片机]
51单片机学习笔记0 -- 仿真软件安装(Protues8.0)
对于学习51单片机的小伙伴或者新手来说,在手头没有51开发板的情况下,光有一套代码无法去做功能验证,这时候电路仿真软件就派上很大的作用了;不过有个问题就是需要新学习一个新的软件(仿真软件),这里说的仿真软件不是数电模电的仿真软件,而是protues,这一篇来说说protues的安装破解流程,博主用的是protues 8.0,现在最新的版本应该去到8.好多去了 1.解压protues8.0安装包 该教程适用于protues 8.0破解版,在官网下载的还需要买序列号那些好像 解压安装包后可以看到有个setup.exe的执行文件和一个Crack文件夹 2.安装 右键setup.exe以管理员身份运行 开始protues 8安
[单片机]
51<font color='red'>单片机</font>学习笔记0 -- 仿真软件安装(Protues8.0)
关于单片机硬件设计原则细解
  下面是总结的一些设计中应注意的问题,和开关电源模块单片机硬件设计原则,希望大家能看完   (1) 在元器件的布局方面,应该把相互有关的开关电源模块元件尽量放得靠近一些,例如,时钟发生器、晶振、CPU的时钟输入端都易产生噪声,在放置的时候应把它们靠近些。对于那些易产生噪声的器件、小电流电路、大电流电路开关电路等,应尽量使其远离单片机的逻辑控制电路和存储电路(ROM、RAM),如果可能的话,可以将这些电路另外制成电路板,这样有利于抗干扰,提高电路工作的可靠性。   (2) 尽量在关键元件,如ROM、RAM等芯片旁边安装去耦电容。实际上,印制电路板走线、引脚连线和接线等都可能含有较大的电感效应。大的电感可能会在Vcc走线上引起严
[单片机]
松翰单片机内部8位分辨率ADC
;目的学习内部8位分辨率ADC及数据处理 ;完整代码下载:http://www.51hei.com/f/shrad.rar CHIP SN8F27E65 //{{SONIX_CODE_OPTION .Code_Option WDT_CLK Flosc/4 .Code_Option Reset_Pin P04 .Code_Option LVD LVD_Max ; 3.3V Reset .Code_Option Watch_Dog Disable ;关闭看门狗 .Code_Option Low_Fcpu Flosc/1 .Code_Option High_Clk IHRC_16M ; Internal 16M RC Oscill
[单片机]
以PIC单片机为核心的步进电机自适应控制技术研究
1、引言 步进电机是一种离散运动的装置,它和现代数字控制技术有着紧密的本质的联系。步进电机亦是一种将电脉冲转化为角位移或直线位移的执行机构,当步进电机驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度(又称之为步进角),为此可以通过控制脉冲个数来控制角位移量,从而达到准确定位的目的;同时可以通过脉冲频率来控制步进电机的转动速度和加速度,从而达到调速的目的。从以上所述可知,步进电机是可以用脉冲信号直接进行定位控制,由于其具有一定的精度,且控制线路简单,使用方便、可靠;因此它广泛地应用于工业自动控制、数控机床、组合机床、机器人、计算机外围设备(扫描仪、磁盘驱动器、打印机)、照相机(包括光学照相机与数码照相机),投
[单片机]
以PIC<font color='red'>单片机</font>为核心的步进电机自适应控制技术研究
单片机与PC通信的简化接口设计
  在单片机系统的设计中,经常遇到需要与PC进行通信的问题。一般单片机都提供有UART接口,而普通PC机也都有1~2个RS-232口,所以,实际使用时经常用RS-232进行单片机与计算机间的通信。在近距离通信中,以零调制三线经济型使用最为广泛。   RS -232标准是广泛使用的串行通信标准,但使用的电平与TTL和MOS电平完全不同,逻辑“0”至少为+3V,逻辑“1”至少为-3V,而单片机系统则使用TTL电平或MOS电平。因此,需要使用接口电路来实现TTL电平或MOS电平与RS-232电平之间的转换。目前已有现成的接口芯片可供选用,价格低一些的如MC地488(将TTL电平转换为RS-232C标准电平)和MC1489(将RS-232
[单片机]
<font color='red'>单片机</font>与PC通信的简化接口设计
时钟芯片SD2200ELP与AVR单片机TWI接口控制的设计
  在提升机制动闸瓦间隙实时在线检测的设计中,需要保存故障时间和故障数据。   大部分仪器仪表中都要使用时钟芯片,但是很多的实时时钟芯片(如PCF8563)没有掉电保护,须外接晶振和电池,比较麻烦。而深圳兴威帆电子技术有限公司生产的SD2200ELP是内置32 KBE2PROM的串行实时时钟芯片,不需要外接器件支持,连线简单、可靠,提供的数据精确,断电后也能继续工作。微控制器采用Atmel公司的ATmegal6单片机,利用AT-megai6的硬件TWI接口可直接对SD2200ELP进行操作,无需软件模拟I2C方式,使用方便、可靠。   1 SD2200L简介   SD2200L系列(包括SD2200B/C/D/E/FLP)是一
[单片机]
时钟芯片SD2200ELP与AVR<font color='red'>单片机</font>TWI接口控制的设计
STMCU应用过程中与电源相关的案例分享
我们在从事STM32单片机的应用开发及调试过程中,往往会碰到各类异常。其中有不少比例的问题跟电源有关。对于一个电子产品而言,电源部分很关键、很重要,但在实际开发调试中,我们偶尔会有意无意的忽视它。这里分享几个实际案例,以加强刺激,加深印象。 毕竟因为电源问题可能导致的异常很多很多,这里分享几个案例算是抛砖引玉,希望大家在调试中对电源方面加以重视。个人认为,往往电源出问题时导致的异常时并不太好分析。多数时候异常表现得更为诡异或没章法。 注:下面提到的案例中异常原因都与电源有关,但并不是说出现类似异常时一定是电源的原因。 下面主要分享五个基于STM32应用的案例。 案例1:STM32芯片的PLL无法正常工作。 有人使用STM3
[单片机]
STMCU应用过程中与电源相关的案例分享
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved