STM32开发环境配置——VSCode+PlatformIO + CubeMX + FreeRTOS的集成环境配置
前言
为什么配置这样的一个环境呢?鄙人受够了Keil5那个简陋的工作环境了,实在是用不下去,调试上很容易跟CubeMX的代码产生不协调导致调试——发布代码不一致造成的一系列问题。CubeIDE虽说不错,但是它的代码辅助功能和构建系统实在不敢恭维,经常出现Makefile未同步导致符号定义冲突,亦或者是埋下了潜在的程序bug。
也有人尝试使用Keil Assistance + VSCode + Keil分工写代码与烧录,这听起来不错,但是调试并不方便,常常要来回奔波,实在是有些麻烦。这里我们尝试新兴的PlatformIO来辅助我们进行嵌入式的开发。
一、PlatformIO介绍:
PlatformIO 是一个跨平台的开源 IDE(集成开发环境)和构建系统,专门为嵌入式开发设计。它支持多种嵌入式平台和框架,尤其适合用于开发基于 Arduino、ESP32、STM32、Raspberry Pi 等硬件的应用程序。PlatformIO 提供了一整套工具,用于嵌入式软件开发的各个方面,包括编译、调试、测试、库管理、代码补全、版本控制等。
1、主要特点
-
多平台支持: PlatformIO 支持多种主流的嵌入式开发平台和微控制器架构,包括但不限于:
- Arduino(各种 Arduino 板)
- ESP32/ESP8266
- STM32
- Raspberry Pi
- Atmel AVR、ARM Cortex-M、TI MSP430 等多种芯片架构。
-
跨平台开发: PlatformIO 可以在多种操作系统上运行,包括:
- Windows
- macOS
- Linux
-
集成开发环境(IDE):
- PlatformIO 可以与多种 IDE 配合使用,最常见的是 VS Code。它为开发者提供了功能强大的代码编辑、自动补全、智能感知、版本控制等功能。
-
构建系统和库管理:
- 构建系统:PlatformIO 提供了一种简化的构建系统,可以跨平台编译代码并进行优化。
- 库管理:PlatformIO 内置了一个库管理器,可以轻松地下载、更新、管理和集成各种开源库。
- 版本控制:它支持 Git,方便代码的版本控制和团队协作。
-
多种嵌入式框架支持: PlatformIO 支持多种常用的嵌入式开发框架,例如:
- Arduino
- FreeRTOS
- ESP-IDF(用于开发 ESP32)
- Zephyr
- mbed
- CMSIS
- ChibiOS 等。
-
自动化测试与CI/CD支持: PlatformIO 支持自动化测试,能够通过集成测试框架(如 Unity 和 Catch)进行单元测试,帮助开发者提高代码质量。此外,PlatformIO 还可以与持续集成(CI)工具如 Jenkins、Travis CI 等结合使用。
-
调试支持: PlatformIO 提供了对多种硬件平台的调试支持,能够进行单步调试、变量观察、堆栈跟踪等操作。支持多种硬件调试器,如 J-Link、ST-Link、CMSIS-DAP 等。
-
高级功能:
- Remote Development:支持远程开发,可以通过 SSH 等方式连接到远程设备进行开发和调试。
- 固件上传:支持多种方式上传固件到目标设备,包括 USB、串口、OTA(无线上传)等。
- 本地和云编译:除了本地编译外,PlatformIO 还支持使用云服务进行编译,方便不同开发环境间的协作。
2、PlatformIO 的安装与使用
参考VSCode 下 PlatformIO 的安装教程-CSDN博客
这篇文章包括了修改python的环境变量,使用自定义版本的python。
二、使用STM32CubeMX生成带FreeRTOS的工程
参考STM32CubeMX配置生成FreeRTOS项目_stm32cubemx freertos-CSDN博客
我这里已经生成好了,最后一步IDE选择生成Makefile
文件目录如图:
其他文件是添加到platformio工程生成的文件
三、使用VScode中的platformIO插件导入项目
1、新建工程
2、选择项目名称和文件路径以及添加使用的芯片
3、点击下面的finish,等待导入完成,目录如下
4、修改platformio.ini文件配置,目的是添加RTOS库和项目源文件、头文件
; PlatformIO Project Configuration File
;
; Build options: build flags, source filter
; Upload options: custom upload port, speed and extra flags
; Library options: dependencies, extra library storages
; Advanced options: extra scripting
;
; Please visit documentation for the other options and examples
; https://docs.platformio.org/page/projectconf.html[env:genericSTM32F103VE]
platform = ststm32
board = genericSTM32F103VE
framework = stm32cubelib_extra_dirs = Middlewares\Third_Party\FreeRTOS\Sourcebuild_flags = -IHardWare[platformio]
src_dir = Core/Src
include_dir = Core/Inc
lib_extra_dirs = Middlewares\Third_Party\FreeRTOS\Source 添加RTOS库文件路径
四、编译、下载
编译通过!!!
相关文章:

