[STM32F1]

使用DMA+串口接收中断共同接收

[复制链接]
1131|6
手机看帖
扫描二维码
随时随地手机跟帖
禁基的矮子|  楼主 | 2017-11-4 07:47 | 显示全部楼层 |阅读模式
我使用串口接收中断+DMA接收不定长数据,数据格式为:起始字节+数据长度+数据域
禁基的矮子|  楼主 | 2017-11-4 07:50 | 显示全部楼层
我的流程是这样的,在想接收数据时,清接收中断标志,开接收中断,开接收,在串口中断函数中检测到起始字节后,会根据第二个字节设置DMA接收数量,再关接收中断,开DMA,在DMA传输完成中关闭串口接收,等待下一轮数据接收。但是会经常发生串口溢出中断,这个是哪个环节出现数据溢出了?

使用特权

评论回复
feelhyq| | 2017-11-6 09:26 | 显示全部楼层
禁基的矮子 发表于 2017-11-4 07:50
我的流程是这样的,在想接收数据时,清接收中断标志,开接收中断,开接收,在串口中断函数中检测到起始字节 ...

设计方案是可以的, DMA能够正常工作吗? 从现象来看 感觉DMA没有正常工作。

使用特权

评论回复
禁基的矮子|  楼主 | 2017-11-6 18:29 | 显示全部楼层
feelhyq 发表于 2017-11-6 09:26
设计方案是可以的, DMA能够正常工作吗? 从现象来看 感觉DMA没有正常工作。 ...

能正常工作的,但是一旦出现溢出中断,程序就死了,除非我手动的在串口中断中清除溢出中断标志,才能继续工作

使用特权

评论回复
airwill| | 2017-11-6 19:49 | 显示全部楼层
设计方案是有缺陷的.
中断没有考虑被其他中断优先而引起的延迟异步问题. 串口接收寄存器的双缓冲可能会导致数据丢失问题.

使用特权

评论回复
禁基的矮子|  楼主 | 2017-11-6 21:42 | 显示全部楼层
airwill 发表于 2017-11-6 19:49
设计方案是有缺陷的.
中断没有考虑被其他中断优先而引起的延迟异步问题. 串口接收寄存器的双缓冲可能会导致 ...

串口接收寄存器的双缓冲可能会导致数据丢失问题.
这句话该怎么理解?我确实还开了别的中断,但是按照这个意思,不用DMA,就单纯的使用串口中断接收数据,也会发生溢出的吧?

使用特权

评论回复
airwill| | 2017-11-7 07:35 | 显示全部楼层
禁基的矮子 发表于 2017-11-6 21:42
串口接收寄存器的双缓冲可能会导致数据丢失问题.
这句话该怎么理解?我确实还开了别的中断,但是按照这个 ...

按照这个机理, 也是可能的, 你最好先测试一下, 调整一下中断的优先级序列, 或者更改代码缩短中断服务所需要的时间

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

10

主题

51

帖子

0

粉丝