现在想实现串口空闲中断+DMA接收的方式。在网上查的资料说stm32串口空闲中断在接收到一帧数据时,数据接收完毕后会进入一次IDLE中断,通过串口助手发送一帧数据时,发现经常会进入两次中断,很少进入一次中断。如果一帧数据分两次进入了IDLE中断,DMA在IDLE中断里的接收数据就有误了。开始以为时串口Rx引脚的问题,后来Rx引脚配置成上拉模式还是不行。
 
 
      中断处理函数 
- void USART3_IRQ_User(void)
 
 - {
 
 -                 uint8_t i;
 
  
-     if(__HAL_UART_GET_FLAG(&huart3,UART_FLAG_IDLE) != RESET)
 
 -     { 
 
 -                                 __HAL_UART_CLEAR_IDLEFLAG(&huart3);
 
  
-         HAL_UART_DMAStop(&huart3); 
 
 -         USART3_RxCount =  RX_BUFFER_SIZE-__HAL_DMA_GET_COUNTER(&hdma_usart3_rx);
 
 -                                 HAL_UART_Receive_DMA(&huart3,USART3_RxBuffer,RX_BUFFER_SIZE);
 
 -                                 receive_over = 1;
 
 -                         
 
 -                                 printf("count=%d\r\n",USART3_RxCount);
 
 -                                 for(i = 0;i<USART3_RxCount;i++)
 
 -                                 {
 
 -                                                 printf(" %d",USART3_RxBuffer[i]);
 
 -                                 }
 
 -                                 printf("\r\n");
 
 -      }
 
 - }
 
  
 
  |