VScode + PlatformIO 和 Keil 开发 STM32

news2024/9/23 3:26:24

        以前经常使用 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 */

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2036828.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringMVC 运行流程

SpringMVC 运行流程 💖The Begin💖点点关注,收藏不迷路💖 SpringMVC的运行流程可概括为以下几个核心步骤: 流程图: #mermaid-svg-l1CeK9JwP5wRQjBL {font-family:"trebuchet ms",verdana,arial,…

医学图像分割新突破:6篇文献带你洞悉最前沿的医学AI技术|顶刊速递·24-08-14

小罗碎碎念 文献日推主题:人工智能在医学图像分割中的最新研究进展 今天这期文章信息量很大,并且不同的人看,获取的信息量也会差距很大。为了缩小这个差距,请在正式阅读前,记住小罗的一句话——模型学会了如何分割图像…

【Spark集群部署系列三】Spark StandAlone HA模式介绍和搭建以及使用

简介: Spark Standalone集群是Master-Slaves架构的集群模式,和大部分的Master-Slaves结构集群一样,存在着Master 单点故障(SPOF)的问题。 高可用HA 如何解决这个单点故障的问题,Spark提供了两种方案&#…

83.SAP ABAP从前台找字段所在表的两种方法整理笔记

目录 方法1:F1查看技术信息 F1 技术信息 方法2:ST05开启跟踪 Activate Trace Input and save data Deactivate Trace Display Trace 分析你想要的表 方法1:F1查看技术信息 从前台找一个屏幕字段所在表,一般通过按F1来查找…

Java Nacos与Gateway的使用

Java系列文章目录 IDEA使用指南 Java泛型总结(快速上手详解) Java Lambda表达式总结(快速上手详解) Java Optional容器总结(快速上手图解) Java 自定义注解笔记总结(油管) Jav…

【大数据】6:MapReduce YARN 初体验

目录 MapReduce & YARN 初体验 集群启停命令 一键启动脚本: 单进程启停 提交MapReduce任务到YARN执行 提交MapReduce程序至YARN运行 提交wordcount示例程序 提交求圆周率示例程序 拓展:蒙特卡罗算法求PI的基础原理 onte Carlo蒙特卡罗算法…

【MySQL 06】表的约束

文章目录 🌈 一、约束的概念🌈 二、空属性约束⭐ 1. 空值无法参与运算⭐ 2. 设置非空属性 🌈 三、默认值约束⭐ 1. 默认值使用案例⭐ 2. 同时设置 not null 和 default 🌈 四、列描述约束🌈 五、zerofill 补零约束&…

贷齐乐漏洞复现+php特性绕过WAF

目录 一、环境搭建 1.将贷齐乐源码放入phpstudy中的www目录下 2.在phpstudy上创建网站: 3.在本地数据库中创建数据库--ctf,并创建users表: 4.往表中插入数据: 5.查看users表: 6.测试能否访问到数据库 二、源码分析…

力扣热题100_链表_234_回文链表

文章目录 题目链接解题思路解题代码 题目链接 234. 回文链表 给你一个单链表的头节点 head ,请你判断该链表是否为 回文链表。如果是,返回 true ;否则,返回 false 。 示例 1: 输入:head [1,2,2,1] 输出…

搭建MoneyPrinterTurbo,利用AI大模型,一键生成高清短视频实战

搭建MoneyPrinterTurbo,利用AI大模型,一键生成高清短视频 1.MoneyPrinterTurbo简介 只需提供一个视频 主题 或 关键词 ,就可以全自动生成视频文案、视频素材、视频字幕、视频背景音乐,然后合成一个高清的短视频。 github地址&a…

【大模型从入门到精通19】开源库框架LangChain LangChain文档加载器1

目录 理解文档加载器非结构化数据加载器结构化数据加载器 使用文档加载器的实际指南设置和配置安装必要的包(注意:这些包可能已经在你的环境中安装好了)从 .env 文件加载环境变量从环境变量中设置 OpenAI API 密钥 在数据驱动的应用领域&…

企业如何组建安全稳定的跨国通信网络

当企业在海外设有分公司时,如何建立一个安全且稳定的跨国通信网络是一个关键问题。为了确保跨国通信的安全和稳定性,可以考虑以下几种方案。 首先,可以在分公司之间搭建虚拟专用网络。虚拟专用网络通过对传输数据进行加密,保护通信…

Java:jdk8以后开始接口新增的3种方法:default,private,static

文章目录 jdk8以后开始接口新增的方法默认方法:deafult私有方法private如何查看自己的jdk版本静态方法static 问题接口中不止有抽象方法为什么接口中的方法都是public为什么要增加这三种方法 jdk8以后开始接口新增的方法 默认方法:deafult 必须使用defa…

【CentOS 】DHCP 更改为静态 IP 地址并且遇到无法联网

文章目录 引言解决方式标题1. **编辑网络配置文件**:标题2. **确保配置文件包含以下内容**:特别注意 标题3. **重启网络服务**:标题4. **检查配置是否生效**:标题5. **测试网络连接**:标题6. **检查路由表**&#xff1…

思科默认路由配置2

#路由协议实现# #任务二默认路由配置2# #1配置计算机的IP地址、子网掩码和网关 #2配置Router-A的名称及其接口IP地址 Router(config)#hostname Router-A Router-A(config)#int g0/0 Router-A(config-if)#ip add 192.168.1.1 255.255.255.0 Router-A(config-if)#no shutdow…

全网最适合入门的面向对象编程教程:36 Python的内置数据类型-字典

全网最适合入门的面向对象编程教程:36 Python 的内置数据类型-字典 摘要: 字典是非常好用的容器,它可以用来直接将一个对象映射到另一个对象。一个拥有属性的空对象在某种程度上说就是一个字典,属性名映射到属性值。在内部&#…

【图形验证和AI智能及CHATGPT对抗影响的是用户体验】

验证码本质上自带一层答案的语义,这原本是天然的区分人和自动程序的地方,但在今日却未必,由于AI智能及CHATGPT的发展机器要识别也变得容易。 一 :攻防思路 黑产对于验证码图片答案的获取主要有两种手段——图片穷举破解和图片模…

[C++][opencv]基于opencv实现photoshop算法高反差保留

【测试环境】 vs2019 opencv4.8.0 【效果演示】 【核心代码实现】 Filter.hpp #ifndef OPENCV2_PHOTOS_FILTER_HPP_ #define OPENCV2_PHOTOS_FILTER_HPP_#include "opencv2/core.hpp" #include "opencv2/imgproc.hpp"namespace cv {class Filter { pu…

【网络编程】TCP机械臂测试

通过w(红色臂角度增大)s(红色臂角度减小)d(蓝色臂角度增大)a(蓝色臂角度减小)按键控制机械臂 注意:关闭计算机的杀毒软件,电脑管家,防火墙 1)基于TCP服务器…

AFSim 仿真系统----《普朗克黑体辐射定律的区间积累》

参考文献 《普朗克黑体辐射函数的积分》,W. K. Widger, Jr. 和 M. P. Woodall,发表在《美国气象学会公报》,第57卷,第10期,1976年10月,页码1217-1219 上述参考文献描述了一种在不依赖于需要大量迭代的数值…