voidUSART1_IRQHandler(void){/* USER CODE BEGIN USART1_IRQn 0 */if(__HAL_UART_GET_FLAG(&huart1,UART_FLAG_IDLE)==SET){uint16_ttemp=0;__HAL_UART_CLEAR_IDLEFLAG(&huart1);HAL_UART_DMAStop(&huart1);temp=huart1.Instance->SR;temp=huart1.Instance->DR;temp=hdma_usart1_rx.Instance->CNDTR;Usart1type.UsartDMARecLen=USART1_DMA_REC_SIE-temp;HAL_UART_RxCpltCallback(&huart1);}/* USER CODE END USART1_IRQn 0 */HAL_UART_IRQHandler(&huart1);/* USER CODE BEGIN USART1_IRQn 1 */HAL_UART_Receive_DMA(&huart1,Usart1type.Usart1DMARecBuffer,USART1_DMA_REC_SIE);//再次打开DMA接收
/* USER CODE END USART1_IRQn 1 */}
3.接收完后搬到接收数组里面清除dma数组
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
/* USER CODE BEGIN 1 */voidHAL_UART_RxCpltCallback(UART_HandleTypeDef*huart){if(huart->Instance==USART1){memcpy(&Usart1type.Usart1RecBuffer[Usart1type.UsartRecLen],Usart1type.Usart1DMARecBuffer,Usart1type.UsartDMARecLen);Usart1type.UsartRecLen=Usart1type.UsartDMARecLen;memset(Usart1type.Usart1DMARecBuffer,0x00,sizeof(Usart1type.Usart1DMARecBuffer));Usart1type.UsartRecFlag=1;}}
/* Infinite loop *//* USER CODE BEGIN WHILE */while(1){if(Usart1type.UsartRecFlag==1){printf("re:%s,len%d\r\n",Usart1type.Usart1RecBuffer,Usart1type.UsartDMARecLen);memset(Usart1type.Usart1RecBuffer,0x00,sizeof(Usart1type.Usart1RecBuffer));Usart1type.UsartRecFlag=0;Usart1type.UsartRecLen=0;}/* USER CODE END WHILE *//* USER CODE BEGIN 3 */}/* USER CODE END 3 */}