我想得到57600的波特率。
我的 BRCLK frequency 设置为UCSSEL__SMCLK,而SMCLK选择的是默认的DCOCLKDIV,即1048576Hz。
查表可知,在 BRCLK frequency = 1048576Hz,Baud Rate = 57600,且UCOS16为0情况下:UCBRx = 18,UCBRSx=1。
于是有以下设置:
UCA3CTL1 |= UCSSEL__SMCLK;
UCA3BR0 = 0x12 ; //即十进制的18
UCA3BR1 = 0x00 ;
UCA3MCTL =UCBRS_1;
经测试正常。
然后,按照公式计算,过程如下:
N=f_BRCLK /Baudrate = 1048576/57600=18.2044
因为N大于16,所以使用过采样模式,即需要设置 UCOS16=1,
UCBRx = INT(N/16) = INT(N/16) = INT(18.2044/16) = INT(1.137775) = 1,
UCBRFx=round(((N/16) – INT(N/16)) × 16 )=round(0.137775*16)=round(2.2044)=2
因此,有以下设置:
UCA3CTL1 |= UCSSEL__SMCLK;
UCA3BR0 = 0x01 ;
UCA3BR1 = 0x00 ;
UCA3MCTL =UCBRF_2+ UCOS16;
但,结果是:乱码。
以为是UCBRS没有设置的原因,于是把UCBRS从UCBRS_0到UCBRS_7挨个试,但,都是乱码。
不知道原因所在。请给予帮助。谢谢!