使用VSCode+PlatformIO+CMSIS开发STM32F407ZGT6
- 环境准备
- 下载VSCode
- 安装中文插件
- 安装PlatformIO插件
- 创建工程
- 安装STM32平台
- 创建新工程
- 移植库函数
- 修改工程配置文件
- 参考文章
环境准备
VSCode
PlatformIO
下载VSCode
官网下载
安装后打开,如图所示(页面默认是英文,可以安装中文插件):
安装中文插件
点击左边拓展,搜索栏搜索Chinese,点击Chinese (Simplified) (简体中文) Language Pack for Visual Studio Code,再点击install,重启软件即可。
安装PlatformIO插件
与安装中文插件步骤一样,先搜索platformio,点击外星人头像的插件,进入安装。
创建工程
安装STM32平台
点击左侧外星人头像进入PlatformIO插件,点击open进入主页面。
首次使用为了支持STM32需要安装STM32平台:点击Platforms,在搜索栏搜索STM32,点击install(因为我已经安装过了,此处显示uninstall)。
创建新工程
创建工程可能会占据一些时间,当创建完成后,左边文件区会显示下图样式:
此时,已经距离成功一大半了。
移植库函数
上述步骤已经建立了开发的基础环境,接下来将正点原子的库函数移植过来(以跑马灯为例):
正点原子库:
- 将工程中的CORE、HARDWARE、FWLib、SYSTEM文件夹复制到Template/src文件夹目录下,然后进入CORE目录,将startup文件删除。
- 将USER目录下的C文件和H文件复制到Template/src文件夹目录。
- 再将复制过去的stm32f4xx.h文件移动到Template/include目录下。
- 修改Template/src/SYSTEM/sys/sys.c文件中四个函数:
老的:
//THUMB指令不支持汇编内联
//采用如下方法实现执行汇编指令WFI
__asm void WFI_SET(void)
{
WFI;
}
//关闭所有中断(但是不包括fault和NMI中断)
__asm void INTX_DISABLE(void)
{
CPSID I
BX LR
}
//开启所有中断
__asm void INTX_ENABLE(void)
{
CPSIE I
BX LR
}
//设置栈顶地址
//addr:栈顶地址
__asm void MSR_MSP(u32 addr)
{
MSR MSP, r0 //set Main Stack value
BX r14
}
新的:
void WFI_SET(void)
{
__ASM volatile("WFI");
}
void INTX_DISABLE(void)
{
__ASM volatile("CPSID I");
__ASM volatile("BX LR ");
}
void INTX_ENABLE(void)
{
__ASM volatile("CPSIE I");
__ASM volatile("BX LR");
}
void MSR_MSP(u32 addr)
{
__ASM volatile("MSR MSP, r0");
__ASM volatile("BX r14");
}
修改工程配置文件
- 打开”platformio.ini文件“:
[env:black_f407zg]
platform = ststm32
board = black_f407zg
framework = cmsis
upload_protocol = stlink ; 上传工具
debug_tool = stlink ; 调试工具
build_flags = ; Build options
-Isrc
-Isrc/CORE
-Isrc/HARDWARE/LED
-Isrc/FWLib/inc
-Isrc/SYSTEM/delay
-Isrc/SYSTEM/sys
-Isrc/SYSTEM/usart
-D STM32F40_41xxx ; 定义全局宏
-D USE_STDPERIPH_DRIVER
相关参数参考PlatformIO官网手册upload_protocol和debug_protocol选择烧录器:stlink或者jlink。
build_flags选项”-I“参数为头文件,此处放我们移植过来文件的位置,”-D“为宏定义。
STM32F40_41xxx和USE_STDPERIPH_DRIVER相当于Keil工程中的宏定义:
其中STM32F40_41xxx这个参数不确定的话看芯片型号,然后在stm32f4xx.h文件中查找: