VScode与PlatformIO及Keil集成开发STM32实战指南
以前经常使用 KEIL 写 STM32 的代码,自从使用 VScode 写 ESP32 后感觉 KEIL 的开发环境不美观不智能了,后面学习了 VScode 开发 STM32 。
使用过程中发现 串口重定向在 KEIL 中可以用,搬到 VScode 后不能用,不用勾选 Use Micro LIB 选型的重定向方法也不能用,不知道为什么了,所以改了文中这种配置,程序在 Keil 和VScode 中都能编译下载,唯一区别 VScode 中烧录不能串口重定向,不过问题不大,也可以使用 hal 库的串口发送接收函数,同样可以实现。
使用软件:VScode + STM32CubeMX + KEIL,可以在 VScode 中调整代码格式,在 keil 中下载调试。
先前条件
VScode 下载插件 PlatformIO 开发环境
修改 VScode 默认编码格式(防止代码在 keil 中中文乱码)
设置搜索 encod 编码改成 gb2312
VScode 设置 ctrl + s 格式化代码 (format on save)
VScode 设置 json 文件
{
"cmake.configureOnOpen": true,
"cmake.showOptionsMovedNotification": false,
"arduino.useArduinoCli": true,
"editor.detectIndentation": false, /* 启用时根据文件内容进行重写*/
"explorer.confirmDelete": false,
"security.workspace.trust.untrustedFiles": "open",
"C_Cpp.errorSquiggles": "enabled",
"editor.formatOnSave": true,
"terminal.integrated.autoReplies": {},
"explorer.confirmDragAndDrop": false,
"editor.insertSpaces": false, /* 自动插入空格禁用*/
"editor.renderControlCharacters": true, /* 是否显示控制字符:启用*/
// "editor.renderWhitespace": "all", /* 显示 4 个空格是.... */
"editor.tabSize": 4, /* tab 设置为 4 个空格*/
"editor.fontSize": 18, /* 代码字体大小*/
"editor.fontFamily": "Monaco, 'Courier New', monospace", /* 代码字体*/
"update.mode": "manual",
"cmake.pinnedCommands": [
"workbench.action.tasks.configureTaskRunner",
"workbench.action.tasks.runTask"
],
"explorer.confirmPasteNative": false,
"files.autoGuessEncoding": true,
"debug.console.fontSize": 18,
"scm.inputFontSize": 16,
"chat.editor.fontSize": 18,
"terminal.integrated.fontSize": 16,
"files.encoding": "gb2312" /* 设置不自动更新*/
}
PlatformIO 生成项目工程
注意自选项目生成位置 ,后面还会在这个位置生成工程
修改配置文件,删除框选文件夹
[platformio]
include_dir = Inc
src_dir = Src
[env:genericSTM32F103C8]
platform = ststm32
board = genericSTM32F103C8
framework = stm32cube
upload_protocol = jlink
upload_speed = 921600
debug_tool = jlink
build_flags =
-Wl,-u,_printf_float ;支持输出小数
-Wl,-Map,output.map ;输出map
-O0 ;编译优先级(0,1,2,3)
STM32cubeMX 生成项目工程
这里使用 STM32F103C8T6 芯片类型,简单基础配置一下
调试接口
选择外部时钟
串口异步通信
配置中断
时钟配置,外部晶振 8M,103的时钟 72M
生成工程
点击 “GENERATE CODE” 生成代码
串口重映射
/* USER CODE BEGIN 1 */
#include "stdio.h"
#if 1
struct __FILE
{
int handle;
};
FILE __stdout;
void _sys_exit(int x)
{
x = x;
}
int fputc(int ch, FILE *f)
{
HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0x0001);
return ch;
}
#endif
/* USER CODE END 1 */
这样工程就可以在两个环境中编译使用
作者:无敌暴龙战士朵拉