VSCode实现STM32开发

article/2025/8/26 1:46:32

VSCode简洁美观、功能强大、插件丰富。多用于桌面开发,或许你不知道vscode还可以用来开发嵌入式。下面就来详细介绍下实现过程

依赖的工具

  1. STM32CUBEMX, ST官方的初始化代码生成工具
  2. Visual Studio Code, 个人认为目前最优秀的跨平台代码编辑器
  3. MingGW, windows版gcc,主要使用其make命令
  4. GNU Arm Embedded Toolchain, 交叉编译工具链
  5. openocd, 烧录工具

安装注意事项

mingw下载安装:

Downloads - Mingw-w64GCC for Windows 64 & 32 bitshttps://www.mingw-w64.org/downloads/#mingw-builds进入后选择“Mingw-builds”,点进去下载就行
 

另一种选择是下载集成mingw的codeblocks,安装包里集成了mingw

Code::Blocks - Code::Blockshttp://www.codeblocks.org/

 GNU Arm Embedded Toolchain的下载安装

 下载链接:

GNU Toolchain | GNU Arm Embedded Toolchain Downloads – Arm Developerhttps://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-rm/downloads现在最新的版本为10.3版:

下载这个安装包安装即可

openocd的下载与配置

下载链接:

Download OpenOCD for Windowshttps://gnutoolchains.com/arm-eabi/openocd/只有压缩包版本,下载完后解压,放入已知目录即可。比如C:\Program Files\

以上软件,安装完成后,需要将其bin目录添加要path环境变量

比如我的:

 检验是否配置正确:

按住shift右击桌面空白处,打开powershell 。 输入以下命令检测安装配置的正确性:

make --version
arm-none-eabi-gcc --version
openocd --version

如果正常,都能得到版本信息:

 如果提示找不到make, 可能原因是名称不对,原来是因为安装完后默认加了mingw32的前缀,进入mingw的bin目录,直接把mingw32-make.exe复制一份,然后重命名为make.exe就OK了

 到此,准备工作算是完成了。

vs code的配置

插件安装 安装c/c++ Extension Pack这个插件就行了

这个扩展包比较全。需要的都包括了。

另外,强烈推荐one dark pro 这个主题插件


 牛刀小试

一 使用stm32cubemx生成初始代码

  1. 时钟和系统配置


    下图中必须选择Serial Wire,否则有奇怪的结果

  2. 外设配置,这里使能串口1, 参数(115200, 8, N , 1)

  3.  项目设置

    Toolchain/IDE这一栏,我们不选任何IDE,只选makefile

  4. 代码生成选项,我习惯只copy需要的库,且成对(.c/.h)生成

  5. 配置完成后,点击右上角的生成按钮,生成工程

二 用vscode开发

用vscode打开项目文件夹
 

首先看看makefile文件
 

 源文件和头文件

随便打开一个.c文件,发现有很多未“定义标识符”错误提示,虽然不影响编译,但是看着不爽

这是因为vscode 不知道去哪里索引。

下面来解决这个问题 按下ctrl+shift+p快捷键,输入 c/c++自动弹出

 

 编辑c/c++这个插件的配置文件, 根据makefile配置includePath, 左边是.json文件,右边是makefile文件:

 是一一对应的,browse 栏下的path 也配置下 编译器路径"compilerPath"要配置正确。保存后再看刚才打开的源文件,错误提示全没了

 打开终端输入make就能编译

成功生成bin和hex文件。

编译时,输出的信息太乱(因为命令很长)?可以设置成静默编译,修改makefile,在命令的前面加入@,同时echo当前编译的文件。(😂对makefile语法不是很懂的可以补一下相关教程)

$(BUILD_DIR)/%.o: %.c Makefile | $(BUILD_DIR)@echo "build $<"@$(CC) -c $(CFLAGS) -Wa,-a,-ad,-alms=$(BUILD_DIR)/$(notdir $(<:.c=.lst)) $< -o $@$(BUILD_DIR)/%.o: %.s Makefile | $(BUILD_DIR)@echo "build $<"@$(AS) -c $(CFLAGS) $< -o $@$(BUILD_DIR)/$(TARGET).elf: $(OBJECTS) Makefile@echo "generate elf file"@$(CC) $(OBJECTS) $(LDFLAGS) -o $@$(SZ) $@

 再运行make试试:

编译输出简洁多了,完美。

三 用openocd烧写代码

 把printf映射到串口1

修改usart.h文件

/* USER CODE BEGIN Includes */
#include <stdio.h>
/* USER CODE END Includes */

usart.c添加如下代码

/* USER CODE BEGIN 1 */
int _write(int file, char *ptr, int len)
{HAL_UART_Transmit(&huart1, (uint8_t *)ptr, len, HAL_MAX_DELAY);return len;
}
/* USER CODE END 1 */

