单片机 MSP430 串口 计算 波特率

发布者:心灵捕手最新更新时间:2021-01-10 来源: eefocus关键字:单片机  MSP430  串口  波特率 手机看文章 扫描二维码
随时随地手机看文章

软件计算波特率地址:http://software-dl.ti.com/msp430/msp430_public_sw/mcu/msp430/MSP430BaudRateConverter/index.html

MSP430怎么计算波特率在各手册都有提到,但始终不清楚,直到看了官网的一篇文章:
https://processors.wiki.ti.com/index.php/USCI_UART_Baud_Rate_Gen_Mode_Selection

The formulas for calculating USCI UART Baud Rate Register Values are basically available in the Family User’s Guide document.

For calculating all the formula, it requires the division factor N:

N = fBRCLK/Baudrate

Where fBRCLK is basically the input clock frequency of the USCI module as shown in the USCI block diagram as follows:

在这里插入图片描述
If N >= 16, it is possible to enable the oversampling mode (setting UCOS16=1).

Low Frequency Baud-Rate Mode Setting (UCOS16=0)

In Low Frequency Baud-Rate Mode Setting, the baud rate prescaler register UCBRx and the fractional portion modulator UCBRSx can be calculated as follows:

UCBRx = INT(N) -> integer part of N

*UCBRSx = round((N - INT(N))8) -> integer rounding of fractional part of N times 8

Comparing it to the Baud Rate Setting Register Table provided in the User Guide document tidoc:slau208m Table 34-4. “Commonly Used Baud Rates, Settings, and Errors, UCOS16 = 0”-

For fBRCLK=1MHz, BR=9600: N=1000000/9600 = 104.16666667
UCBRx = INT(N) = 104
UCBRSx = round (0.16666667 * 8) = round (1.33333333) = 1
For fBRCLK=1MHz, BR=19200: N=1000000/19200 = 51,020408163265306122448979591837
UCBRx = INT(N) = 51
UCBRSx = round (0,020408163265306122448979591837 * 8) = round (0,16326530612244897959183673469388) = 0
For fBRCLK=1MHz, BR=38400: N=1000000/38400 = 26,041666666666666666666666666667
UCBRx = INT(N) = 26
UCBRSx = round (0,041666666666666666666666666667 * 8) = round (0,33333333333333333333333333333333) = 0
For fBRCLK=1MHz, BR=57600: N=1000000/57600 = 17,361111111111111111111111111111
UCBRx = INT(N) = 17
UCBRSx = round (0,361111111111111111111111111111 * 8) = round (2,8888888888888888888888888888889) = 3
For fBRCLK=1MHz, BR=115200: N=1000000/115200 = 8,6805555555555555555555555555556
UCBRx = INT(N) = 8
UCBRSx = round (0,6805555555555555555555555555556 * 8) = round (5,4444444444444444444444444444444) = 6

Oversampling Baud-Rate Mode Setting (UCOS16=1)

In Oversampling Mode Setting, the baud rate prescaler register UCBRx and the first stange modulator register UCBRFx can be calculated as follows:

UCBRx = INT(N/16) -> integer part of N divided by 16

*UCBRFx = round(((N/16) - INT(N/16))16) -> integer rounding of fractional part of N divided by 16 times 16

Comparing it to the Baud Rate Setting Register Table provided in the User Guide document tidoc:slau208m Table 34-5. “Commonly Used Baud Rates, Settings, and Errors, UCOS16 = 1”.

For fBRCLK=4MHz, BR=9600: N/16=4000000/9600/16 = 26,041666666666666666666666666667
UCBRx = INT(N/16) = 26
UCBRFx = round (0,041666666666666666666666666667 * 16) = round (0,66666666666666666666666666666667) = 1
For fBRCLK=4MHz, BR=19200: N/16=4000000/19200/16 = 13,020833333333333333333333333333
UCBRx = INT(N/16) = 13
UCBRFx = round (0,020833333333333333333333333333 * 16) = round (0,33333333333333333333333333333333) = 0
For fBRCLK=4MHz, BR=38400: N/16=4000000/38400/16 = 6,5104166666666666666666666666667
UCBRx = INT(N/16) = 6
UCBRFx = round (0,5104166666666666666666666666667 * 16) = round (8,1666666666666666666666666666667) = 8

