MSP430 G2553 UART波特率9600 16MHz时钟问题

时间:2014-10-22 22:52:01

标签: uart msp430

我使用UART将G2553连接到标准LCD屏幕。我让它像1MHz的梦想一样工作,但需要系统以16MHz的频率运行某些其他外设。我非常接近工作在16MHz,但我认为这是一个波特率错误,因为屏幕几乎会显示我发送的内容,但是在这里或那里错过一个角色或者得到一个不正确的角色。我将带您了解我编写代码的方式,看看我是否犯了错误。

屏幕要求波特率为9600,所以我在用户指南中找到了表格:

所以UCBRx = 1666 和UCBRSx = 6。

预期的%误差实际上比我在1MHz时钟使用时的误差要好,所以我认为这样可以。

这意味着UCBR0 = 130且UCBR1 = 6(这只是UCBRx的两个8位寄存器的HEX值)和UCBRSx = 6.

现在进入这些,我看了一下用户指南告诉我们的UART调制寄存器:

(这将使这个很漂亮,但我不具备发布图像的声誉)

所以我的初始化代码最终成为:

if (CALBC1_16MHZ==0xFF)                 // If calibration constant erased
{
  while(1);                               // do not load, trap CPU!!
}

DCOCTL = 0;                               // Select lowest DCOx and MODx settings

//setup DCO to 16MHZ
BCSCTL1 = CALBC1_16MHZ;
DCOCTL = CALDCO_16MHZ;

P1SEL |= BIT1 + BIT2 ;                     // P1.1 = RXD, P1.2=TXD
P1SEL2 |= BIT1 + BIT2;
UCA0CTL1 |= UCSSEL_2;                     // SMCLK
UCA0BR0 = 130;                            // 16MHz 9600
UCA0BR1 = 6;                              // 16MHz 9600
UCA0MCTL = UCBRS2 + UCBRS1;             // modulation is 110b or 6
UCA0CTL1 &= ~UCSWRST;                     // **Initialize USCI state machine**

然而,正如我上面所述,这几乎就在那里,例如,如果我尝试显示字符串" Initialising ..."它适用于我的1MHz 9600波特率设置,在这些设置下可以显示16MHz,并且可以显示"初始..." - 接近但显然有一些我不想要的错误。

感谢您提供的任何帮助。

1 个答案:

答案 0 :(得分:0)

根据http://mspgcc.sourceforge.net/baudrate.html的波特率计算器,UCA0MCTL应为0x5B