野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 14657|回复: 2

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

[复制链接]
发表于 2014-12-10 15:23:56 | 显示全部楼层 |阅读模式
本来最近在学习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中断,不知道是怎么进来的,而且我也测试过,进入的是数据传输完成中断。

回复

使用道具 举报

发表于 2014-12-10 17:35:12 | 显示全部楼层
DMA_Cmd(DMA1_Stream1, ENABLE);                                        //处理完,重开DMA

最后你又重新开了dma,dma就会再次传输数据吧
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-12-10 21:29:48 | 显示全部楼层
但USART的数据寄存器已经没有数据了啊!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-9-21 15:52 , Processed in 0.034725 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表