main.c:

  /* Infinite loop *//* USER CODE BEGIN WHILE */while (1){HAL_Delay(1000);printf("hello world\n");/* USER CODE END WHILE *//* USER CODE BEGIN 3 */}/* USER CODE END 3 */

加在USER CODE BEGIN和USER CODE END之间的代码,cubemx下次生成时不会删除

工程中添加openocd的配置文件,加如下内容

source [find interface/stlink-v2.cfg]
source [find target/stm32f1x.cfg]

修改makefile:

#######################################
# clean up
#######################################
clean:del /q $(BUILD_DIR)#######################################
# flash
#######################################
load: allopenocd -f ./openocd.cfg -c init -c halt -c "program $(BUILD_DIR)/$(TARGET).hex verify reset exit"
reset:openocd -f ./openocd.cfg -c init -c halt -c reset -c shutdown
erase:openocd -f ./openocd.cfg -c init -c halt -c "flash erase_sector 0 0 last" -c shutdown

 注意,命令中的 ./openocd.cfg和上一步中的文件名保持一致。

正常情况,终端输入make load就能烧写了

烧写成功。连上串口助手看到打印结果正确,一秒一次,正确输出"hello world", 说明printf重定向也是对的,Great!


http://chatgpt.dhexx.cn/article/3lZm05K3.shtml

相关文章

STM32(一)STM32简介

大家好&#xff0c;今天我跟大家分享一下学习STM32的一些收获&#xff0c;希望对初学STM32的同学有所启示。当然&#xff0c;本人也是一名初学者&#xff0c;如果有谈论不妥之处&#xff0c;还望您能够批评指正&#xff0c;不吝赐教&#xff0c;本人将非常感激。如果有什么问题…

stm32 开发 简单介绍+工程创建

一&#xff0c;认知 1.嵌入式概念 国内定义&#xff1a;以应用为中心&#xff0c;以计算机技术&#xff08;冯诺依曼&#xff09;为基础&#xff0c;软硬件可裁剪&#xff0c;适用于对产品的性能、成本、可靠性有严格要求的系统被称为嵌入式系统。 2.8051和STM32 8051属于入…

stm32开发层次介绍(转载)

自STM32标准库出道以来&#xff0c;备受广大工程师和公司的喜爱&#xff0c;但是&#xff0c;从2013年开始&#xff0c;ST逐渐停止了对标准外设库的更新和维护。目前&#xff0c;ST全力推崇HAL库&#xff0c;STM32Cube就是与HAL库配合使用图形化编程官方IDE。 7.1 STM32库简介…

STM32开发

ST意法半导体生产的32位MCU&#xff08;微控制器&#xff09; 硬件 NB-loT通信扣板&#xff1a;SMA天线&#xff0c;NB86-G通信模块&#xff0c;STM32F0主控芯片&#xff0c;外部晶振 一键还原底板&#xff1a;供电电路&#xff0c;LED指示灯&#xff0c;电源开关&#xff0c;五…

在 keil 建立基于STM32开发的工程模板--详细步骤

手把手教你在keil建立STM32的工程模板 1 先说几句1.1 什么是STM32&#xff1f;1.2 什么是cortex?1.3 什么是ARM&#xff1f;1.4 什么是意法半导体&#xff1f; 2 硬件平台2.1 STM32103C8T6最小系统板2.2 电源供电2.3 时钟电路2.4 复位电路2.5 调试和下载电路 3 建立工程模板3.…

STM32开发方式及基本介绍

相关推荐STM32新建一个工程 STM32的开发有三种方式 1.寄存器版本 2.库函数版本 3.HAL库版本 一、库函数开发与寄存器开发的关系 很多人都是从学51单片机转而想进一步学习STM32&#xff0c;他们习惯了51单片机的寄存器开发方式&#xff0c;ST官方库摆在面前会不知道从何下手…

基于STM32开发板的循迹小车设计

STM32的简单应用之循迹小车 前言 智能寻迹基于自动引导机器人系统&#xff0c;可以实现小车自动识别路线。智能寻迹小车运用传感器、单片机、电机驱动及自动控制等技术实现&#xff0c;管理时自动寻迹导航。该技术已经应用于无人驾驶机动车、无人工厂、仓库、服务机器人等多种…

STM32应用开发实践教程:初识STM32

1.1.1 什么是 STM32 1&#xff0e;STM32 概述 STM32 微控制器是意法半导体&#xff08;ST Microelectronics&#xff0c;ST&#xff09;有限公司出品的一系列微控制 器&#xff08;Micro Controller Unit&#xff0c;MCU&#xff09;的统称。 意法半导体有限公司于 1987 年 6 月…

STM32开发指导

思考 如果我们要自己开发一个蓝牙温湿度计,硬件最小系统和外设都有什么?软件逻辑是什么? 需求分析 ● 采集类传感器使用火焰传感器、温湿度传感器、光照传感器中任意一种。 ● 黄色LED模拟智能灯,可以采集到灯状态并可远程控制;五向按键作为灯控开关(家居本地控制)。…

