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

stm32f030c8t6在if语句进行浮点运算,引起PB4,PB5引脚输出异常

[复制链接]
randy189 提问时间:2022-1-22 10:04 / 未解决

小批量生产的产品出现如题的现象,之前是偶尔出现的,前段时间,增加了部分功能,程序增大了,就一直出现了。逐步追踪,定位在一条if语句上,把浮点运算修改为整型运算后解决问题,就是好奇问一下是不是单片机的bug,这个问题是可以复现的,可以私下提供工程文件

收藏 评论6 发布时间:2022-1-22 10:04

举报

6个回答
废鱼 回答时间:2022-1-22 14:00:18

应该不是单片机的bug,浮点运算应该是不会引起这个问题的。F4系列有硬件浮点,如果开启需要修改.S文件。030这个系列是软件浮点,理论是不会发升异常。

可以考虑是不是浮点运算是数据溢出后导致的问题。在线仿真,在进入if前,先查看GPIO寄存器和要判断的数据内容。运行if后,再看寄存器的状态。是不是有用指针的地方,看看指针指向的地址是不是和PB输出寄存器相同。

butterflyspring 回答时间:2022-1-24 10:25:51
如同楼上所说,增加的这部分是软件运算部分。 这部分代码运行在内核,与GPIO无关。所以楼主关注一下是不是这部分代码运行后寻址到了GPIO寄存器,或者由于增加了运行时间,导致中断等时序变化引起软件的多操作GPIO。
xmshao 回答时间:2022-1-24 10:33:57
你注意下,F0系列是不支持硬件FPU运算单元的,你在调用库时需要调用那个不带硬件浮点单元的DSP库,同时
对于STM32而言,还要选择  小端模式 的DSP库,以KEIL MDK为例,此时需选择 arm_cortexM0l_math.lib 。另外,这样有篇
相关应用分享,你可以参考下。关于STM32浮点运算单元FPU的小话题 (qq.com)
randy189 回答时间:2022-1-24 10:49:03

废鱼 发表于 2022-1-22 14:00
应该不是单片机的bug,浮点运算应该是不会引起这个问题的。F4系列有硬件浮点,如果开启需要修改.S文件 ...

[md]谢谢回答。现在用的MDK版本不支持stm32f030系列的仿真,暂时还不能确定是不是溢出导致的,就是修改成整数运算就没有出现了。

xiaoxiaowa 回答时间:2022-1-26 20:35:54

不会是栈空间开得不够吧?一旦溢出,可能会出一些怪现象。

Glenxu 回答时间:2022-2-8 15:00:17

xiaoxiaowa 发表于 2022-1-26 20:35
不会是栈空间开得不够吧?一旦溢出,可能会出一些怪现象。

我遇到过类似现象,好像是程序太大了,但编译没有提示,简化或不用浮点就好了。

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版