STM32F051K8U6串口中断发送数据影响float运算

2019-07-14 16:12发布

最近在做一个项目.
整个任务是1.5ms的大循环,其中分成6个250us的小任务.
有几个小任务里面用到了几个float运算.
然后1.5ms大循环循环了1s之后,由串口中断发送一次系统时间.
现在发现的问题是:
每次只要用 串口中断发送这一条信息,就必然导致 浮点运算的值出错,全部变成了 1.#QNAN.
出错后,由于没有错误检测,程序其他的部分仍然正常运行,浮点相关部分就都没用了.

改成用阻塞式发送的话,不会出现浮点出错的问题,但是阻塞式发送,需要耗时1.48ms.这样的话,系统的大循环时间就变成差不多两倍了.

不知道这是哪方面的问题,求助~
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
18条回答
djw200988
1楼-- · 2019-07-15 14:34
用DMA发送吧
cauzhxj
2楼-- · 2019-07-15 17:37
 精彩回答 2  元偷偷看……
djw200988
3楼-- · 2019-07-15 23:17
cauzhxj 发表于 2018-11-8 18:09
这么复杂,还要用DMA...
DMA不是会占用数据总线吗?

呵呵,频繁进中断,计算不受影响才怪了
cauzhxj
4楼-- · 2019-07-16 02:17
djw200988 发表于 2018-11-8 18:15
呵呵,频繁进中断,计算不受影响才怪了

哦,这样,一次发送十几个字节,确实也可以算得上是比较频繁了.
用DMA试试了..
DMA,貌似很复杂的..
tyewybvwe
5楼-- · 2019-07-16 02:25
贴个代码,大家看看吧。都分析学习一下。
cauzhxj
6楼-- · 2019-07-16 06:48
djw200988 发表于 2018-11-8 18:15
呵呵,频繁进中断,计算不受影响才怪了

修改成DMA之后,确实没有再出现#1.QNAN问题.
原本以为MCU会非常勤劳的切换,现在看,也有累趴下的时候。。

一周热门 更多>