【使用VSCODE开发STM32---学习记录】
**
使用VSCODE开发STM32—学习记录
**
前些日子跟着B站的视频配置VSCODE的STM32开发环境,已经配置成功了,这里来记录一下配置过程。以STM32F103C8T6为例。
完成后,可以实现STM32CubeMx新建工程,VSCODE编写代码,可以一键编译、一键下载,可以使用DEBUG调试。
一、用到的软件
- VSCODE
- STM32CubeMx
- GNU Arm Embedded Toolchain
截止到2022.12.27,最新版本为12.2.Rel1,但是安装这个版本后,使用vscode编译有警告(warning: _close is not implemented and will always fail),在main()函数之前,加void _close(){}的函数声明后,该警告消失。我用低版本的工具链时,vscode编译完全没有问题,仅仅将工具链更新到12.2.Rel1,就出现了警告,可能该警告不会影响使用,但是膈应人。我也不太清楚升级最新版本后,这个工具链有什么改变。经过测试,11.2以下版本的工具链编译时不会出现警告,但是11.2版本的工具链太大了,有3个多G,所以我安装了10.3版本。 - MinGW-w64
是一个完整的gcc运行环境。这个网站下面可以下载10.0.0版本,去github可以下载12.2版本。安装10.0.0版本即可。我安装了12.2版本。 - openocd
开源片上调试器,最新版本0.12.0。我安装了0.12.0版本。
二、操作步骤
1、软件安装
(1)网上有很多VSCODE和STM32CubeMx的安装教程,这里不再赘述。VSCODE安装完成后,需要安装三个插件:1、C/C++(必装)2、Cortex-Debug(必装)3、Chinese (Simplified) (简体中文) Language Pack for Visual Studio Code(选装)
(2)3、4、5这三个软件从链接网站中下载压缩包,分别将压缩包解压到C盘。解压后,如下图。
然后,在搜索栏搜索“环境变量”并打开,将GNU Arm Embedded Toolchain、mingw64、openocd-0.12.0这三个文件夹下的BIN文件夹路径,分别添加到环境变量中。要注意,添加完成后要连续点“确定”三次,退出。


打开mingw64下的bin文件夹,找到mingw32-make.exe,复制,在该目录下粘贴,并重命名为make。如下图所示。
至此,软件的安装已将完成,下面开始创建工程,并在VSCODE中调试,使vscode可以实现工程的编译、下载和调试。
2、使用STM32CubeMx生成STM32F103C8T6的工程文件,同样地,网上有很多配置教程,这里不在赘述。
STM32F103C8T6的PC13引脚接了一个LED,这里配置PC13为推挽输出(Output Push Pull),默认高电平。
配置串口一(可选)(建议配置,后面有支持printf和fprintf)
唯一注意的地方是在Proect Manager的ToolChain/IDE中选择“MakeFile”。
配置完成后,点生成代码即可。
3、配置完成后用VSCODE打开工程文件夹,并打开Scr文件夹下的main.c文件。如下图所示。
在上图界面,按快捷键ctrl+shift+P,打开C/C++:配置(UI)。第一次使用时需要搜索。后面使用会在最近使用中出现。如下图所示。
打开C/C++:配置(UI)后,修改“编译器路径”和“IntelliSense 模式”,如下图所示。编译器路径可能不需要修改。
从左侧工程中打开makefile文件,找到113行左右,将下图方框中的代码复制并修改格式。
将方框中的代码复制,并修改格式:将每行开头的“-I”删除,将每行最后的“\”删除,修改后如下面代码所示。
下面的代码就是头文件的包含目录。
Inc
Drivers/STM32F1xx_HAL_Driver/Inc
Drivers/STM32F1xx_HAL_Driver/Inc/Legacy
Drivers/CMSIS/Device/ST/STM32F1xx/Include
Drivers/CMSIS/Include
将上面的代码添加到C/C++:配置(UI)的“包含路径”中。注意,在${workspaceFolder}/**后面按“回车”,然后复制。完成后如下图所示。
同样地,在makefile的104行左右,找到# C defines,将下面的代码复制,并调整格式
USE_HAL_DRIVER
STM32F103xB
将这两句代码添加到C/C++:配置(UI)的“定义”中。如下图所示。
至此,在终端中输入“make”,就可以编译了。下图是输入make的图片和运行成功的图片。

4、使串口支持printf和fprintf(可选)(建议配置)
在makefile的145行左右,添加以下代码
-u_printf_float -u_fprintf_float
在main.c的/* USER CODE BEGIN 0 /和/ USER CODE END 0 */之间添加以下代码
//printf的重定向
//1、使用printf一定要加\n
//2、使用时 包含stdio.h
//3、makefile 145h 加-u_printf_float以支持输出浮点数 printf输出到设备
//4、makefile 145h 加-u_fprintf_float以支持fprontf输出浮点数 fprintf输出到文件
#ifdef __GNUC__
#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#else
#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#endif
PUTCHAR_PROTOTYPE
{
uint8_t temp[1]={ch};
HAL_UART_Transmit(&huart1,temp,1,0xffff);//要提前配置huart1,PA9_TX PA10_RX
return ch;
}
int _write(int file, char *ptr, int len)
{
int DataIdx;
for (DataIdx=0;DataIdx<len;DataIdx++)
{
__io_putchar(*ptr++);
}
return len;
}
添加后如图所示

