STM32F407 使用USART+DMA方式有些小问题

2019-07-20 19:00发布

本来最近在学习STM32F407 使用USART+DMA方式接收数据。思路如下: 利用USART3的空闲中断,获取USART接收到的数据个数。

USART3配置:空闲中断 DMA配置:数据传输完成中断
现在出现的问题是:
进入USART空闲中断后: if(USART_GetITStatus(USART3, USART_IT_IDLE) != RESET) {  USART_ClearITPendingBit(USART3,USART_IT_IDLE); DMA_Cmd(DMA1_Stream1, DISABLE); //关闭DMA,防止处理其间有数据 USART_ITConfig(USART3,USART_IT_IDLE,DISABLE); //关闭串口空闲中断                 DATA_LEN = MaxBufLength - DMA_GetCurrDataCounter(DMA1_Stream1);  //获取剩余长度 if(DATA_LEN > 0) { //接收到了数据的 Usart3.len = DATA_LEN; USART3_RxOneFrameFlag = 1; USART3_ProcessIRQSrc(); } DMA1_Stream1->NDTR =512; //重装填 DMA1_Stream1->M0AR = (uint32_t)USART3_RECEIVE_DATA; USART_ITConfig(USART3,USART_IT_IDLE,ENABLE); //使能串口空闲中断 //读SR后读DR清除Idle i = USART3->SR; i = USART3->DR; DMA_Cmd(DMA1_Stream1, ENABLE); //处理完,重开DMA } DMA的Buf设置为512,USART3接收的数据为10个。
当USART3中断执行完后,又进入了DMA中断,不知道是怎么进来的,而且我也测试过,进入的是数据传输完成中断。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。