msp430 串口波特率设置说明

合集下载

MSP430串口

MSP430串口

你参考一下别人的代码看看注释很详细#include <msp430x14x.h>unsigned char RxData;//全局变量,保存接收到的数据。

void BasicClockSet(){/*下面将片外高速晶体设为MCLK分四步:(1) 起动高晶体(2) 清除OFIFG 标志位(3) 至少等待50us。

(4) 查看震荡器失效标志位OFIFG是否清0,如果没有清0,则重复1至4步直到震荡器失效标志位OFIFG清0。

与之相关寄存器为:1.BCSCTL1和BCSCTL2(基础系统时钟控制寄存器)2.IE1中断使能寄存器的第二位OFIE,振荡器失效中断使能位。

3.IFG1中断标志寄存器的第二位OFIFG,振荡器失效标志位。

4.DCOCTL数字震荡器控制寄存器。

一. BCSCTL1设置(基础系统时钟控制寄存器1):1.XT2OFF=0,外部高速晶体开。

2.XTS=0,片外低速晶体的频率,0为低频模式。

3.DIVAx=00B,不将其进行分频,即分频比为14.XT5V不使用设为0。

5.RSELx=111,DOC的电阻选择,此时DOC震荡频率达到最大10000MHZ(理想状态)。

因此BCSCTL1=0000 0111B=0x47。

二.BCSCTL2设置(基础系统时钟控制寄存器2):1.SELMx=10B,选择片外高速晶体作为MCLK。

这两位应等到振荡器失效标志位清0后才置位2.DIVMx=00B,不将其进行分频,即分频比为13.SELS=0B,选择子系统时钟为DCO4.DIVSx=00B,不将其进行分频,即分频比为15.DCOR=0B,选择芯片内部电阻。

三.DCOCTL(数字震荡器控制寄存器)1.DCOx=111,DCO频波段选择,此时诜择最大2.MODx=000,调制选择,当DCOx=111B时MODx无效。

*//*下面将片外高速晶体设为主系统时钟。

*///(1) 起动片外高速晶体BCSCTL1&=~XT2OFF;//XT2OFF的宏为0x80。

MSP430串口

MSP430串口

你参考一下别人的代码看看注释很详细#include <msp430x14x.h>unsigned char RxData;//全局变量,保存接收到的数据。

void BasicClockSet(){/*下面将片外高速晶体设为MCLK分四步:(1) 起动高晶体(2) 清除OFIFG 标志位(3) 至少等待50us。

(4) 查看震荡器失效标志位OFIFG是否清0,如果没有清0,则重复1至4步直到震荡器失效标志位OFIFG清0。

与之相关寄存器为:1.BCSCTL1和BCSCTL2(基础系统时钟控制寄存器)2.IE1中断使能寄存器的第二位OFIE,振荡器失效中断使能位。

3.IFG1中断标志寄存器的第二位OFIFG,振荡器失效标志位。

4.DCOCTL数字震荡器控制寄存器。

一. BCSCTL1设置(基础系统时钟控制寄存器1):1.XT2OFF=0,外部高速晶体开。

2.XTS=0,片外低速晶体的频率,0为低频模式。

3.DIVAx=00B,不将其进行分频,即分频比为14.XT5V不使用设为0。

5.RSELx=111,DOC的电阻选择,此时DOC震荡频率达到最大10000MHZ(理想状态)。

因此BCSCTL1=0000 0111B=0x47。

二.BCSCTL2设置(基础系统时钟控制寄存器2):1.SELMx=10B,选择片外高速晶体作为MCLK。

这两位应等到振荡器失效标志位清0后才置位2.DIVMx=00B,不将其进行分频,即分频比为13.SELS=0B,选择子系统时钟为DCO4.DIVSx=00B,不将其进行分频,即分频比为15.DCOR=0B,选择芯片内部电阻。

三.DCOCTL(数字震荡器控制寄存器)1.DCOx=111,DCO频波段选择,此时诜择最大2.MODx=000,调制选择,当DCOx=111B时MODx无效。

*//*下面将片外高速晶体设为主系统时钟。

*///(1) 起动片外高速晶体BCSCTL1&=~XT2OFF;//XT2OFF的宏为0x80。

MSP430串口波特率的设置与计算

MSP430串口波特率的设置与计算

MSP430波特率的计算给定一个BRCLK时钟源,波特率用来决定需要分频的因子N:N = fBRCLK/Baudrate分频因子N通常是非整数值,因此至少一个分频器和一个调制阶段用来尽可能的接近N。

如果N等于或大于16,可以设置UCOS16选择oversampling baud Rate模式注:Round():指四舍五入。

Low-Frequency Baud Rate Mode Setting在low-frequency mode,整数部分的因子可以由预分频实现:UCBRx = INT(N)小数部分的因子可以用下列标称公式通过调制器实现:UCBRSx = round( ( N –INT(N) ) × 8 )增加或减少UCBRSx一个计数设置,对于任何给定的位可能得到一个较低的最高比特误码率。

如果确定是这样的情况UCBRSx设置的每一位必须执行一个精确的错误计算。

例1:1048576Hz频率下驱动以115200波特率异步通讯ACLK = REFO = ~32768Hz, MCLK = SMCLK = default DCO = 32 x ACLK = 1048576Hz。

N = fBRCLK/Baudrate = 1048576/115200 = ~9.10UCBRx = INT(N) = INT(9.10) = 9UCBRSx = round( ( N –INT(N) )×8 )= round( ( 9.10 –9) × 8 )=round(0.8 )=1UCA0CTL1 |= UCSSEL_2;// 选SMCLK为时钟UCAxBR0 = 9;UCAxBR1 = 0;UCAxMCTL = 0x02;//7-4:UCBRFx,3-1:UCBRSx,0:UCOS16UCBRSx 为寄存器UCAxMCTL的1-3位,所以写入0x02(00000010)例2:32768Hz频率下驱动以2400波特率异步通ACLK = REFO = ~32768Hz, MCLK = SMCLK = DCO ~1.045MHzN = fBRCLK/Baudrate = 32768/2400 = ~13.65UCBRx = INT(N) = INT(13.65) = 13UCBRSx = round( ( N –INT(N) )×8 )= round( ( 13.65 –13) × 8 )=round(5.2)=5UCA0CTL1 |= UCSSEL_1; // 选ACLK为时钟UCAxBR0 = 13;UCAxBR1 = 0 ;UCAxMCTL = 0x0A;//7-4:UCBRFx,3-1:UCBRSx,0:UCOS16UCBRSx为寄存器UCAxMCTL的1-3位,所以写入0x0A(00001010)Oversampling Baud Rate Mode Setting在oversampling mode 与分频器设置如下:UCBRx = INT(N/16)第一个调制阶段设置如下:UCBRFx = round( ( (N/16) –INT(N/16) ) × 16 )当要求更精确时,UCBRSx也可以被设置成0-7。

MSP430串口波特率的设置与计算

MSP430串口波特率的设置与计算

MSP430串口波特率的设置与计算
波特率是指每秒钟传输的位数,单位为波特(bps)。

在MSP430中,我们可以通过计算和设置分频器的值来实现不同的波特率。

下面是计算MSP430串口波特率的步骤:
1.确定MSP430的工作频率。

2.确定所需的波特率。

3.根据波特率和工作频率的关系,计算出分频系数的值。

4.将计算得到的分频系数的低8位和高8位写入UCAxBR0和UCAxBR1寄存器。

例如,假设MSP430的工作频率为16MHz,我们想要设置的波特率为9600bps,那么计算步骤如下:
1.工作频率为16MHz。

2. 波特率为9600bps。

4. 将BRx的值分解为低8位和高8位。

假设取整数部分为104,小数部分取0.1667乘以256,得到43、则UCAxBR0的值为43,UCAxBR1的值为0。

将这两个值写入寄存器即可设置波特率为9600bps。

需要注意的是,不同型号的MSP430可能有不同的时钟源和分频系数的范围。

在设置波特率时,应查阅相关的芯片手册或数据表,对相应的寄存器进行设置。

总结起来,MSP430串口波特率的设置与计算包括确定工作频率,确定所需波特率,计算分频系数,写入寄存器。

通过合适的设置,可以实现稳定和准确的串口通信。

【MSP430趣谈】MSP430第九讲之串口使用

【MSP430趣谈】MSP430第九讲之串口使用

【MSP430趣谈】MSP430第九讲之串⼝使⽤上次⼀讲中我们说到了定时器的两种写法,⼀种是利⽤寄存器进⾏书写的,另外⼀种是利⽤官⽅库函数进⾏书写的。

我们通过对⽐这两种写法,发现库函数居然写的要⽐寄存器还多,这不是更加不⽅便了吗。

其实库函数和寄存器应该说各有好处吧,因为TI官⽅给了我们很多的寄存器定义,所以相对看起来不是那么难懂,库函数的话也相对是简洁明了的。

我个⼈的观点是,在⼀些相对寄存器较少,运⾏速度较慢的单⽚机⾥⾯我们⽤寄存器写的话是最⾼效的,对于430来说,官⽅给的库相对的话运⾏速度不会和寄存器差点哪去(具体我也没测试过,瞎说),但库函数⼀定会⽐操作寄存器慢⼀点,因为他需要多步才可以配置到寄存器。

但是之后⼤家如果接触32的话也会发现同样存在寄存器和库函数的版本,也同样是这个道理,库函数慢⼀点,但是简洁明了,⽅便。

寄存器更快,但是识别度相对会低⼀点。

但对32的72MHz的运⾏速度也就基本没什么差了。

讲了这么多想说明⼀个什么道理呢?我们现在接触的单⽚机是算很底层的操作了,很底层的设计和应⽤了,相对的,我们有ARM9等等,这些复杂的芯⽚,就已经没有办法⽤所谓的寄存器进⾏操作了,因为它拥有的寄存器实在是太多了,所以就会有系统的产⽣,让芯⽚运⾏在系统上⾯,底层的东西集成了,减少了开发难度。

之后⼤家接触了其他语⾔,⽐如c++和java,其实这两个是类似的,只要会了⼀个另⼀个也基本花⼀点时间就可以学会了。

这两个语⾔的思想也和这个类似,把很多东西封装起来,你只要懂得怎么调⽤就好了,和我们调⽤函数类似,不⽤考虑函数具体是怎么实现这个功能的。

所以希望⼤家既可以明⽩寄存器具体是怎么操作的,同时学会应⽤库函数进⾏开发。

这⼀次我们将进⼊⼀个重要的篇章,通信协议,这个我们会通过⼏个章节来讲,主要介绍下⾯三种通信协议,⼀种是串⼝UART,⼀种是SPI,⼀种是IIC,三种我们都讲通过实例来说明。

这次我们要说的是串⼝UART的使⽤,串⼝应该算是⼀种最简单的通信⽅式了,我们通常值得串⼝指的是UART-Lite,也就是说它是由四根线组成,分别是VCC,RX,TX,GND。

MSP430串口调试全记录

MSP430串口调试全记录
先交代一下相关背景:
Mcu型号:MS9430F149;
实验板:自制(有些毛病,稍后坦白:)
开发环境:IAR Embedded Workbench V2.10A+串口调试助手;
试验仪器:泰克数字示波器,万用表等;
笔者的底细:马上步入而立之年,学习点新东西,已感到有些力不从心了:)以前有些51基础,430是第一次搞!当然这些都是业余爱好,以乐以闹为主:)
UTCTL1|=SSEL0; //ACLK
UBR01=0x03; //bode rate 9600.
UBR11=0x00;
UMCTL1=0x4a;
UCTL1=CHAR; //8 bits data format. enable UART
IFG2&=~UTXIFG1;
IE2|=URXIE1; //enable receive interrupt.
没问题啊,我测到的波形在±6V左右啊,正在一筹莫展之际,想到了波特率是否一致的问题,从示波器观察PC发给430的1Bit数据的宽度约100us,频率f=10k和设定的9600非常接近,没问题;在测430发给PC的1Bit数据宽度为6.4us,频率f=156250,于是发现问题所在,重新检查源程序时钟源选择,发现程序(▲2)的疏忽,更改后,一切ok,再看<串口调试助手接收区>正反复的显示“MSP430 MSP430 MSP430 MSP430…”
以为是MAX3232的硬件(包括4个电容,典型值是0.1uF,当时没找到0.1的就用4.7uF的代替了)出问题了,或者是RS232判决电平的毛病,这时在网上搜到了如下资料:
MAX232/MAX202接口输出的电平为何比计算机输出的RS-232电平低?

