幸运时时彩平台

MSP430F5529波特率的设定,

2020-06-16来源: eefocus关键字:MSP430F5529  波特率  UART

1、用两个例子解释UART中波特率的设定,以及UART的基本使用,具体的内容都在注释里面。

2、UART有两种设定波特率的方式,分别为低频模式和oversampling模式,分别用一个程序解释。

3、与波特率相关的寄存器有

(1)UCAxCTLn

(2)UCAxBRx

   UCA1BR0 为N的0-7位

   UCA1BR1 为N的8-15位

3、UCA1MCTL

 其中包括UCBRSx :第二阶段调制

 UCBRFx :第一阶段调制,在选择oversampling模式时用

 UCOS16 :是否选择oversamlpling模式

4、计算公式为

 N = f BRCLK /Baudrate

 UCBRx = INT(N)

 UCBRSx = round[( N – INT(N)) × 8]

///////////////////////////////////////////////////////////////

下面上代码

一、低频模式


/*

幸运时时彩平台 本例程使用oversampling模式配置波特率,oversampling用于高频时钟的时候(让波特率更精确,

但是根据user's guide里面给的典型波特率表,高频时候也可以不用这个) 

Oversampling模式的计算公式为

UCBRx = INT(N/16)

UCBRFx = round([(N/16) – INT(N/16)] × 16) 

幸运时时彩平台 //   ACLK = REFO = ~32768Hz, MCLK = SMCLK = default DCO = 32 x ACLK = 1048576Hz

*/ 

/*

9.16进行第一次更改,让此程序适用于MSP430F5529LP,使用USCI_A1进行uart传输. 

*/

#include


int main(void)

{

  WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT

  P4SEL = BIT4+BIT5;                        // P3。4,5 = USCI_A0 TXD/RXD

  UCA1CTL1 |= UCSWRST;                      // **Put state machine in reset**

  UCA1CTL1 |= UCSSEL_2;                     // SMCLK

  UCA1BR0 = 6;                              // 1MHz 9600 (see User's Guide)

  /*

  1048576/9600=N

  N/16=6.8266 取整数为6 

  */

  UCA1BR1 = 0;                              // 1MHz 9600

  UCA1MCTL = UCBRS_0 + UCBRF_13 + UCOS16;   // Modln UCBRSx=0, UCBRFx=0,

  /*

  UCBRF= (N/16-6) *16=13。22所以取13 

  注意这个时候需要把UCOS16置为1,表示使用的是oversampling 

  */ 

  /*

  再算一个和user's guide上的比较

  4000000HZ 115200波特率

4000000/115200=N =34.72

N/16=2.17 则UCA1BR0=2

UCBRF=2。72 则UCBRF=3

然后发现与给的不符合, 为什么UCBRF=2 ,UCBRS还等于3?

当需要更高的精度的时候,可以将UCBRS设置为0-7的数,来让误差最小。

误差的公式在user's guide 906页 (MSP430F5529)

最终得到的UCBRF加减1或不变

但是目前应该没必要那么高的精度,不整也罢 

  */

                                            // over sampling

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

  UCA1IE |= UCRXIE;                         // Enable USCI_A0 RX interrupt


  __bis_SR_register(LPM0_bits + GIE);       // Enter LPM0, interrupts enabled

  __no_operation();                         // For debugger

}


幸运时时彩平台// Echo back RXed character, confirm TX buffer is ready first

#if defined(__TI_COMPILER_VERSION__) || defined(__IAR_SYSTEMS_ICC__)

#pragma vector=USCI_A1_VECTOR

__interrupt void USCI_A1_ISR(void)

#elif defined(__GNUC__)

void __attribute__ ((interrupt(USCI_A1_VECTOR))) USCI_A1_ISR (void)

#else

#error Compiler not supported!

#endif

{

  switch(__even_in_range(UCA1IV,4))

  {

幸运时时彩平台  case 0:break;                             // Vector 0 - no interrupt

  case 2:                                   // Vector 2 - RXIFG

    while (!(UCA1IFG&UCTXIFG));             // USCI_A0 TX buffer ready?

    UCA0TXBUF = UCA1RXBUF;                  // TX -> RXed character

    break;

  case 4:break;                             // Vector 4 - TXIFG

  default: break;

  }

}


