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

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

[复制链接]
andrewz 提问时间:2016-9-26 17:36 /
阅读主题, 点击返回1楼
收藏 1 评论41 发布时间:2016-9-26 17:36
41个回答
andrewz 回答时间:2016-9-29 09:45:43
全部改成C代码后,程序正常了.
至少说明,48MHz单片机条件下,C的效率还是比C++高.
改C的过程中,似乎明白为什么库函数关于寄存器的操作都是用的结构体加指针,因为这样和C++的结构差不多,改起来也比较方便.
似乎以后可以先用C++开发,再转C优化.

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

nongxiaoming 回答时间:2016-9-29 11:59:46
是不是你的串口收发栈溢出了,导致另外的任务栈乱掉了?

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

andrewz 回答时间:2016-9-29 12:29:58
nongxiaoming 发表于 2016-9-29 11:59
是不是你的串口收发栈溢出了,导致另外的任务栈乱掉了?

不是的.
cloudcn 回答时间:2016-9-29 12:49:34
是不是中断函数与任务函数共享变量了?
在任务函数修改可能在中断函数使用的变量最好把中断临时关掉,注意中断关掉时间不要过长,

__disable_irq();
__enable_irq();
andrewz 回答时间:2016-9-29 12:52:44
cloudcn 发表于 2016-9-29 12:49
是不是中断函数与任务函数共享变量了?
在任务函数修改可能在中断函数使用的变量最好把中断临时关掉,注意 ...

双缓冲,不会有这个问题.
cloudcn 回答时间:2016-9-29 15:39:53
andrewz 发表于 2016-9-29 12:52
双缓冲,不会有这个问题.

方便的话可工程粘出来,研究下?
c++不频烦的删除和创建对象效率不会比c差太多,没准是对象或指针没处理好造成的
andrewz 回答时间:2016-9-29 16:23:48
目前问题已经规避了.
在C下面不会出现由于串口导致的float崩溃问题.
但是在更加高端的F407上面,即使用C++也没有发现float崩溃.

DMA在C语言下面可能又不是一个好的选择.或许是自己用得还不习惯.
现在每10ms发送8个byte,接收还有float运算都能正常工作.

nongxiaoming 回答时间:2016-9-29 21:45:18
没发现这种问题,一直做项目都是所有串口dma,用得双双的
andrewz 回答时间:2016-9-30 10:01:51

现在每个大周期,1.5ms里面发送8个byte也没有问题,相当于用115200的波特率实现了53333的有效波特率.

如果没错的话,是可以发送16个byte没有问题的~
mark0668 回答时间:2016-9-30 11:55:11
关注一下这个问题
mcust.png
mark0668 回答时间:2016-9-30 11:56:06
楼主问题解决了没有
andrewz 回答时间:2016-9-30 12:19:22
mark0668 发表于 2016-9-30 11:56
楼主问题解决了没有

解决了.换成C就OK了.

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

123

所属标签

相似问题

官网相关资源

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