百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

vs code 开发stm32 vscode开发stm32

nanshan 2024-12-22 19:55 15 浏览 0 评论

环境搭建

作者在使用官方IDE开发了一段时间后,发现了很多的不足之处,遂转战VSCode + 开源 arm 工具链 + OpenOCD开发STM32的环境,该方案可跨平台使用,希望对读者有所帮助。

需安装的软件如下:

1、STM32CubeMX:通过官方该工具可快速生成带makefile的HAL库工程。下载网址如下,需要登陆方可下载。

https://www.st.com/en/development-tools/stm32cubemx.html书签:STM32CubeMX - STMicroelectronics

2、vs code:编辑器,链接如下

https://code.visualstudio.com/书签:Visual Studio Code - Code Editing. Redefined

3、GNU Arm Embedded Toolchain:arm用的GNU工具链,包括编译器(gcc),调试器(gdb),链接器(ld)和其它工具。需配置环境变量。

https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-rm/downloads书签:GNU Toolchain | GNU Arm Embedded Toolchain Downloads – Arm Developer

4、 OpenOCD ( windows版 ):一个开源的片上调试器。仅需下载解压,配置环境变量。

https://gnutoolchains.com/arm-eabi/openocd/书签:Download OpenOCD for Windows

5、Zadig:用来装jlink 的USB驱动的,虽然Jlink插上就能装驱动,但是直接装的OpenOCD识别不到。

https://zadig.akeo.ie/书签:Zadig - USB driver installation made easy

将jlink接入电脑,打开软件,选择Options---List All Devices,下拉菜单中选择J-link,然后在右侧选择WinUSB,点击Reinstall Driver。

6、Git:用于版本管理,需要注意的是我没有用mingw,因为国内网络环境有安装失败几率,其实GIT是基于mingw的,但是由于其轻量级的原因不支持make,需要添加make,wget等工具。

https://git-scm.com/书签:Git

安装完成GIT后,需要进行以下四步操作:

      • https://sourceforge.net/projects/ezwinports/files/下载make-x.x-x-without-guile-w32-bin.zip文件。
      • 解压文件。
      • 将解压出来的文件全部拷贝到: D:\Program Files\Git\mingw64\ ,如果跳出来需要替换的文件要选择不替换。
      • 在git bash窗口下执行make,不提示command not found即为安装成功。

编译

利用STM32CubeMX生成makefile类型的工程。

安装vs code基本插件

Chinese (Simplified)C/C++C/C++ Snippets、ARM、Cortex-Debug

配置c_cpp_properties.json。

点击黄色的小灯泡,

{
"configurations": [
{
"name": "Win32",
"includePath": [
"D:/Program Files (x86)/GNU Arm Embedded Toolchain/10 2021.07/lib/gcc/arm-none-eabi/10.3.1/include",
"${workspaceFolder}/Core/Inc",
"${workspaceFolder}/Drivers/STM32F1xx_HAL_Driver/Inc",
"${workspaceFolder}/Drivers/STM32F1xx_HAL_Driver/Inc/Legacy",
"${workspaceFolder}/Drivers/CMSIS/Include",
"${workspaceFolder}/Drivers/CMSIS/Device/ST/STM32F1xx/Include"
],
"defines": [
"USE_HAL_DRIVER",
"STM32F103xB"
],
"compilerPath": "D:/Program Files (x86)/GNU Arm Embedded Toolchain/10 2021.07/bin/arm-none-eabi-gcc.exe",
"intelliSenseMode": "gcc-x64",
"browse": {
"limitSymbolsToIncludedHeaders": true,
"databaseFilename": "",
"path": [
"${workspaceFolder}"
]
}
}
],
"version": 4
}

JavaScript

配置tasks.json。

在.vscode目录下创建tasks.json文件。

{
"version": "2.0.0",
"tasks": [
{
"label": "build",
"type": "shell",
"command": "make",
"args": [
"-j4"
]
},
{
"label": "clean",
"type": "shell",
"command": "make",
"args": [
"clean"
]
}
]
}

JavaScript

调试

openocd配置

在项目文件夹下新建openocd.cfg文件。openocd启动时,会自动在当前目录下寻找名为openocd.cfg的文件作为配置文件。

下载svd文件

VS Code可以通过它来知道外设寄存器的地址分布,从而把寄存器内容展示到窗口中。下载好的STM32F103.svd文件放在项目文件夹根目录即可。

https://github.com/posborne/cmsis-svd书签:https://github.com/posborne/cmsis-svd

配置VS Code的调试功能

