你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

如果可能,别再用中断接收串口数据了

[复制链接]
lusonghua 提问时间:2015-6-10 16:51 /
阅读主题, 点击返回1楼
收藏 1 评论31 发布时间:2015-6-10 16:51
31个回答
creep 回答时间:2015-6-11 22:48:33
dsjsjf 发表于 2015-6-11 22:10
我之前都是开一段缓存,中断接收了就往里存,然后别的程序再从缓存里取了解析 ...

你这样接收一个字节就要进入一次串口中断吧?
firebird213 回答时间:2015-6-12 09:49:34
主程序来不及处理,会被覆盖掉吧
天外之客 回答时间:2015-6-13 00:47:29
这也不是啥好办法,407这么快的速度,中断很快就运行完了,而且还能进行简单的包头包尾判断,如果没有什么开销的话用中断未尝不可,倒是发送数据需要用DMA,查询方式太恶心了,回头都改了。
ts2000 回答时间:2015-6-13 08:39:58
DMA确实要简单点。
dsjsjf 回答时间:2015-6-13 21:29:41
creep 发表于 2015-6-11 22:48
你这样接收一个字节就要进入一次串口中断吧?

是的         
左岸右岸 回答时间:2015-6-14 11:21:27
学习学习
lusonghua 回答时间:2015-6-16 10:36:15
moyanming2013 发表于 2015-6-11 16:52
那“查询DMA的状态”是否也会一直在占用CPU啊?

怎么会“一直”呢,查询一下,有就收,没有就干别的事,函数就是Idle_Proc()。
用DMA+一段缓冲,可以放宽查询的时间间隔要求,而不是来一个字符中断一下地搞。
中断还是留给重要的事情。
如果软件任务简单用几个中断当然无所谓,但任务多了,如USB芯片、FPGA等等好多地方都要中断,而公司又明确不允许使用RTOS,那么...
每个程序任务的背景都不尽相同,我的代码也只是一种思路罢了。
Brady 回答时间:2015-6-16 11:22:57
這個方法還不錯
moyanming2013 回答时间:2015-6-16 11:25:40
lusonghua 发表于 2015-6-16 10:36
怎么会“一直”呢,查询一下,有就收,没有就干别的事,函数就是Idle_Proc()。
用DMA+一段缓冲,可以放宽 ...

嗯,看来DMA+查询确实有使用的场景。
如果要是数据多了DMA缓冲区够用么?
lusonghua 回答时间:2015-6-16 12:25:12
moyanming2013 发表于 2015-6-16 11:25
嗯,看来DMA+查询确实有使用的场景。
如果要是数据多了DMA缓冲区够用么? ...

考虑的不应该是数据多了或少了的问题,而是最“严酷”条件的问题,即如果UART带宽100%使用时,查询DMA状态的时间间隔问题。
因为UART是很慢的外设,给个一定长度的buffer,就有相当宽裕的容许间隔。只要保证在时间间隔内程序必定能够再次查询到DMA状态即可。这个对于一般的ARM都不成问题(如果这样都有问题,那真得考虑CPU选型了)。
当然,还是那句话,别阻塞。

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版