久芯网

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

avatar randy189 提问时间: 2023-08-11 21:03:14 / 未解决

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


如需获得 stm32f030c8t6 等器件的更多信息,请点击链接或 点击此处 联系在线客服!

6个回答
  • avatar 废鱼
    回答时间: 2023-08-11 21:24:28

    应该不是单片机的bug,浮点运算应该是不会引起这个问题的。F4系列有硬件浮点,如果开启需要修改.S文件。030这个系列是软件浮点,理论是不会发升异常。 可以考虑是不是浮点运算是数据溢出后导致的问题。在线仿真,在进入if前,先查看GPIO寄存器和要判断的数据内容。运行if后,再看寄存器的状态。是不是有用指针的地方,看看指针指向的地址是不是和PB输出寄存器相同。

  • avatar butterflyspring
    回答时间: 2023-08-11 21:49:22

    如同楼上所说,增加的这部分是软件运算部分。 这部分代码运行在内核,与GPIO无关。所以楼主关注一下是不是这部分代码运行后寻址到了GPIO寄存器,或者由于增加了运行时间,导致中断等时序变化引起软件的多操作GPIO。

  • avatar xmshao
    回答时间: 2023-08-11 22:11:09

    你注意下,F0系列是不支持硬件FPU运算单元的,你在调用库时需要调用那个不带硬件浮点单元的DSP库,同时 对于STM32而言,还要选择 小端模式 的DSP库,以KEIL MDK为例,此时需选择 arm_cortexM0l_math.lib 。另外,这样有篇 相关应用分享,你可以参考下。关于STM32浮点运算单元FPU的小话题 (qq.com)

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

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

  • avatar xiaoxiaowa
    回答时间: 2023-08-11 23:09:45

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

  • avatar Glenxu
    回答时间: 2023-08-11 23:35:23
    xiaoxiaowa 发表于 2022-1-26 20:35
    不会是栈空间开得不够吧?一旦溢出,可能会出一些怪现象。

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

会员中心 微信客服
客服
回到顶部