添加一些延迟即可,由于使用TXE判断发生完成,而非TC,当然这里在中断中添加延迟有点不妥,添加点延迟就是了。
void USART3_IRQHandler(void)
{
//发生接收中断
if (USART_GetITStatus(USART3, USART_IT_RXNE) == SET)
{
pxMBFrameCBByteReceived(); //接收中断调用 这里本应调用prvvUARTRxISR,省略一个步骤
//清除中断标志位
USART_ClearITPendingBit(USART3, USART_IT_RXNE);
}
//发生完成中断
if (USART_GetITStatus(USART3, USART_IT_TXE) == SET && USART_GetITStatus(USART3, USART_IT_TC) == RESET)
{
pxMBFrameCBTransmitterEmpty(); //发送中断调用 这里本应调用prvvUARTTxReadyISR,省略一个步骤
//清除中断标志
USART_ClearITPendingBit(USART3, USART_IT_TXE);
Delay_US(100);
}
}