DMA通过485发送数据有点问题

2019-07-21 05:51发布

DMA传输是好的,问题是,DMA传输完成之后需要把485的控制端拉低变成接收模式,如果直接在DMA完成中断里转换,会丢失最后两个数据,因为还没发出去。
现在只能是在DMA的完成中断中开启串口发送中断,然后再转换状态。好麻烦,还有什么好方法。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
15条回答
嘴角的上弦月
1楼-- · 2019-07-22 02:24
okyihu 发表于 2012-2-28 23:08
兄弟 你这个问题是这么解决的啊 ?我也碰到了相同的问题
如果在DMA TC 中断里就去打开 ...

在中断里面加延时能行得通吗?我加延时最多传输一帧报文,然后就接收不到了
嘴角的上弦月
2楼-- · 2019-07-22 03:09
正点原子 发表于 2011-11-22 13:42
回复【楼主位】sixear:
---------------------------------
试试在DMA完成中断里面查询串口发送空标志。以 ...

原子哥有没有搜集到这个问题的解决方法啊
牧羊犬
3楼-- · 2019-07-22 04:30
同问,小弟最近刚好在学这个,也用到了485.
现在还有个问题啊,顺便在这里问大家了,就是我的DMA发送和接收都只能执行一次,
执行下面代码时发现,DMAy_Streamx里的CR寄存器里的使能位置0后,无法置回1,这是怎么回事?
        DMA_Cmd(MyDMA_Structure->DMAy_Streamx, DISABLE);                //EN位 = 0
        DMA_SetCurrDataCounter(MyDMA_Structure->DMAy_Streamx,MyDMA_Structure->BufSize);
        DMA_Cmd(MyDMA_Structure->DMAy_Streamx, ENABLE);                //EN位 = 0(应为1才对呀)
牧羊犬
4楼-- · 2019-07-22 09:25
 精彩回答 2  元偷偷看……
牧羊犬
5楼-- · 2019-07-22 10:31
发现问题啦,原来是在使能前把中断标志位清错了。
C:Users牧羊犬Desktop捕获.PNG
牧羊犬
6楼-- · 2019-07-22 12:58
对于最开始的问题,我想到别人用的UCOS操作系统,所以在DMA发送成功中断函数里通过发送邮箱,消息等,通知外部任务,然后再在任务里延时下,再把485的使能位拉低就好啦!   不知道大家认不认可这样的想法?

一周热门 更多>