添加完成后,就可以在main中使用printf通过串口打印信息了。
注意!!!这里添加了
HAL_GPIO_TogglePin(LED_GPIO_Port,LED_Pin);
HAL_Delay(500);
实现LED的闪烁效果。
可以注释掉两句printf,只使用LED的闪烁来看效果。
重定向printf是为了以后使用。
5、使VSCODE支持一键“编译”和一键“编译及下载”。
下载时,使用的是STLINK -V2下载器。
如果使用最新版本的软件3、4、5,可能stlink -v2.cfg版本会出现警告,提示修改为stlink.cfg,这里的代码以stlink.cfg为例。
vscode上方菜单栏,选择终端,配置任务,选择C\C++:gcc.exe build active file
在生成的tasks.json中添加下面的代码
{
"version": "2.0.0",
"tasks": [
{
"type": "shell",
"label": "Build",
"command": "make",
"args": [],
"problemMatcher": [
"$gcc"
],
"group": "build"
},
{
"type": "shell",
"label": "Build & Update",
"command": "openocd",
"args": [
"-f",
"C:/openocd-0.12.0/share/openocd/scripts/interface/stlink.cfg",
"-f",
"C:/openocd-0.12.0/share/openocd/scripts/target/stm32f1x.cfg",
"-c",
"program build/LED.elf verify reset exit"
],
"problemMatcher": [
"$gcc"
],
"group": "build",
"dependsOn": "Build"
}
]
}
然后选择终端,运行任务找到“Build”和“Build & Update”,就可以实现一键“编译”和一键“编译及下载”。
6、使VSCODE支持DeBug调试
点击VSCODE左边的“运行和调试”按钮,选择“创建launch.jason文件”,选择“C/C++(GDB/LLDB)”,选择默认配置。
在生成的launch.json中将configurations中的内容删除,然后点右下方的添加配置,选择“Cortex Debug:OpenOCD”。
将其中的内容修改为下面的代码。
{
// 使用 IntelliSense 了解相关属性。
// 悬停以查看现有属性的描述。
// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"cwd": "${workspaceRoot}",
"executable": "build/LED.elf",
"name": "Debug with OpenOCD",
"request": "launch",
"type": "cortex-debug",
"servertype": "openocd",
"configFiles": [
"C:/openocd-0.12.0/share/openocd/scripts/interface/stlink.cfg",
"C:/openocd-0.12.0/share/openocd/scripts/target/stm32f1x.cfg"
]
}
]
}
至此,在“运行和调试”中点击开始调试按钮,就可以进行调试了。
三、以后的开发
配置完基本工程后,日后开发可能会涉及到
1、修改工程文件夹的名字(英文名)
2、添加c文件和头文件3、配置IIC、DMA等使用的文件
目前就想到这两个,如果以后再想到其他需要修改的地方,再来添加。
解决:
1、修改名字后,在makefile的16行左右,找到target,将工程名修改为最新;
在task.json(一键编译的任务)的24行左右,将工程名修改为最新;
在launch.json(DeBug的任务)的9行左右,将工程名修改为最新。
2、将添加的C文件放在“Scr”文件夹中;
将添加的头文件放在“Inc”文件夹中;
在makefile的37行左右,找到C sources,在最下方将添加的C文件路径补上即可(按照前面的格式)。
更多推荐

所有评论(0)