This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

请教关于msp430F5438 串口波特率设置的问题

我想得到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

  • 谢谢您如此快的回复!

    通过这个波特率计算工具计算出来的结果和查表的结果是一致的。

    但,我还是有些疑问。

    如前面的提问所述:

    N=f_BRCLK /Baudrate = 1048576/57600=18.2044

    因为N大于16,所以使用过采样模式,即需要设置 UCOS16=1。

    为什么不能用过采样模式呢?