Thread 中讨论的其他器件: SYSBIOS
工具/软件:TI-RTOS
您好!
我目前正在使用 TI-RTOS 中的 UART 驱动程序为 MSP430F5529开发一个项目。
我有2个与 UART 驱动程序相关的问题:
问题1:
当我使用与8192000Hz 不同的 SMCLK 频率配置 UART 波特率时、我通过 UART 收到了错误的数据
+我配置了 SMCLK 时钟频率:
bios.cpufreq.lo = 24000000;
ClockFreqs.SMCLK = 24000000;
ClockFreqs.ACLK = 32768;
+然后、我使用此工具计算波特率: http://software-dl.ti.com/msp430/msp430_public_sw/mcu/msp430/MSP430BaudRateConverter/index.html
+即使我尝试使用较低的 SMCLK 频率、例如4000000MHz、我仍会遇到数据错误。
+毕竟、当我使用 SMCLK freq = 8192000Hz 时、我只获得正确的数据。
+我的 UART 配置基于 TI-RTOS 的 uartecho 示例中的配置。
问题2:
+我想在 MSP430F5529中同时使用 UART A0和 A1、那么我应该如何配置?
我尝试过此代码、但不起作用:
/* *@def MSP430F5529_UARTName *@MSP430F5529上 UART 名称的简短枚举 */ typedef enum MSP430F5529_UARTName{ MSP430F5529_UART_A0 = 0、 MSP430F5529_UART_A1 = 1、 MSP430F5529_UART_COUNT// UART 对象数 * ****** *@defuartUSCIAHWAttrs *@简单UART 硬件属性 */ const UARTUSCIA_HWAttrs uartUSCIAHWAttrs[MSP430F5529_UART_COUNT]= { { baseAddr = USCI_A0_BASE、 时钟源= USCI_A_UART_CLOCKSOURCE_SMCLK、 .bitOrder = USCI_A_UART_LSB_FIRST、 numBudrateEndries = sizeof (uartUSCIABAURATS)/sizeof (UARTUSCIA_BAUDRAateConfig)、 .budrateLUT = uartUSCIA波特 率 }、 { baseAddr = USCI_A1_base、 时钟源= USCI_A_UART_CLOCKSOURCE_SMCLK、 .bitOrder = USCI_A_UART_LSB_FIRST、 numBudrateEndries = sizeof (uartUSCIABAURATS)/sizeof (UARTUSCIA_BAUDRAateConfig)、 .budrateLUT = uartUSCIA波特 率 } }; /* *** *@defUART_CONFIG *@简单UART 配置列表 */ const UART_Config UART_CONFIG[]={ { .fxnTablePtr =&UARTUSCIA_fxnTable、 .object = uartUSCIAObjects[0]、 .hwAttrs = uartUSCIAHWAttrs[0] }、 { .fxnTablePtr =&UARTUSCIA_fxnTable、 .object = uartUSCIAObjects[1]、 .hwAttrs = uartUSCIAHWAttrs [1] }、 {NULL、NULL、NULL} }; void IOSEKPeripheral_openUART (UART_Mode uartMode、MSP430F5529_UARTName uartName) { if (uartMode = UART_MODE_BLOCKING) { //创建数据处理关闭的 UART。 UART_Params_init (&uartParams); { uartParams.readMode = UART_MODE_BLOCKING; uartParams.writeMode = UART_MODE_BLOCKING; uartParams.readTimeout = UART_WAIT_FOREVE; uartParams.readCallback = NULL; uartParams.writeCallback = NULL; uartParams.readReturnMode = UART_return_full; uartParams.readDataMode = UART_DATA_binary; uartParams.writeDataMode = UART_DATA_binary; uartParams.readEcho = UART_ECHO_OFF; uartParams.baudrate = 115200; uartParams.dataLength = UART_LEN_8; uartParams.stopbits = UART_STOP_One; uartParams.parityType = UART_PAR_NONE; } }}