幸运时时彩平台二、oversampling模式


*

本例程使用oversampling模式配置波特率,oversampling用于高频时钟的时候(让波特率更精确,

但是根据user's guide里面给的典型波特率表,高频时候也可以不用这个) 

Oversampling模式的计算公式为

UCBRx = INT(N/16)

UCBRFx = round([(N/16) – INT(N/16)] × 16) 

//   ACLK = REFO = ~32768Hz, MCLK = SMCLK = default DCO = 32 x ACLK = 1048576Hz

*/ 

/*

9.16进行第一次更改,让此程序适用于MSP430F5529LP,使用USCI_A1进行uart传输. 

*/

#include


int main(void)

{

  WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT

  P4SEL = BIT4+BIT5;                        // P3.4,5 = USCI_A0 TXD/RXD

  UCA1CTL1 |= UCSWRST;                      // **Put state machine in reset**

  UCA1CTL1 |= UCSSEL_2;                     // SMCLK

  UCA1BR0 = 6;                              // 1MHz 9600 (see User's Guide)

  /*

  1048576/9600=N

  N/16=6.8266 取整数为6 

  */

  UCA1BR1 = 0;                              // 1MHz 9600

  UCA1MCTL = UCBRS_0 + UCBRF_13 + UCOS16;   // Modln UCBRSx=0, UCBRFx=0,

  /*

  UCBRF= (N/16-6) *16=13。22所以取13 

  注意这个时候需要把UCOS16置为1,表示使用的是oversampling 

  */ 

  /*

幸运时时彩平台  再算一个和user's guide上的比较

  4000000HZ 115200波特率

幸运时时彩平台 4000000/115200=N =34。72

N/16=2.17 则UCA1BR0=2

UCBRF=2.72 则UCBRF=3

然后发现与给的不符合, 为什么UCBRF=2 ,UCBRS还等于3?

当需要更高的精度的时候,可以将UCBRS设置为0-7的数,来让误差最小。

误差的公式在user's guide 906页 (MSP430F5529)

最终得到的UCBRF加减1或不变

但是目前应该没必要那么高的精度,不整也罢 (其实是我没弄懂!如果有大佬会的话请告诉我下!)

  */

                                            // over sampling

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

  UCA1IE |= UCRXIE;                         // Enable USCI_A0 RX interrupt


  __bis_SR_register(LPM0_bits + GIE);       // Enter LPM0, interrupts enabled

  __no_operation();                         // For debugger

}


// Echo back RXed character, confirm TX buffer is ready first

幸运时时彩平台#if defined(__TI_COMPILER_VERSION__) || defined(__IAR_SYSTEMS_ICC__)

#pragma vector=USCI_A1_VECTOR

__interrupt void USCI_A1_ISR(void)

#elif defined(__GNUC__)

void __attribute__ ((interrupt(USCI_A1_VECTOR))) USCI_A1_ISR (void)

#else

#error Compiler not supported!

#endif

{

  switch(__even_in_range(UCA1IV,4))

  {

  case 0:break;                             // Vector 0 - no interrupt

  case 2:                                   // Vector 2 - RXIFG

    while (!(UCA1IFG&UCTXIFG));             // USCI_A0 TX buffer ready?

    UCA0TXBUF = UCA1RXBUF;                  // TX -> RXed character

    break;

  case 4:break;                             // Vector 4 - TXIFG

  default: break;

  }

}


幸运时时彩平台而实际上在user’s guide上面已经给出来典型的BRF BRS BRx的值,这个才是最简单的方法!

具体位置位于     34。3。13 Typical Baud Rates and Errors


在这里插入图片描述

关键字:MSP430F5529  波特率  UART 编辑:什么鱼 引用地址:http://news.sonata9.com/mcu/ic500385.html 本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:MSP430最基本的IO配置
下一篇:MSP430G2-LaunchPad简明教程03[创建一个MSP430工程]

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

MSP430f5529——点阵LCD测试小程序
#include "msp430.h"#include "HAL_Buttons.h"#include "HAL_Board.h"#include "HAL_Dogs102x6.h"void main(void){uint8_t contrast ;uint8_t brightness ;WDTCTL = WDTPW + WDTHOLD; //关闭看门狗Dogs102x6_init(); //初始化LCDDogs102x6_backlightInit(); //背光初始化contrast = 11;brightness = 11
发表于 2020-05-18
幸运时时彩平台怎样只用一个XT2晶振得到精确的高频----msp430f5529单片机
最近在用msp430f5529,终于在上周弄清了时钟方面的原理,在此记录下,唔,这也是俺第一篇博客······首先呢,我先插入它的原理框图从图中可以看出ACLK、SMCLK、MCLK都可以由XT1CLK/VLOCLK/REFOCLK/DCOCLK/DCOCLKDIV/XT2CLK得到,而TI例程里面给的大多是由FLLREFCLK倍频得到DCOCLK或DCOCLK,从而得到SMCLK和MCLK,而ACLK都是由XT1CLK或REFOCLK直接获得。例程里面的FLLREFCLK来源于XT1CLK或REFOCLK。所以例程里面得到的高频都是经过大的倍频得到,这里面有个弊端,就是如果你需要很精确的频率的话由大的倍频得到的频道误差
发表于 2020-04-18
怎样只用一个XT2晶振得到精确的高频----msp430f5529单片机
基于MSP430F5529单片机的ADS1115
;   SCL_H;    SDA_H;}3、main函数介绍#include<msp430f5529.h>#include"ads1115.h"#include"LCD12864.h"#include"stdio.h"#include"math.h"unsigned int valuex[];unsigned int value_0;unsigned long temp;unsigned char result[6];void float_to_result(int value_temp){ 
发表于 2020-04-15
基于MSP430F5529单片机的ADS1115
MSP430F5529库函数
    笔者大学期间写的MSP430F5529库函数,期间断断续续写了快一年,从刚开始的1.0版本到最后的2.+版本,最后才有了让笔者满意的库函数。    MSP430是一款中低端的单片机,以至于很多人认为它不需要库函数,选择使用手写代码开发,然而,笔者却不这么认为,在库函数完成后,笔者使用该单片机开发时相比之前的速度提升了很多倍,当然一个不可忽略的原因是我更熟悉这单片机了。    库函数几乎包括了单片机上所有的外设模块,除此之外,笔者还提供了常用的OLED,LCD,LED,KEY,NRF24L01等模块的驱动库。    遗憾的是,笔者并没有精力写出
