vscode+platformIO开发STM32

Posted Sola_Ex

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了vscode+platformIO开发STM32相关的知识,希望对你有一定的参考价值。

vscode+platformIO开发STM32

前言

果然不动就没问题,一动问题还挺多。。。

FreeRTOS的FPU问题

FPU是一部分MCU自带的硬件浮点运算功能,开启硬件浮点后,运算速度可以加速。本人在做的是运动控制类,时常需要和浮点数打交道,在之前使用的STM32G0系列MCU,属于Cortex-M0+,它并不是带有FPU,因此在移植FreeRTOS、DSP库(软件)的时候,并没有遇到很多问题,更多的是直接依赖stm32cubeMX的自带的东西直接使用。但是在我将MCU更改为STM32F429之后,发现它是带FPU的,在freeRTOS的port.c的文件中也有操作FPU的。因此在没有任何更改直接换MCU的情况下,会有这样的报错:

C:\\Users\\ADMINI~1\\AppData\\Local\\Temp\\ccFdJEoV.s:330: Error: selected processor does not support `vstmdbeq r0!,s16-s31' in Thumb mode
C:\\Users\\ADMINI~1\\AppData\\Local\\Temp\\ccFdJEoV.s:332: Error: instruction not allowed in IT block -- `stmdb r0!,r4-r11,r14'
C:\\Users\\ADMINI~1\\AppData\\Local\\Temp\\ccFdJEoV.s:352: Error: selected processor does not support `vldmiaeq r0!,s16-s31' in Thumb mode
C:\\Users\\ADMINI~1\\AppData\\Local\\Temp\\ccFdJEoV.s:354: Error: instruction not allowed in IT block -- `msr psp,r0'
*** [.pio\\build\\SGRBL_F429\\src\\stm32-platformio-freertos\\portable\\GCC\\ARM_CM4F\\port.o] Error 1

毫无疑问,这是配置有问题,很巧的是,我见过这个报错,如果自己曾经写过makefile,并且有过普通从没有FPU的makefile转到带FPU的makefile的过程的话,应该都会遇到这样的问题,其实这也不难解决,简单的,我不自己写,我用stm32cubeMX先生成一个来看看,有什么是需要注意的:

makefile里面,对比一下就知道,多了这部分操作浮点的,当然我们也知道platformIO本身也是使用gcc的,几乎可以说就是一个升级版的makefile。OK,底子摸懂了,就开始表演了
毫无疑问,我直接添加这句话

结果当然是毫无疑问,出问题了

经过我多番寻找,结果发现是PIO的一个bug,所以解决方法也给上:

  • 1、先创建一个update_link_flags.py
  • 2、在update_link_flags.py里面写上这些内容:
# Custom settings, as referred to as "extra_script" in platformio.ini
#
# See http://docs.platformio.org/en/latest/projectconf.html#extra-script

from SCons.Script import DefaultEnvironment

env = DefaultEnvironment()

env.Append(
    LINKFLAGS=[
        "-mthumb",
        "-mfloat-abi=hard",
        "-mfpu=fpv4-sp-d16",
        "-mcpu=cortex-m4"
    ]
)

我的是这样的:

这样的话,你可以很愉快地进行编译了。

以上是关于vscode+platformIO开发STM32的主要内容,如果未能解决你的问题,请参考以下文章

vscode+platformIO开发STM32

vscode+platformIO开发STM32

vscode+platformIO开发STM32

vscode+platformIO开发STM32

vscode+platformIO开发STM32

vscode+platformIO开发STM32