STM32开发环境配置——VSCode+PlatformIO + CubeMX + FreeRTOS的集成环境配置
前言 为什么配置这样的一个环境呢?鄙人受够了Keil5那个简陋的工作环境了,实在是用不下去,调试上很容易跟CubeMX的代码产生不协调导致调试——发布代码不一致造成的一系列问题。CubeIDE虽说不错,但是它的代码辅助功能和构建系统实在…...

Profibus转Profinet网关赋能鼓式硫化机:智能化生产升级的关键突破
在现代工业自动化领域,通讯协议转换器发挥着至关重要的角色。它们能够实现不同网络间的无缝对接和数据传输,确保了生产线上的设备可以顺畅地交流信息。今天,我们就来深入讨论开疆智能profibus转profinet网关KJ-PBM-PN以及其在鼓式硫化机中的应…...
redis 缓存穿透,缓存雪崩,缓存击穿
之前也不知道是哪个老六总结出来得缓存穿透,缓存击穿 。 穿透,击穿 中文上容易搞混,所以贴出英文 缓存穿透: Cache Penetration “Penetration” 有穿透、渗透之意, eg: the penetration of hackers into the system (黑客对系统的侵入) 缓…...
JAVA8怎么使用9的List.of
在 Java 8 中,List.of 方法并不可用,因为这是从 Java 9 开始引入的用于创建不可变列表的便捷方法。要在 Java 8 中达到类似的效果,您需要使用其他方式来创建列表。常规的方法是先创建集合对象然后再添加元素 List<String> list new A…...
告别手动测试:AUTOSAR网络管理自动化测试实战
文章目录 一、自动化测试系统架构硬件组成软件架构 二、测试覆盖的关键场景状态机测试时间参数测试容错性测试 三、测试case举例四、小结 一、自动化测试系统架构 AUTOSAR网络管理自动化测试由硬件设备和软件工具共同完成。 硬件组成 程控电源(DUT供电࿰…...
BUCK电路利用状态空间平均法和开关周期平均法推导
以BUCK电路为例的两种方法推导 BUCK电路简介 BUCK电路是一种降压型DC-DC转换器,其拓扑结构如下: 输入电压 V in V_{\text{in}} Vin,输出电压 V out = D V in V_{\text{out}} = D V_{\text{in}} Vout=DVin(稳态时, D D D为占空比)。关键元件:开关管 S S S、续流…...

MongoDB 用户与权限管理完全指南
在当今数据驱动的时代,数据库安全已成为企业IT架构中最关键的环节之一。作为最受欢迎的NoSQL数据库之一,MongoDB提供了完善的用户认证和权限管理机制,但许多开发者和数据库管理员对这些功能的理解和应用仍停留在表面层次。本文将全面剖析Mong…...
C++滑动门问题(附两种方法)
题目如下: 滑动窗口 - 题目 - Liusers OJ ——引用自OJ网站 方法如下: 1.常规思想 #include<bits/stdc.h> using namespace std; int main() {int n,k;int a[110];cin>>n>>k;for(int i0;i<n;i){cin>>a[i];}for(int i0;i…...

基于ITcpServer/IHttpServer框架的HTTP服务器
https://www.cnblogs.com/MuZhangyong/p/16839231.html 在基于ITcpServer/IHttpServer框架的HTTP服务器实现中,OnBody方法主要用于接收HTTP请求体数据,而触发HTTP响应通常是在OnMessageComplete方法中完成。以下是完整的响应触发机制说明: sequenceDiagramClient->>…...
初识main函数
int main(int argc, char *argv[]) {int a 0;return a; }X64 MSVC编译器 Windows x64调用约定 { // 将第二个参数(rdx)保存到栈[rsp0x10]位置 0x7ff6e54c2ad0 mov qword ptr [rsp10h],rdx // 将第一个参数(ecx)保存到栈[rsp8]位置 0x7ff6e54c2ad5 …...

FPGA高效验证工具Solidify 8.0:全面重构图形用户界面
近日,FPGA高效验证工具Solidify发布了8.0版本。该版本对图形用户界面(GUI)进行了全面重构,历时两年,经过了大幅的架构改进,旨在为用户提供更安全、更稳定的使用环境。 Solidify的用户对隐私有严格要求&…...

SIL2/PLd 认证 Inxpect毫米波安全雷达:3D 扫描 + 微小运动检测守护工业安全
Inxpect 成立于意大利,专注工业安全技术。自成立起,便致力于借助先进雷达技术提升工业自动化安全标准,解决传统安全设备在复杂环境中的局限,推出获 SIL2/PLd 和 UL 认证的安全雷达产品。 Inxpect 的雷达传感器技术优势明显。相较于…...
java中string类型的list集合放到redis的5种数据类型的那种比较合适呢,可以用StringRedisTemplate实现
在Java中,如何将一个String类型的List集合存储到Redis中,并且应该选择Redis的哪种数据类型。同时,用户还问到是否可以使用StringRedisTemplate来实现。 首先,我需要回忆一下Redis的5种主要数据类型:字符串(…...
PyQt学习系列09-应用程序打包与部署
PyQt学习系列笔记(Python Qt框架) 第九课:PyQt的应用程序打包与部署 课程目标 掌握使用 PyInstaller 将PyQt应用程序打包为独立可执行文件学习处理 资源文件(图标、样式表、图片)和 依赖项实现 跨平台部署࿰…...
实现图片自动压缩算法,canvas压缩图片方法
背景: 在使用某些支持webgl的图形库(eg:PIXI.js,fabric.js)场景中,如果加载的纹理超过webgl可处理的最大纹理限制,会导致渲染的纹理缺失,甚至无法显示。 方案 实现图片自动压缩算…...
《数据结构笔记三》:单链表(创建、插入、遍历、删除、释放内存等核心操作)
不带头节点的单链表:(不带表头) #include<stdio.h> #include<stdlib.h> #include<string.h> //定义一个链表节点结构体 typedef struct Node {/* data */int data; //表示节点数据域struct Node *next; //…...
光伏行业如何利用SD-WAN优化分布式网络:替代MPLS、VPN、4G/5G的网络架构升级与云安全方案全解析
光伏行业的网络通信挑战与SD-WAN技术方案对比分析 光伏行业的分布式网络架构、远程站点多、通信环境复杂,以及对实时数据传输的高要求,使得网络架构成为影响行业数字化转型的重要因素。近年来,SD-WAN(软件定义广域网)…...

2025电工杯数学建模A题思路数模AI提示词工程
我发布的智能体链接:数模AI扣子是新一代 AI 大模型智能体开发平台。整合了插件、长短期记忆、工作流、卡片等丰富能力,扣子能帮你低门槛、快速搭建个性化或具备商业价值的智能体,并发布到豆包、飞书等各个平台。https://www.coze.cn/search/n…...

LLM | 论文精读 | NAACL 2025 | Clarify When Necessary:教语言模型何时该“问一句”再答!
🔍 解读 NAACL 2025 重磅论文《Clarify When Necessary》:教语言模型何时该“问一句”再答! 🧩 一、现实问题:大模型“看不懂装懂”有多危险? 我们每天用的 ChatGPT、Claude 等大型语言模型(LL…...

嵌入式鸿蒙openharmony应用开发环境搭建与工程创建实现
各位小伙伴大家好,本周开始分享鸿蒙开发相关的内容,从基础的配置方法到各种功能的实现,探索国产操作系统的奥秘。 第一:观察结果 第二:开源语言 ArkTS是鸿蒙应用开发中使用的TypeScript超集,提供了一套丰富的API来构建应用界面和逻辑。 第三:环境搭建 步骤 1 通过如…...

MDK的编译过程及文件类型全解
本章参考资料:MDK的帮助手册《ARM Development Tools》,点击MDK界面的“help->uVision Help”菜单可打开该文件。 关于ELF文件格式,参考配套资料里的《ELF文件格式》文件。 在本章中讲解了非常多的文件类型,学习时请跟着教程的…...
socc 19 echash论文部分解读
前言:论文还是得吃透才行,不然很多细节有问题 q1 object和data chunck哪一个大 根据论文,一个 data chunk 通常比一个 object 大,因为它是由多个 object 组合而成的 。 论文中提到,cross-coding 会将多个 object 组合…...

Linux Shell编程(八)
目录 Case语句 1--case格式 2--case使用案例:输入不容的数字,给出不同的结果 跳出循环 1--break 案例:执行十次时,跳出当前循环 完整流程 2--continue 案例:跳过2,4 输出 完整流程 Case语句 1--case格式 c…...

AI筑基,新质跃升|英码科技亮相华为广东新质生产力创新峰会,发布大模型一体机新品,助力产业智能化转型
5月15日,以“AI筑基,新质跃升”为主题的华为中国行2025广东新质生产力创新峰会在惠州圆满召开。本次峰会聚焦人工智能、算力基础设施等新ICT技术如何驱动“新质生产力”,共探广东高质量发展新路径。英码科技受邀出席本次峰会,并携…...

手机打电话时由对方DTMF响应切换多级IVR语音菜单(话术脚本与实战)
手机打电话时由对方DTMF响应切换多级IVR语音菜单 (话术脚本与实战) --本地AI电话机器人 上一篇:手机打电话时由对方DTMF响应切换多级IVR语音应答(二) 下一篇:手机打电话时由对方DTMF响应切换多级IVR语音…...

面试题——JDBC|Maven|Spring的IOC思想|DI思想|SpringMVC
目录 一、JDBC 1、jdbc连接数据库的基本步骤(掌握**) 2、Statement和PreparedStatement的区别 (掌握***) 二、Maven 1、maven的作用 2、maven 如何排除依赖 3、maven scope作用域有哪些? 三、Spring的IOC思想 …...

DETR3D- 3D Object Detection from Multi-view Images via 3D-to-2D Queries
MIT CORL 2021 纯视觉BEV方案transformer网络3D检测 paper:[2110.06922] DETR3D: 3D Object Detection from Multi-view Images via 3D-to-2D Queries code:GitHub - WangYueFt/detr3d DNN提图像特征,FPN提多尺度特征 pts_bbox_head Detr3…...

SpringBoot3整合WebSocket
一、WebSocket简介 WebSocket协议是基于TCP的一种新的网络协议。它实现了浏览器与服务器全双工(full-duplex)通信,允许服务器主动向客户端推送数据。 与传统的 HTTP 请求-响应模式不同,WebSocket 在建立连接后,允许服务器和客户端之间进行双向…...

鸿蒙进阶——驱动框架UHDF 机制核心源码解读(一)
文章大纲 引言一、uhdf 概述二、uhdf 的核心参与角色1、drivers/hdf_core/adapter/uhdf2/manager/device_manager.c1.1、drivers/hdf_core/framework/core/manager/src/devmgr_service.c#DevmgrServiceGetInstance通过objectId获取IDevmgrService实例1.2、drivers/hdf_core/fra…...
电子电路:能认为电抗也是在做功吗?
阻抗是什么,我记得在交流电路中,阻抗是电阻、电感和电容的综合作用,用Z表示,单位是欧姆。 那阻抗和做功的关系,可能需要从阻抗的组成来分析。阻抗分为电阻部分和电抗部分,也就是 Z = R + jX,其中R是电阻,X是电抗(包括感抗和容抗)。而做功可能主要和电阻有关,因为电…...