发表于 2020-03-26
MSP430F5529 上手小例程4
,在刚开始的时候对datasheet并不感冒,但用到了就发现还是有很大用处滴。就是从上面的数据表中我们找到了设置PxDIR和PxSEL的值,来选择第二功能。代码很简单,如下1#include <msp430.h> /**  * main.c  */int main(void){ WDTCTL = WDTPW | WDTHOLD; // stop watchdog timer P1DIR |= BIT0;     
发表于 2020-03-16
MSP430F5529 上手小例程4
初学MSP430F5529定时器
之前一直感觉定时器有点难,但其实后来发现更多的是中断那块没太懂,中断以后会说的。先简单看下定时器吧。一、基本1.在user’s guide上看到的5529其实有3种定时器,ABD,这三种好像确实有些区别的,但是目前就只看A感觉就够了。2.Timer_A是具有四种操作模式的16位定时器,7个比较器/捕获器3.能够输出PWM波,具有8中PWM波形,但是要注意的是,这种输出只能在外围功能模块里使用,即之前说过的SEL。比如P1.2能够输出Timer_A0的比较器/捕获器1的波形,而在其他管脚上,就没有办法直接输出这种PWM波形。所以如果这个管脚被占用的话,或是不想用这个来整,其实用中断做PWM波也挺好用的。4.能实现串行通信(其实我不太
发表于 2020-03-08
小广播
换一换 更多 相关热搜器件
电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2020 EEWORLD。com。cn, Inc。 All rights reserved
湖南快乐十分 诚信网投开户 500彩票网 小米彩票导航 北京pk10 快三娱乐平台 幸运时时彩 幸运时时彩 智慧彩票投注预测APP 幸运时时彩