首先看上图,usart模块的波特率值设定是通过以下三个寄存器决定的:UxBR0,UxBR1,UxMCTL ,其中UxBR1+UxBR0为整数部分,UxMCTL为设定小数部分,两者结合起来为一个16位的字
举例1:波特率=9600,时钟源=32768Hz,cpu为F5438;
N=32768/9600=3.4133333333 。很明显:UxBR1+UxBR0=3,即UxBR1=0,UxBR0=0x03,把小数部分0.4133333×8,即3.306666,取整后为3(0011),取UCOS16=0,那么UCBRSx=0x03,放入UACxMCTL寄存器就是0000 0110 = 0x06;
反推真实波特率:UxBR0=3,UCBRSx=3,真实波特率= 32768/(3+3/8)=32768/3.375=9709
举例2:波特率=9600,时钟源=32KHz,cpu为FR5994;
N=32000/9600=3.3333333333 。很明显:UxBR1+UxBR0=3,即UxBR1=0,UxBR0=0x03,小数0.3333用查表法得出UCBRSx的取值,若UCBRSx取值=0x25,那么对应的小数=0.3000,在FR5994中设置对应寄存器UCAxMCTLW=0x2500;
反推真实波特率:整数部分UxBR0=3,小数部分UCAxMCTLW=0x2500(对应小数=0.3000),因此真实波特率=32000/(3+0.3)=9697
关键字:MSP430 波特率 寄存器配置
引用地址:
MSP430 波特率寄存器配置以及反推真实波特率
推荐阅读最新更新时间:2024-11-10 01:43
MSP430ADC转化失败的原因
最近的我的一个项目中用到了MSP430F149的ADC转化,由于我需要两路模数转化,索性就使用了P6.0和P6.1口,按照User's Guide查寄存器,也参考了好多TI的官方例程,不管是单通道单次转化,还是多通道转化,结果一直都不正确,我反反复复修改了N遍程序,排除了任何可能出错的地方,可转化结果依然不对,尽管ADC的转化的特征曲线不是直线,但转化结果误差还是很大。我怀疑是430内部ADC的自身输入阻抗过小,在德州仪器的技术支持论坛上,TI总部的工程师也谈到过内部ADC的自身阻抗,在我更换了输入信号之后还是不成功。 由于我身边的朋友没有人会使用430,会的人也仅仅是Copy别人的程序,没有亲自写过ADC的程序。我不
[单片机]
MSP430使用指南2 -> CPU/CPUX
首先,先说明一下CPU位数代表的是什么意思,从市面上看8位,16位,32位甚至64位的MCU内核都已出现,位数指的是什么呢: 严谨说法:指CPU一次能处理的数据宽度,也就是参与运算的寄存器的数据长度。 MSP430 是16位的MCU 我们平时对MCU的C语言编程,都会经过编译器编译成机器码,也就是二进制,最后通过CPU内部寄存器(一般有20-100个)来实现运算数据,因此我们写的所有程序,实现的所有功能,最终都要由CPU内部寄存器的读写来完成。 CPU寄存器一般分为专用寄存器和通用寄存器,对于MSP430来说,总共有16个寄存器:R0 - R15, 其中四个(R0 – R3)为专用寄存器,其余的为通用寄存器,下面详
[单片机]
MSP430异步通信(发送)不阻塞CPU,含注释
需要硬件:USB转TTL TTL插电脑 ,再杜邦线连接430 现象:串口助手显示01 02 03 04 05 06 07 08 直接上代码 /************************* 发送数据帧的程序 利用发送中断,发送过程不阻塞CPU继续执行后续代码 Author:七禾页8 site:创客基地 缺点:必须整帧地发送数据。 需要将一次发送的数据都先整理完毕才能启动发送, 且必须等待上一帧发完才能启动下一帧的发送, 不能在程序中随时地按字节发送数据 **************************/ #include msp430x14x.h #define uint unsigned int #d
[单片机]
采用MSP430的机器人定位系统电路设计
对于在室外环境工作的移动机器人通常使用惯导/卫星组合导航方式。惯性导航系统具有完全自主、抗干扰强、隐蔽能力好和输出参数全面等优点,但它的鲁棒性极低,误差会不断随时间累积发散。卫星导航系统具有精度高、定位范围广和误差不随时间累积等优点,但其自主性差、易受外界遮挡和干扰、接收机数据更新频率低等缺点。因此工程上常常将两者互补结合使用,组成卫星/惯性组合导航系统。 本文以低功耗MSP430F149为核心,设计了能够同时实现卫星导航(GNSS)接收机、惯性测量单元(IMU)、气压高度等导航信息的高速采集与高速合路传输,并进行初步导航定位信息融合的导航系统,即可为室外移动机器人提供直接的导航服务,也可作为高精度组合导航系统的原始测量信息高
[嵌入式]
MSP430F5529的P1.7、P2.2中断和频率设置
MSP430F5529单片机的P1.7、P2.2 io口中断和频率设置程序: #include "msp430F5529.h" #define P15_H (P1IN & BIT5); #define P15_L (P1OUT & (~BIT5)); int tt=0,temp,kk,i; void delay(int ns) { int kk; while(ns--) for(kk=0;kk 120;kk++); } //******A/D转换函数设置*****// void adc1() { P1SEL |=BIT6; //转换模拟信号从P1.6输入,内部集成了转换模块 ADC12CTL0 =ADC12O
[单片机]
AVR单片机串口的波特率设置
公司有一款产品要实现通过串口更新开机画面的功能。产品用的是AVR的ATmega8单片机,配有两个通用同步和异步串行接收器和转发器(USART) 。在芯片的数据文档里给出了波特率寄存器UBRR的值的计算公式。 可是实际测试才发现,就算出的值根本不能用。也就是说,用算出的值发出的波特率根本不是想要的波特率。百思不得其解,只好上网搜搜看有没有收获。果然,网上有个仁兄的症状和我一样,也是波特率不对。看了后面的回答,觉得有一个挺靠谱的,大概是说,在用了AVR的内部RC振荡器的情况下,实际波特率会和计算值有偏差。因为芯片的内部RC振荡器频率不像外部晶振的频率那么稳定。 在不增加外部晶振的情况下,如何解决问题呢?在网没有找到什么方法,只好
[单片机]
关于MSP430的RST引脚的处理方式
前些天给MSP430G2553的小片子画了个TSSOP的转接板,方便用杜邦线连模块用。 画板子的时候把所有引脚都用2.54的排针引出,想着不会出什么问题,因为N年前在用F5438的时候就是直接用LQFP100的转接板把所有引脚引出来,插上3.3V电源片子就能跑了(对于当时只用过51的我还是很震撼的,毕竟51要跑起来外面要接一大堆东西)。 但是把这个G2553焊上去,连launchpad下程序后,发现程序怎么都不运行,还以为是买到便宜的假片子了。 量了一圈,3.3V电源正常,RST引脚2.5V!这种半高不高的电平就是典型的悬空IO的现象。 郁闷了,之前用5438没啥问题,后来的stm8 到stm32 到什么飞思卡尔的
[单片机]
基于MSP430和Zigbee的无线抄表终端设计
1 引言 随着客户数量的增多,特别是一户一表的推广,供电部门抄录客户用电数据的工作量成倍增加。传统的手工抄表不但费时、费力,准确性和及时性得不到可靠的保证,而且存在安全隐患、管理费用过高等缺点, 已不适应现代电力企业管理的需要。近年来提出了多种远程自动抄表方式,但是远程抄表系统对通信技术的数据可靠性要求很高,对功耗的要求也很苛刻,各种远程抄表方式受技术或成本制约,推广速度缓慢。本文给出了一种基于MSP430F149和Zigbee技术的无线自动抄表终端, 通信质量好、工作可靠、经济实用, 可以准确及时地将用户电能表数据抄取上传, 是一种理想的自动抄表解决方案。 在诸多的无线方案中,我们选用了近几年来一种新兴的无线传输
[单片机]