本帖最后由 djz1992 于 2020-10-12 08:05 编辑
很简单,csdn上很多帖子。最基本的就是两个数组,一个全局变量。用全局变量记录下次接收使用哪个数组接收./**
* 函数功能:串口接收空闲中断函数
* 输入参数:
* 返 回 值:
* 说 明:无
*/
void UsartReceive_IDLE(UART_HandleTypeDef *huart,UartBufferTypedef *UartxRT )
{
uint32_t temp;
if((__HAL_UART_GET_FLAG(huart,UART_FLAG_IDLE) != RESET)) //获取IDLE标志位,如果idle标志被置
{
__HAL_UART_CLEAR_IDLEFLAG(huart); //清除串口空闲标志
HAL_UART_DMAStop(huart);
temp=__HAL_DMA_GET_COUNTER(huart->hdmarx); //获取DMA中未传输的数据个
UartxRT->RxDMALen = MAX_RxDMA_BUFFER - temp; //总计数减去未传输的数据个数,得到已经接收的数据个
if(UartxRT->witchbuf==1) //之前用的buf1,切换为2
{
UartxRT->witchbuf=2;
HAL_UART_Receive_DMA(huart,UartxRT->RxDMA_Buf2,MAX_RxDMA_BUFFER); //重启串口DMA接收到buf2
UartxRT->RxLen+=UartxRT->RxDMALen;
}
else if(UartxRT->witchbuf==2) //之前用的buf2,切换为buf1
{
UartxRT->witchbuf=1;
HAL_UART_Receive_DMA(huart,UartxRT->RxDMA_Buf,MAX_RxDMA_BUFFER); //重启串口DMA接收到buf1
UartxRT->RxLen+=UartxRT->RxDMALen;
}
}
}
|