参考代码:

在这里插入图片描述
在这里插入图片描述

//                MSP430G2xx3

//             -----------------

//         /||              XIN|-

//          | |                 |

//          --|RST          XOUT|-

//            |                 |

//            |     P1.2/UCA0TXD|------------>

//            |                 | 9600 - 8N1

//            |     P1.1/UCA0RXD|<------------


#define CPU_F ( (double) 8000000)

#define delay_us( x )   __delay_cycles( (long) (CPU_F * (double) x / 1000000.0) )

#define delay_ms( x )   __delay_cycles( (long) (CPU_F * (double) x / 1000.0) )

/* 串口波特率计算,当BRCLK=CPU_F时用下面的公式可以计算,否则要根据设置加入分频系数 */

#define baud        9600                                          /* 设置波特率的大小 */

#define baud_setting    (uint) ( (ulong) CPU_F / ( (ulong) baud) )      /* 波特率计算公式 */

#define baud_h      (uchar) (baud_setting >> 8)                     /* 提取高位 */

#define baud_l      (uchar) (baud_setting)                          /* 低位 */


void initUSART(void)

{

    P1SEL = BIT1 + BIT2;                     // P1.1 = RXD, P1.2=TXD

    P1SEL2 = BIT1 + BIT2;                    // P1.1 = RXD, P1.2=TXD

    UCA0CTL1 |= UCSSEL_2;                     // SMCLK

    UCA0BR0 = baud_l;                            // 8MHz 9600

    UCA0BR1 = baud_h;                              // 8MHz 9600

    UCA0MCTL = UCBRS1;                        // Modulation UCBRSx   2=010= UCBRS2  UCBRS1  UCBRS0

    UCA0CTL1 &= ~UCSWRST;                   // **Initialize USCI state machine**

    IE2 |= UCA0RXIE;                          // Enable USCI_A0 RX interrupt

}


关键字:单片机  MSP430  串口  波特率 引用地址:单片机 MSP430 串口 计算 波特率

上一篇:单片机 MSP430G2553 FLASH 操作
下一篇:单片机 MSP430 独立按键检测

推荐阅读最新更新时间:2024-11-12 09:23

MSP430FR6989系列教程之串口通信
一、串口通信 通用异步收发器(Universal Asynchronous Receiver/Transmitter),通常称作UART,是一种串行、异步、全双工的通信协议。 异步通信以一个字符为传输单位,通信中两个字符间的时间间隔多少是不固定的,然而在同一个字符中的两个相邻位间的时间间隔是固定的。不需要时钟线,两个设备上指定相同的传输速率,以及空闲位、起始位、校验位、结束位,也就是遵循相同的协议即可。 说的通俗点,就是收发双方约定好说话的频率,暗号,停顿和开始的标志,就像我们大家在说汉语交流的时候,你让一个河南人说着河南话去和一个说着粤语的广东人交流,显然是有些为难他们的,毕竟这两种语言具有着显著的地域特色,最后可能两人
[单片机]
<font color='red'>MSP430</font>FR6989系列教程之<font color='red'>串口</font>通信
基于STM32F105微控制器的双CAN冗余的方案设计
控制器局域网( Contro llerA reaN etwo rk, CAN)是一种多主方式的串行通讯总线。CAN 总线具有较高的位速率, 很强的抗电磁干扰性, 完善的错误检测机制, 在汽车、制造业以及航空工业领域中得到广泛应用 。由于船舶机舱环境极为恶劣, 且船舶航行过程中维修条件不如陆上, 对CAN 通信的可靠性要求很高, 采取双CAN 冗余总线提高通信可靠性。本文提出一种基于STM32F105微控制器的双CAN 冗余设计方案。   1 硬件平台组成   STM32F105是STM icroe lectron ics公司推出的一款基于ARM Co rtex- M3内核的32位微控制器, 其内核是专门设计于满足高性能、低功
[单片机]
基于STM32F105<font color='red'>微控制器</font>的双CAN冗余的方案设计
详解51单片机控制步进电机
  接触单片机快两年了,不过只是非常业余的兴趣,实践却不多,到现在还算是个初学者吧。这几天给自己的任务就是搞定步进电机的单片机控制。以前曾看过有关步进电机原理和控制的资料,毕竟自己没有做过,对其具体原理还不是很清楚。今天从淘宝上买了一个EPSON的UMX-1型步进电机,此步进电机为双极性四相(后来才知道,四相和两相步进没什么区别的!!),接线共有六根,外形如下图所示: 拿到步进电机,根据以前看书对四相步进电机的了解,我对它进行了初步的测试,就是将5伏电源的正端接上最边上两根褐色的线,然后用5伏电源的地线分别和另外四根线(红、兰、白、橙)依次接触,发现每接触一下,步进电机便转动一个角度,来回五次,电机刚好转一圈,说明此步进电机的步
