【问题标题】:MSP430 G2553 UART Baudrate 9600 16MHz clock IssuesMSP430 G2553 UART 波特率 9600 16MHz 时钟问题
【发布时间】:2014-10-22 22:52:00
【问题描述】:

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

屏幕预计波特率为 9600,所以我去了用户指南中的表格:

所以 UCBRx = 1666 和 UCBRSx = 6。

这方面的预期 % 错误实际上比我在 1MHz 时钟下使用的要好,所以我认为这没问题。

这意味着 UCBR0 = 130 和 UCBR1 = 6(这只是 UCBRx 的 HEX 值分布在两个 8 位寄存器上)和 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**

但是,正如我上面所说,这几乎就在那里,例如,如果我尝试显示适用于我的 1MHz 9600 波特率设置的字符串“Initialising...”,在这些设置下为 16MHz,它可能会显示“Initiali ng.. ." - 很接近但显然有一些我不想要的错误。

感谢您为此提供的任何帮助。

【问题讨论】:

  • 试试UCA0MCTL = 0x6D

标签: uart msp430


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-28
    • 1970-01-01
    • 1970-01-01
    • 2019-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多