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.

MSP430FR2633串口波特率的计算问题

你好,我最近在学习CapTIvateDesignCenter 的例程,想用串口将里面BSWP 例程中的数据导出来,在上位机使用的是IIC方式生成的程序,这样串口应该是空出来可以使用的,  但是有如下问题:

1.程序里

.pbReceiveCallback = CAPT_UARTReceiveHandler,
.pbErrorCallback = 0,
.peripheralParameters.selectClockSource = EUSCI_A_UART_CLOCKSOURCE_SMCLK,
.peripheralParameters.clockPrescalar = UART__PRESCALER,//0x08
.peripheralParameters.firstModReg = UART__FIRST_STAGE_MOD,
.peripheralParameters.secondModReg = UART__SECOND_STAGE_MOD,
.peripheralParameters.parity = EUSCI_A_UART_NO_PARITY,
.peripheralParameters.msborLsbFirst = EUSCI_A_UART_LSB_FIRST,
.peripheralParameters.numberofStopBits = EUSCI_A_UART_ONE_STOP_BIT,
.peripheralParameters.uartMode = EUSCI_A_UART_MODE,
.peripheralParameters.overSampling = UART__SAMPLING_MODE

EUSCI_A_UART_CLOCKSOURCE_SMCLK时钟是CS_initClockSignal(CS_SMCLK, CS_DCOCLKDIV_SELECT, CS_CLOCK_DIVIDER_4);是8M主时钟经过4分频之后得到的2M?然后我根据http://software-dl.ti.com/msp430/msp430_public_sw/mcu/msp430/MSP430BaudRateConverter/index.html网页计算出来的相关参数和程序中的参数不一样,实际的SMCLK和波特率是多少?

2.   在CapTIvate Technology Guide user guide中,推荐了9600BN8N1的配置方式如下

// g_myUartPort specifies the UART port configuration that is passed
// to the UART port driver during init.
// The UART configuration is 9600B8N1, sourced by SMCLK.
//
const tUARTPort g_myUartPort =
{
.pbReceiveCallback = &receiveHandler,
.pbErrorCallback = &errorHandler,
.peripheralParameters.selectClockSource = EUSCI_A_UART_CLOCKSOURCE_SMCLK,
.peripheralParameters.clockPrescalar = 26,
.peripheralParameters.firstModReg = 0,
.peripheralParameters.secondModReg = 0xB6,
.peripheralParameters.parity = EUSCI_A_UART_NO_PARITY,
.peripheralParameters.msborLsbFirst = EUSCI_A_UART_LSB_FIRST,
.peripheralParameters.numberofStopBits = EUSCI_A_UART_ONE_STOP_BIT,
.peripheralParameters.uartMode = EUSCI_A_UART_MODE,
.peripheralParameters.overSampling = EUSCI_A_UART_OVERSAMPLING_BAUDRATE_GENERATION
};
//而根据上述的网址算出来的应该是0xD6。这个地方是不是写错了?但是0xB6,0Xd6都能使用,这是为啥。。。我根据那个网页配置出来的115200是可以用的;

3.根据上面两个例程,我配置了一个CS_initClockSignal(CS_SMCLK, CS_DCOCLKDIV_SELECT, CS_CLOCK_DIVIDER_4),我理解的是SMCLK是2M的EUSCI的115200 波特率的串口,对应参数为:

USCI/EUSCI:  USCI EUSCI
Clock:                      32.768K                     1M                     1.048M                     4M                     4.194M                     8M                     8.388M                     12M                     16M                     16.777M                     20M                     Custom                  Hz Hz
Baud rate:                      1200                     2400                     4800                     9600                     19200                     38400                     57600                     115200                     230400                     460800                     Custom                  bps
calculate

The recommended parameters for DriverLib are:

clockPrescalar:

firstModReg:

secondModReg:

overSampling:

但是不能使用,这是为什么?

  • EUSCI,   customer  2000000;  115200;  clockPrescalar:17;  firstModReg:0;    secondModReg:74,也就是0x4A;overSampling::0,实际不能使用

      

  • 分以下几点回答:

    1. 当分频比N = clockPrescalar >= 16, 需要使用oversampling baud-rate generation mode, 此时overSampling = 1。所以对于问题3,clockPrescalar = 17的计算结果有问题。

    2. 波特率的简便计算方法,按照图中2所示方法计算,你所提供的网页波特率计算器,应该也是根据此算法。按照此算法,问题2的计算结果和计算器一致为0xD6.

    3.图中第4点,是对应不同时钟频率和波特率的推荐设置,是根据使接收和发送时序误差最小的最优搜索算法得到的,结果较第2点的粗略计算结果更优。secondModReg对应表中UCBRSx寄存器,查表可以得到,4000000的输入时钟,配置波特率为9600,则secondModReg = 0xB6,此为误差最小的设置值. 所以对于问题2, 0xD6和0xB6对于均可用,只是最终导致的bit时序误差官方文档的表中推荐值更优。

    4. 具体的关于发送和接收bit timing erro的算法如图中5所示。

    5.上面的三张图片均来自于TI官方文档《MSP430FR4xx and MSP430FR2xx Family User's Guide (Rev. G)》21.3.10 - 21.3.13 章节,具体链接为http://www.ti.com/lit/ug/slau445g/slau445g.pdf,或者参见附件。如若遇到其他相关芯片使用问题,请首先参考TI.com的相关官方文档。


    slau445g.pdf
  • 建议具体应用时的波特率设置参考文档MSP430FR4xx and MSP430FR2xx Family User's Guide (Rev. G)》的波特率推荐设置表Table 21-5. Recommended Settings for Typical Crystals and Baud Rates中所给值,其产生的时序误差最小。