[单片机]
详解51<font color='red'>单片机</font>控制步进电机
80C51单片机定时计数器的功能详解
单片机结构是什么样的,由什么模块组成 单片机(Micro Control Unit)全称微型控制单元,简称单片机(MCU),从字面意思可以了解到它其实就是一个微型的计算机系统,51单片机包含CPU(8051内核),SRAM(内存)惨不忍睹的1K,闪存(硬盘)也只有可怜的几十K,然后外围的模块基本就是下载代码用的ISP,中断模块,基本输入输出I/O模块,复位模块,串口模块,EEPROM,看门狗。单片机种类比较多,51是我们常用的单片机型号,主要应用的场合有数码家电(洗衣机,电饭锅,电磁炉,微波炉),工业现场数据采集与传输等。 80C51定时计数器有两个功能,定时功能和计数功能,定时计数器实质是一个加一计数器,无论做定时还是做
[单片机]
80C51<font color='red'>单片机</font>定时计数器的功能详解
C8051F020单片机在总磷在线自动分析仪中应用
1 概述 C8051FOXX系列单片机是Cygnal公司新推出的一种混合信号系统级单片机。该系列单片机片内含CIP-51的CPU内核,它的指令系统与MCs-51完全兼容。其中的C8051F020 单片机含有64kB片内Flash程序存储器,4352B的RAM、8个I/O端口共64根I/O口线、一个12位A/D转换器和一个8位A/D转换器以及一个双12位D/A转换器、2个比较器、5个16位通用定时器、5个捕捉/比较模块的可编程计数/定时器阵列、看门狗定时器、VDD监视器和温度传感器等部分。C8051F020单片机支持双时钟,其工作电压范围为2.7-3.6V(端口I/O,RsT和JTAC引脚的耐压为5V)。与以前的51系列单片机相比,
[单片机]
C8051F020<font color='red'>单片机</font>在总磷在线自动分析仪中应用
STC12C2052及11/10xx系列单片机通用EEPROM测试程序
近日研究STC12C2051的EEPROM的应用,发现官方只给出其汇编语言版本的程序。只有其公司最新推出的STC11/10xx系列的单片机有EEPROM的C语言测试程序。在网上搜索未果后,便自己动手修改,并将STC12C2052系列和STC11/10xx系列单片机的EEPROM测试程序整合起来,制作了一个适用性更好的程序。经在STC12C2052单片机硬件上测试正常,特此与大家分享! /********************************************************************************************* 程序名:STC系列单片机内部EEPROM 测试程序 编写人:杜
[单片机]
MCS-51系列单片机串行接口的组成和特性
  MCS-51的串行口是一个全双工的异步串行通信接口,可以同时发送和接收数据。      串行口的内部有数据接收 缓冲器 和数据发送缓冲器。数据接收缓冲器只能读出不能写入,数据发送缓冲器只能写入不能读出,这两个数据缓冲器都用符号SBUF来表示。      CPU对特殊功能寄存器SBUF执行写操作,就是将数据写入数据发送缓冲器;对SBUF执行读操作,就是读出数据接收缓冲器的内容。      与串行通信有关的特殊功能寄存器共有4个:      1、特殊功能寄存器SCON:存放串行口的控制和状态信息。      2、特殊功能寄存器PCON:最高位SMOD为串行口波特率的倍率控制位。      3、中断允许寄存器IE:D4位(ES)为串
[单片机]
51单片机C语言us级的精确延时
us级的精确延时延时,非要要汇编吗?否。请看下面例子: void delay1(unsigned char i) { while(--i); } i  delay time/us 1  5 2  7 3  9 ...
[单片机]
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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