串口波特率设置说明

串口波特率设置说明

串口波特率设置说明:建议波特率不要设置太高,不是说设置高了不能用
波特率设置过高会导致传输数据不稳定,会出现丢包的现象。

怎么设置波特率的问题:这款芯片有两种方法来产生波特率
第一种:用定时器来产生波特率(脉冲信号),有弊端就是占用定时器。

第二种:用BRT寄存器(波特率专用定时器)来产生波特率,但是只有一个。

所以如果需要双串口同时通讯,则必须使用一个定时器,和一个BRT定时器。

一般串口发送数据都是选择模式一,或者模式三(波特率可变)。

(因为模式二和模式四波特率是固定的)。

所以在此我不多说波特率二和四。

T1X12这个标志位是来定义时钟分频(关系到定时器的速度,如果设置为1,则定时器不12倍分频,则波特率速度快12倍)。

默认为0,就是不设置,则定时器时钟12分频,和普通52速度一样。

BRTX12 这个标志位和T1X12差不多,只是它是来设置的快速波特率时钟分频,设置为1,不分频。

默认为0,则12分频,(波特率慢12倍)。

我自己理解的,错了请指正。

例:11.0592MHZ晶振,1T工作模式
波特率设置值=256 - INT(1105920/9600/(32+0.5))
=256 - 3
=253
十六进制,加上修正值是FD。