openocd在.vscode文件夹中新建一个launch.json.

{
// 使用 IntelliSense 了解相关属性。
// 悬停以查看现有属性的描述。
// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [

{
"name": "Cortex Debug",
"cwd": "${workspaceRoot}",
"executable": "${workspaceRoot}/build/${workspaceFolderBasename}.elf",
"request": "launch",
"type": "cortex-debug",

"device":"STM32F103C8", //使用J-link GDB Server时必须;其他GBD Server时可选(有可能帮助自动选择SVD文件)。支持的设备见 https://www.segger.com/downloads/supported-devices.php
"svdFile": "./STM32F103xx.svd", //svd文件,有这个文件才能查看寄存器的值,每个单片机都不同。可以在以下地址找到 https://github.com/posborne/cmsis-svd
"servertype": "openocd", //使用的GDB Server
"configFiles": [
"${workspaceRoot}/openocd.cfg"
],
"preLaunchTask": "build"
}
]
}

JavaScript

Jlink GDB Server配置

安装SEGGER Jlink驱动全家桶。

https://www.segger.com/downloads/jlink/书签:SEGGER - The Embedded Experts - Downloads - J-Link / J-Trace

在前面用Zadig修改了jlink驱动的,建议先在设备管理器里面卸载,然后安装全家桶。安装完成后记着添加环境变量。

给代码中添加源文件和头文件

C:\Program Files (x86)\SEGGER\JLink\Samples\RTT路径中,有一个Jlink RTT例程源码压缩包解压。然后把压缩包里的整个RTT文件夹复制到你的STM32工程中:

添加log.h文件。


#include
#define _LOH_H_
#ifndef _LOG_H_"SEGGER_RTT.h"
#define
LOG_DEBUG 1
#
if LOG_DEBUG
#define
LOG_PROTO(type,color,format,...)
\SEGGER_RTT_printf(0," %s%s"format"\r\n%s",
color \,
type \,
##__VA_ARGS__ \,
\RTT_CTRL_RESET)

/* 清屏*/

#define LOG_CLEAR() SEGGER_RTT_WriteString(0, " "RTT_CTRL_CLEAR)

/* 无颜色日志输出 */

#define LOG(format,...) LOG_PROTO("","",format,##__VA_ARGS__)

/* 有颜色格式日志输出 */

#define LOGI(format,...) LOG_PROTO("I: ", RTT_CTRL_TEXT_BRIGHT_GREEN , format, ##__VA_ARGS__)
#define LOGW(format,...) LOG_PROTO("W: ", RTT_CTRL_TEXT_BRIGHT_YELLOW, format, ##__VA_ARGS__)
#define LOGE(format,...) LOG_PROTO("E: ", RTT_CTRL_TEXT_BRIGHT_RED , format, ##__VA_ARGS__)
#
else
#define LOG_CLEAR()
#define LOG
#define LOGI
#define LOGW
#define LOGE
#endif
#endif
// !_LOG_H_

JavaScript

修改main.c、修改Makefile和json配置文件

修改main.c

/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */

#include "log.h"
/* USER CODE END Includes */

JavaScript

while (1)
{
/* USER CODE END WHILE */

/* USER CODE BEGIN 3 */
cnt++;
LOGE("this is an error !");
LOGI("this is an iofo with params ! CNT:%d",cnt);
LOGW("this is an warning !");
HAL_Delay(500);
}

JavaScript

修改Makefile

修改c_cpp_properties.json

修改launch.json

修改Tasks.json

按F5进入调试模式,然后运行。终端中出现了带颜色的log日志,同时各个寄存器的值都可以看到,读者可自行探索其他功能。

相关推荐

人人视频崩了怎么回事 人人视频下架了吗为什么刷不出来了

[海峡网]人人视频挂了吗下架了吗人人视频崩了怎么回事刷不出来了?人人视频发生了什么?怎么都看不成了,暂时还是永久?本来还以为是手机的问题,原来是客户端崩了难怪一直显示服务器异常!追着的美剧突然都下架...

502 bad gateway怎么解决?(502 bad gatewaynginxundefined)

相信许多小伙伴都遇到打开的网页提示502badgateway,502badgateway是提示用户该网址的网关错误,Web服务器作为网关或代理服务器时收到无效的响应,不管怎么刷新怎么重新输入地...

2岁男童眼睛被滴入强酸药水,医生亲身“试”药吓坏了……

