打印

STM32 DMA timeout 问题

[复制链接]
4548|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ddk2006|  楼主 | 2012-7-3 11:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
问题描述:使用DMA接收USART的数据,满12个字节产生一次DMA传输完成中断,然后将数据取走,但是这里碰到一个问题,因为我是通过无线转成串口的,这样的话有可能数据通过空中传到串口的时候,丢失部分字节,比如说某一帧DMA只收到11个字节,下一帧有来了12个字节,这样的话我得到的数据全部乱了。我有想这样解决:开启串口接收中断,收到一个字节,置一个变量为1,同时开启timer overflow 中断,时间大概是串口传输12个字节的时间(本应该是11个字节,稍大一点),这样如果有DMA传输中断来,就把那个变量该为0,所以只要在timer 中断里面检测那个变量是否为1,如果是1的话就证明DMA timeout啦,DMA要reset,但是我不知道如何是DMA从头开始传输,是不是有这个函数DMA_SetCurrDataCounter设为0即可,请哪位大侠指点,谢谢
沙发
pattywu| | 2012-7-3 11:37 | 只看该作者
启用STM32的串口空闲中断+DMA,就可以解决你的问题。不需要什么定时器。

使用特权

评论回复
板凳
ddk2006|  楼主 | 2012-7-3 11:45 | 只看该作者
楼上的是否可以说详细点啊,那如何reset DMA呢?

使用特权

评论回复
地板
airwill| | 2012-7-4 08:47 | 只看该作者
2楼的办法最有效率, 至于如何reset DMA, 终归是先关闭, 重新设置寄存器, 再开启咯

使用特权

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

本版积分规则

8

主题

14

帖子

0

粉丝