msp430g2553串口通信

msp430g2553串口通信

MSP430g2553串口通信MSP430的不同型号,其串行通讯工作模式是一样的。

以MSP430G2553为例进行说明。

MSP430G2553是20个引脚的16位单片机。

具有内置的16位定时器、16k 的FLASH 和512B 的RAM ,以及一个通用型模拟比较器以及采用通用串行通信接口的内置通信能力。

此外还具有一个10位的模数(A/D)转换器。

其引脚排布如图1.1所示。

其功能表如表1.1所示。

串行通讯模块主要由三个部分组成:波特率生成部分、发送控制器以及接收控制器。

如图1.2所示。

一、UART 模式在异步模式下,接收器自身实现帧的同步,外部的通讯设备并不使用这一时钟。

波特率的产生是在本地完成的。

异步帧格式由1个起始位、7或8个数据位、校验位(奇/偶/无)、1个地址位、和1或2个停止位。

一般最小帧为9个位,最大为13位。

图1.2 串行通讯模块内部结构图图1.1 MSP430G2553引脚图(一)UART的初始化单片机工作的时钟源来自内部三个时钟或者外部输入时钟,由SSEL1、SSEL0,以决定最终进入模块的时钟信号BRCLK的频率。

所以配置串行通讯的第一步就是选择时钟。

