收发共存的思路没有经过验证!!!
空闲中断:既可以用来作为不定长接收数据帧的断帧判断/特别是DMA数据的接收,也可以用来指示中断发送的结束。
在需要发送的地方USART_ITConfig(UART5, USART_IT_IDLE, ENABLE);
在接收的中间USART_ITConfig(UART5, USART_IT_IDLE, ENABLE);
在空闲中断里面分清是发送结束还是接收结束
void UART5_IRQHandler(void)
{if(USART_GetITStatus(UART5,USART_IT_TC))
{}
if(USART_GetITStatus(UART5,USART_IT_RXNE))
{}
if(USART_GetITStatus(UART5,USART_IT_IDLE))/*空闲中断*/
{ status = UART5->SR; status = UART5->DR;/*清标志*/ for(i=0;i<PrintDMA.Prtsize;i++)/*数据缓存*/ { Rbuff[i] = *(PrintDMA.pPrt+i); }PrintDMA.pPrt = NULL;/*接收数据指针和长度归零*/
PrintDMA.Prtsize =0; Flag_PrtFinished =TRUE; USART_ITConfig(UART5,USART_IT_RXNE, DISABLE); // USART_ITConfig(UART5, USART_IT_IDLE, DISABLE); //}
}