使用VSCode+PlatformIO+CMSIS开发STM32F407ZGT6

  • 环境准备
  • 下载VSCode
  • 安装中文插件
  • 安装PlatformIO插件
  • 创建工程
  • 安装STM32平台
  • 创建新工程
  • 移植库函数
  • 修改工程配置文件
  • 参考文章


环境准备

VSCode
PlatformIO

下载VSCode

官网下载

安装后打开,如图所示(页面默认是英文,可以安装中文插件):

codesys中ST语言中取模函数 codesys st语言编程_stm32

安装中文插件

点击左边拓展,搜索栏搜索Chinese,点击Chinese (Simplified) (简体中文) Language Pack for Visual Studio Code,再点击install,重启软件即可。

codesys中ST语言中取模函数 codesys st语言编程_codesys中ST语言中取模函数_02

安装PlatformIO插件

与安装中文插件步骤一样,先搜索platformio,点击外星人头像的插件,进入安装。

codesys中ST语言中取模函数 codesys st语言编程_编辑器_03

创建工程

安装STM32平台

点击左侧外星人头像进入PlatformIO插件,点击open进入主页面。

首次使用为了支持STM32需要安装STM32平台:点击Platforms,在搜索栏搜索STM32,点击install(因为我已经安装过了,此处显示uninstall)。

codesys中ST语言中取模函数 codesys st语言编程_搜索_04

创建新工程

codesys中ST语言中取模函数 codesys st语言编程_codesys中ST语言中取模函数_05


codesys中ST语言中取模函数 codesys st语言编程_codesys中ST语言中取模函数_06


创建工程可能会占据一些时间,当创建完成后,左边文件区会显示下图样式:

codesys中ST语言中取模函数 codesys st语言编程_stm32_07


此时,已经距离成功一大半了。

移植库函数

上述步骤已经建立了开发的基础环境,接下来将正点原子的库函数移植过来(以跑马灯为例):

正点原子库:

codesys中ST语言中取模函数 codesys st语言编程_编辑器_08

codesys中ST语言中取模函数 codesys st语言编程_编辑器_09

  1. 将工程中的CORE、HARDWARE、FWLib、SYSTEM文件夹复制到Template/src文件夹目录下,然后进入CORE目录,将startup文件删除。
  2. USER目录下的C文件H文件复制到Template/src文件夹目录。
  3. 再将复制过去的stm32f4xx.h文件移动到Template/include目录下。
  4. 修改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");
}

修改工程配置文件

  1. 打开”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_protocoldebug_protocol选择烧录器:stlink或者jlink
build_flags选项”-I“参数为头文件,此处放我们移植过来文件的位置,”-D“为宏定义。
STM32F40_41xxxUSE_STDPERIPH_DRIVER相当于Keil工程中的宏定义:

codesys中ST语言中取模函数 codesys st语言编程_stm32_10


其中STM32F40_41xxx这个参数不确定的话看芯片型号,然后在stm32f4xx.h文件中查找:

codesys中ST语言中取模函数 codesys st语言编程_搜索_11