请教分析下DMA串口接收为啥来不及处理数据

2019-12-11 18:23发布

本帖最后由 12tangyang12 于 2019-5-7 06:18 编辑

情况是这样的:主控是stm32f103c8t6,72M ,串口115200 bps 接收采用DMA 方式,buf 是10字节。接收到数据后会有空闲中断 或者是 接受满中断。
DAM 采用普通单次方式接收。问题是这样:接收超过10字节数据时“1234567890ab” 首先触发了DMA完成中断,然后在中断里会把数据存入FIFO,在存的时候DMA是关闭状态,导致后面的"a"会漏掉。
最终收到的是1234567890b。请大家分析下,怎么处理



友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
37条回答
shangdawei
1楼-- · 2019-12-14 04:51
AN3109: Communication peripheral FIFO emulation with DMA and DMA timeout in STM32F10x microcontrollers.
CD00256689_ENV1.4.pdf (120.13 KB, 下载次数: 18) 2019-5-7 16:53 上传 点击文件名下载附件

mii
2楼-- · 2019-12-14 07:02
利用DMA+空闲中断实现了不定长接收,中断内接收到数据填入到环形缓冲队列,主函数不停消耗队列。这样还丢,就当我没说
彪悍的飞翔
3楼-- · 2019-12-14 11:58
 精彩回答 2  元偷偷看……
liuqian
4楼-- · 2019-12-14 16:03
要用dma就要双用buffer或者half中断,不过我还是改用环形了
12tangyang12
5楼-- · 2019-12-14 18:23
liuqian 发表于 2019-5-9 12:09
要用dma就要双用buffer或者half中断,不过我还是改用环形了

环形的话,如果一帧数据 比环形区大,还没等到空闲中断,数据没搬走,环形区冲了 怎么处理?
1a2b3c
6楼-- · 2019-12-14 22:18
12tangyang12 发表于 2019-5-9 14:55
环形的话,如果一帧数据 比环形区大,还没等到空闲中断,数据没搬走,环形区冲了 怎么处理? ...

还是那句话,你要接受什么内容你都不知道的吗?总的有个预估。如果是标准协议或者约定协议,传什么早就知道的。照你这个说法还是放弃吧,你永远都会有反对的理由 :)

一周热门 更多>