xncvywyerwe 发表于 2020-3-18 10:39
困惑啊,我用的是TI的协议栈,串口部分的代码为协议栈自带的,同样的程序,在开发板上能否正常的串口收发,目标板已经精简到只有一个CPU和调试接口了,依然问题存在。
#if (HAL_UART_DMA == 1)
HAL_ISR_FUNCTION( halUart0TxIsr, UTX0_VECTOR )
辛苦啊,终于找到原因了,原来是在POWER_SAVING模式下那个流控设置没有起作用
halUARTCfg_t uartConfig;
// configure UART
uartConfig.configured = TRUE;
uartConfig.baudRate = HAL_UART_BR_115200;
uartConfig.flowControl = HAL_UART_FLOW_OFF;
uartConfig.flowControlThreshold = 48;
uartConfig.rx.maxBufSize = DEFAULT_UART_BUF_SIZE;
uartConfig.tx.maxBufSize = DEFAULT_UART_BUF_SIZE;
uartConfig.idleTimeout = 6;
uartConfig.intEnable = TRUE;
uartConfig.callBackFunc = (halUARTCBack_t) GprsSerial_ProcessEvent;
// Note: Assumes no issue opening UART port.
(void)HalUARTOpen(APP_SERIAL_PORT , &uartConfig );
uartConfig.flowControl = HAL_UART_FLOW_OFF;未能起作用,导致移位寄存器没工作
if (
DMA_PM || config->flowControl)
[
UxUCR = UCR_FLOW | UCR_STOP; // 8 bits/char; no parity; 1 stop bit; stop bit hi.
PxSEL |= HAL_UART_Px_CTS; // Enable Peripheral control of CTS flow control on Px.
]
else
[
UxUCR = UCR_STOP; // 8 bits/char; no parity; 1 stop bit; stop bit hi.
]
把条件判断改为if (DMA_PM &&config->flowControl)就可以了