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 */

        这样工程就可以在两个环境中编译使用

作者:无敌暴龙战士朵拉

物联沃分享整理
物联沃-IOTWORD物联网 » VScode与PlatformIO及Keil集成开发STM32实战指南

发表回复