平日里,小孩子爱玩爱闹是常事儿,但是大人的注意力如果时不时的掉线可就麻烦了。这一天,杭师大附院眼科陈舒主任医师像往常一样在接诊病人,然而一个孩子的哭闹声引起了她的注意,一群人神情焦灼,簇拥着一个孩子急...

3岁男童误将502胶当滴眼液,幸好妈妈及时处理,医生也为她点赞

小孩子由于心智还不够成熟,因此往往会做出一些危险的事情,甚至对自己造成伤害,这就需要家长的监督和保护。巧也不巧,日常生活中能够对孩子造成威胁的东西实在是太多了,堪称数不胜数,水笔、筷子、桌角,甚至刚拖...

5岁娃把502胶当眼药水滴眼中,爸爸的做法很机智,医生都称赞

文|哑铃妈妈家里有小孩子的一定要注意,在我们的家里存在很多的安全隐患,有的时候连家长都想不到的东西,竟然对孩子带来了伤害。5岁娃把502胶当眼药水滴眼中,爸爸的做法很机智,医生都点赞女孩乐乐长得可爱,...

宝宝误食502胶水,连忙送医救治,医生却夸宝妈做得好

有了孩子之后,妈妈都会变得神经敏感,生怕自己没有把孩子照顾好,但是毕竟一个人的经历是有限的,再加上孩子要是会走路,会说话之后对宝妈来说更是一种挑战,危及可能无时无刻不存在,这不,因为宝妈一转身的功夫,...

记一次Netty「直接内存溢出」导致线上网关项目宕机排查过程

作为一名Java开发者,我们都知道Java进程是运行在Java虚拟机上的,而Java进程要想正常运行则需要向计算机申请内存,其中主要为Java对象实例所占用的堆(heap)内存(当然还有其他的也会占用...

刚刚,突然崩了!网易云音乐紧急回应

今天下午#网易云音乐崩了#登上微博热搜第一在社交平台上,不少网友反馈,网易云音乐疑似崩溃。网友晒出网页端出现“502BadGateway”的服务器错误,同时网易云音乐的移动应用程序也无法正常使用。...

常见状态码(常见的状态码)

一二三四五原则:(即一:消息系列;二:成功系列;三:重定向系列;四:请求错误系列;五:服务器端错误系列。301状态码是永久移动302是临时移动304如果请求头中带有If-None-Match...

8岁男孩眼睛溅入502胶水,妈妈一番操作结果粘得更紧了

家有小孩的爸妈们肯定会多留个心眼照看虽然生活中已经时刻留意可能造成伤害的物品但有时一不留神幼小的孩子就会做出让人担心的事↓↓↓家住深圳的辰辰(化名)今年8岁了3月31日他在家里做手工时想要用未开封的5...

3岁娃滴502胶水在眼睛疼的尖叫,宝妈急中生智,保住孩子眼睛

但还好宝妈急中生智,连忙将孩子带到水龙头处,用水给孩子冲洗了一下眼睛,还用大量的生理盐水来给孩子清洗眼球,之后又立马将孩子送往医院,最后孩子的眼睛也没有什么大碍,拿了点药就能顺利出院了。而502胶水这...

网易云音乐回应App崩了:故障已陆续修复,补偿7天会员

2024年8月19日下午,多名网友反馈称,网易云音乐服务器疑似出现故障,登录网易云音乐APP后发现,个性化推荐和搜索功能均无法使用,并收到“获取数据失败”的提示。此外,网易云音乐的网页端也显示502错...

又崩了!不少人直接傻眼:太离谱!(台湾人到大陆后傻眼)

造车新势力哪吒汽车再被推向舆论风口。5月4日,话题#曝哪吒汽车APP断网#冲上微博热搜App断网无法使用从5月2日开始,陆续有多位网友反映哪吒汽车App断网,App控车无法使用。哪吒汽车App目前出现...

男子误把502胶水当眼药水!千万别犯这种低级错误!

你敢相信吗?有人竟然误把五零二胶水当成了眼药水滴进眼睛里。这可不是什么玩笑话,而是近日发生在武汉的一起真实事件。一名男子因此导致眼角膜严重受损,不得不紧急就医。据武汉大学附属爱尔眼科医院报道,这名男子...

502入眼危机!这份急救指南请牢记(502进入眼中怎么办)

502入眼,真实案例触目惊心生活中,502胶水是常用的黏合剂,以其强力黏合性备受青睐。但它一旦进入眼睛,后果不堪设想,下面这些真实案例,足以让我们警醒。曾有这样一则新闻,一位4岁女童在家玩耍时...

取消回复欢迎 发表评论: