请教分析下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条回答
12tangyang12
1楼-- · 2019-12-15 03:43
1a2b3c 发表于 2019-5-9 16:13
还是那句话,你要接受什么内容你都不知道的吗?总的有个预估。如果是标准协议或者约定协议,传什么早就知 ...

就是 说  缓冲区 必须得 比 一帧数据 长
1a2b3c
2楼-- · 2019-12-15 03:59
 精彩回答 2  元偷偷看……
1a2b3c
3楼-- · 2019-12-15 09:44
12tangyang12 发表于 2019-5-9 16:15
就是 说  缓冲区 必须得 比 一帧数据 长

晕,你动作快,我手机太慢了
1a2b3c
4楼-- · 2019-12-15 15:01
12tangyang12 发表于 2019-5-9 16:15
就是 说  缓冲区 必须得 比 一帧数据 长

可是dma只有64k深度(一般STM32芯片),你一帧报文有65k,咋办? 哈哈
12tangyang12
5楼-- · 2019-12-15 20:45
1a2b3c 发表于 2019-5-9 16:18
可是dma只有64k深度(一般STM32芯片),你一帧报文有65k,咋办? 哈哈

这道是个问题,这样直接用中断接收
1a2b3c
6楼-- · 2019-12-16 00:10
12tangyang12 发表于 2019-5-9 16:22
这道是个问题,这样直接用中断接收

真是服了你了啊,,,

前面网友都说了,半满中断什么的为啥不用? 莫非你也怕把单片机累着,必须得等他把一帧完整的报文收完了才允许中断呀
半满总没有你单字节中断累嘛,,,而且方法一样的,都是把缓冲里的数据复制到外面去,你单字节也是,只是复制的一个字节

好了,我知道你是故意在调戏我,我知趣了

一周热门 更多>