打印

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

[复制链接]
705|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
冰糖炖雪梨|  楼主 | 2018-6-7 13:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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



使用特权

评论回复

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

430

主题

436

帖子

0

粉丝