通过选择时钟源和波特率寄存器的数据来确定位周期。

所以波特率的配置是串行通讯中最重要的一部分。

波特率设置用三个寄存器实现:UxBR0(选择控制器0):波特率发生器分频系数低8位。

UxBR1(选择控制器1):波特率发生器分频系数高8位。

UxMCTL 数据传输的格式,以及数据传输的模式是通过配置控制寄存器UCTL来进行设置。

接收控制部分和发送控制部分。

首先需要串行口进行配置、使能以及开启中断。

串口接收数据一般采用中断方式,发送数据采用主动发送。

当接收到一个完整的数据,产生一个信号:URXIFG0=1(类似于51单片机的接收中断标志位),表示接收完整的数据。

当数据正在发送中,UTXIFG0=1,此时不能再发送数据,必须等当前数据发送完毕(UTXIFG0=0)才能进行发送。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

TI MSP430系列单片机,usart模块的波特率值设定是通过以下三个寄存器决定的:UxBR0,UxBR1,UxMCTL
波特率=BRCLK/N ,主要是计算出N。

BRCLK:时钟源,可以通过寄存器设定何为时钟源; 通过寄存器UCAxCTL1的SSEL两位选择,01:ACLK,02:SMCLK
N:波特率产生的分频因子。

N=UxBR1+UxBR0+UxMCTL,其中UxBR1+UxBR0为整数部分,UxMCTL为设定小数部分,其中UxBR1为高位,UxBR0为低位,两者结合起来为一个16位的字。

举例说明:波特率=115200,时钟源=8MHz ,为外部晶体振荡器
N=8000000/115200=69.44 。

即UxBR1=0,UxBR0=0x45,首先把小数部分0.44×8,即3.52,取整后为3。

这个3表示在UxMCTL中的8位里要有3个1,并且,UxMCTL分为First Stage Modulation和Second Stage Modulation,也就是前者为高4位,取值范围0-F,后者为低4位,注意后4位最好选择偶数。

把上步的到的小数部分取整后的数值分散到高位和低位,如3,可以写为0x16。

相关文档
最新文档