我想得到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挨个试,但,都是乱码。
不知道原因所在。请给予帮助。谢谢!
灰小子:
波特率计算工具
http://software-dl.ti.com/msp430/msp430_public_sw/mcu/msp430/MSP430BaudRateConverter/index.html
tao gao:
回复 灰小子:
谢谢您如此快的回复!
通过这个波特率计算工具计算出来的结果和查表的结果是一致的。
但,我还是有些疑问。
如前面的提问所述:
N=f_BRCLK /Baudrate = 1048576/57600=18.2044
因为N大于16,所以使用过采样模式,即需要设置 UCOS16=1。
为什么不能用过采样模式呢?