你好,我最近在学习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: |
|
但是不能使用,这是为什么?
yuqing he:
EUSCI, customer 2000000; 115200; clockPrescalar:17; firstModReg:0; secondModReg:74,也就是0x4A;overSampling::0,实际不能使用
Winter Yu:
分以下几点回答:
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的相关官方文档。