请教分析下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条回答
1a2b3c
1楼-- · 2019-12-12 22:58
按照你这点数据,我就是一个字节中断一次难道还搞不定?如果dma的思路不熟悉就干脆不用吧,单字节中断计数到第十个字节的时候就复制到另外的缓冲去处理,简简单单的,以前51的思路,
12tangyang12
2楼-- · 2019-12-13 02:43
xiaomu 发表于 2019-5-7 09:00
对的, 就是这样子, buff长一些,留给你处理的时间就长一些,这样可以均衡处理和接收的时间,

...

怎么感觉,buf长,搬运用的时间也长,速度快到一定程度就来不及搬了
12tangyang12
3楼-- · 2019-12-13 07:05
1a2b3c 发表于 2019-5-7 10:26
按照你这点数据,我就是一个字节中断一次难道还搞不定?如果dma的思路不熟悉就干脆不用吧,单字节中断计数 ...

就是要用DMA,准备用楼上xiao'mu的双buf,方案
XA144F
4楼-- · 2019-12-13 10:37
你把dma缓冲区开到100字节,然后等串口的空闲中断,我不信还会出你的问题。
XA144F
5楼-- · 2019-12-13 10:51
 精彩回答 2  元偷偷看……
12tangyang12
6楼-- · 2019-12-13 12:31
XA144F 发表于 2019-5-7 10:43
你把dma缓冲区开到100字节,然后等串口的空闲中断,我不信还会出你的问题。 ...

这肯定没问题,实际上这样是不行的,如果传来101个字节呢?

一周热门 更多>