我使用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,并且可以显示"初始..." - 接近但显然有一些我不想要的错误。
感谢您提供的任何帮助。