在PlatformIO使用CMSIS标准库开发STM32(解决冲突)

博主也是刚开始学stm32,觉得keil不好看,想用更加熟悉的VS Code来开发STM32。我学的教材用的是标准库,可是网上大部分教程都是针对HAL库的。终于找到一篇教程之后,发现复制进去的库在链接时会和PlatformIO自带的库冲突。

这是我参考的文章:

STM32F103 在VSCode下使用Platform IO 基于CMSIS标准库函数开发 - Zennn - 博客园 (cnblogs.com)

image-20211112122632711.png

研究一番之后,是因为system_stm32f10x.c和PlatformIO自带的system_stm32f1xx.c冲突了,解决方法如下:

把这几个文件放进include目录,作为全局头文件。如果不想分类的话,直接放进src目录也行。

stm32f10x_conf.h
stm32f10x_it.h
stm32f10x.h
system_stm32f10x.h

然后把stm32f10x_it.c文件、FWlib目录放进src目录。

具体结构如下:

image-20211112122821580.png

然后修改platformio.ini文件:

[env:genericSTM32F103VE]
platform = ststm32
board = genericSTM32F103VE      ; 板块
framework = cmsis               ; 标准库
upload_protocol = stlink        ; 上传工具
debug_tool  = stlink            ; 调试工具
build_flags =                   ; Build 选项
    -Isrc/FWlib/inc             ; 添加搜索,目录
    -D STM32F10X_MD             ; 设备类型
    -D USE_STDPERIPH_DRIVER

如果需要使用其他容量的芯片,可以参考下面修改设备类型:

STM32F10X_LD:         STM32 Low density devices 
STM32F10X_LD_VL:     STM32 Low density Value Line devices 
STM32F10X_MD:         STM32 Medium density devices 
STM32F10X_MD_VL:     STM32 Medium density Value Line devices 
STM32F10X_HD:         STM32 High density devices 
STM32F10X_HD_VL:     STM32 High density value line devices 
STM32F10X_XL:         STM32 XL-density devices 
STM32F10X_CL:         STM32 Connectivity line devices 

注意,不需要复制core_cm3这些文件到工程目录,也省掉修改736行和753行这些操作。一般到这里就可以正常编译了,如果想调试,必须在platformio.ini文件填写调试工具。

虽然VS Code很好看,但是不建议在实际生产环境中使用,因为不知道有没有隐藏的bug,本教程仅供学习使用。