| | 本来最近在学习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中断,不知道是怎么进来的,而且我也测试过,进入的是数据传输完成中断。
 
 
 
 
 | 
 |