请教分析下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条回答
9509238
1楼-- · 2019-12-11 23:50
楼上当大家算命的,给个八字就来卜卦?
12tangyang12
2楼-- · 2019-12-12 05:07
 精彩回答 2  元偷偷看……
wye11083
3楼-- · 2019-12-12 06:31
12tangyang12 发表于 2019-5-7 06:43
当然是把大家当成大神了。
把波特率降到9600bps 则不会丢数据,是不是115200太快了,从DMA到FIFO太费时间 ...

骚年你把dma的buffer变成环形的不得了。另外,编译时开优化没?用o0当我没说。stm32一般要开os。
lingdianhao
4楼-- · 2019-12-12 07:26
你程序处理不够快吧!DMA完成表示收到10个字符了,此时到下一个字符接收有1和字符的时间也就是100us左右处理数据重开DMA,100us够了吧,除非你被耽搁了。如果你处理花时间太多,直接把DMA缓存改大也可以。
cht-rtos
5楼-- · 2019-12-12 09:41
fifo才10个字节你发大于10个,当你去搬移这十个字节dma是关闭,除非这个时间非常短,不然很容易出问题,fifo通常要大于一帧长度
12tangyang12
6楼-- · 2019-12-12 11:06
wye11083 发表于 2019-5-7 07:27
骚年你把dma的buffer变成环形的不得了。另外,编译时开优化没?用o0当我没说。stm32一般要开os。 ...

变成环形后,通道的数据计数器不计了,这样就不知道传来多少个新数据

一周热门 更多>