《嵌入式-STM32开发指南》第一部分 入门篇 -第1章 学嵌入式从STM32开始

1.1 STM32简介 ARM公司简介 ARM是Advanced RISC Machines的缩写,它是一家微处理器行业的知名企业,该企业设计了大量高性能、廉价、耗能低的RISC (精简指令集)处理器。公司的特点是只设计芯片,而不生产。它将技术授权给世界上许多著名的半导体、软件和OEM厂商,并提供服务…

STM32的四种开发方式

STM32的四种开发方式 首先看下ST官方给出的四种开发方式的比较 寄存器开发 寄存器编程对于从51等等芯片过渡过来的小伙伴并不陌生&#xff0c;不管你是什么库&#xff0c;最终操作的还是寄存器&#xff0c;所以对于标准库、HAL库、LL库都是在寄存器上的编程&#xff0c;所以可…

使用STM32固件库开发GD32 汇总

文章目录 GD32与STM32异同1. 相同点2. 外围硬件区别3. 内部结构差别4. 功耗区别(以128k以下容量的作为参考)5. 内部FLASH 区别 使用STM32库开发时钟配置区别1. 晶振起振区别描述解决方法 2. 部分客户使用有源晶振出现问题&#xff0c;在 GD32F103 小容量产品&#xff0c;发现会…

STM32开发必备知识篇:STM32的运行机制

时间飞逝&#xff0c;转眼间已经硕士毕业工作第四年了&#xff0c;嵌入式研发成长道路上曲折坎坷&#xff0c;所以这也是我今年撰写博客的初心&#xff0c;即分享技术积累和研发经验&#xff0c;目前主要分为STM32和FPGA两个专辑&#xff0c;都包括开发必备知识篇和实战项目例程…

如何评判STM32各个MCU的性能?

很多人说STM32性能太弱&#xff0c;那你了解这个性能是如何得出来的吗&#xff1f; 1写在前面 我们经常听见某手机发布会&#xff0c;安兔兔跑分多少多少&#xff0c;其实这个跑分就是体现手机性能的一个指标。 我们使用STM32开发产品&#xff0c;选择MCU时&#xff0c;一般会综…

STM32各系列MCU性能对比及测试说明

置顶/星标公众号&#xff0c;不错过每一条消息&#xff01; 很多人说STM32性能太弱&#xff0c;那你了解这个性能是如何得出来的吗&#xff1f; 1写在前面 我们经常听见某手机发布会&#xff0c;安兔兔跑分多少多少&#xff0c;其实这个跑分就是体现手机性能的一个指标。 我们使…

win xp虚拟机

做嵌入式&#xff0c;用的ADS版本太老了&#xff0c;在xp系统上更方便&#xff0c;所以昨天装了一个。 其实我是一个搬运工&#xff0c;主要参考了另一个人的步骤:点击打开链接 只是第一次让输序列号的时候跳过去了。 要镜像可以留邮箱&#xff0c;好像不能直接放在这里&…

VMware虚拟机装windows xp系统

一.准备安装所需要的软件&#xff1a; 1.VMware虚拟机的下载。 首先下载&#xff1a;VMware Workstation(虚拟机) V6.0.2 Build 59824 汉化版 2.XP的系统软件。 二.在VMware虚拟机为创建新的虚拟机 1.打开虚拟机&#xff0c;选择新建虚拟机&#xff1a; 2.下一步&#xff1a;…

Windows xp,Windows2003虚拟机部署(各2台)

文章目录 ISO镜像下载winxp部署a.安装winxp虚拟机b.优化虚拟机c.做快照 Windows 2003a.安装win2003b.优化c.快照 克隆虚拟机(以win2003为例&#xff09; ISO镜像下载 ISO镜像下载链接 例&#xff1a;下载win10的操作系统 点击操作系统&#xff0c;选择要下载的镜像&#xff0…

VirtualBox 7.0.10 (macOS, Linux, Windows) - 开源跨平台虚拟化软件

VirtualBox 7.0.10 (macOS, Linux, Windows) - 开源跨平台虚拟化软件 Oracle VM VirtualBox 7 请访问原文链接&#xff1a;https://sysin.org/blog/virtualbox-7/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&#xff1a;sysin.org 2022 年 10 月…

虚拟机VMware安装XP系统错误解决办法

虚拟机给我的编程工作确实带了很多方便&#xff0c;但是虚拟机的一个最大挑战是硬件赶不上&#xff0c;速度太慢了。最近一直在致力于虚拟机上Win7专业版平台上SQL Server 2005Visual Studio 2012系统开发&#xff0c;最初还可以&#xff0c;但是越到后面速度越慢。最后决定重新…