拼搏

拼搏

vs code 开发stm32

admin
vs code 开发stm32-第1张-游戏-拼搏

前言:

此刻兄弟们对“cfg文件怎么创建”可能比较关心,看官们都需要学习一些“cfg文件怎么创建”的相关知识。那么小编在网络上搜集了一些对于“cfg文件怎么创建””的相关资讯,希望同学们能喜欢,大家一起来学习一下吧!
环境搭建

作者在使用官方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日志,同时各个寄存器的值都可以看到,读者可自行探索其他功能。

标签 cfg文件怎么创建