在ubuntu上使用vscode+gcc-arm-none-eabi+openocd工具开发STM32

本文详细讲述了作者在使用VSCode开发STM32时遇到的困难,包括工具安装、调试配置和常见问题解决方案,重点介绍了如何安装VSCode、openocd等工具,并提供了一份调试配置文件示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

写在前面
  老大上周让我用vscode开发STM32,我爽快的答应了,心想大学四年装了这么多环境了这不简简单单,更何况vscode这两年还用过,然而现实总是令人不快的——我竟然花了差不多两周时间在这上面,并且不知道花费了多少流量😭😭😭。这玩意就给了所需要的主要工具,形象一点就如标题,问其他人他们也搞不定。因此,大家有空还是多涉猎一些开发环境,这玩意以前有兄弟跟我提过,但是我觉得没意义,所以没用过😅😅😅。

所需工具

本文基于ubuntu书写记录

安装调试

步骤一: vscode安装可采取现在官网想下载.deb文件,后续可双击直接安装,或者找到ubuntu中软件管理工具也可安装,也可使用命令·sudo dpkg -i 文件名.deb进行安装。

步骤二:至于后续几个工具可直接使用apt命令完成安装sudo apt install gcc-multilib g++-multilib gdb-multiarch gcc-arm-none-eabi openocd,使用命令安装后,这些工具的可执行文件会自动生成在/usr/bin目录中。
(说明:后续使用openocd时会用到stlink适配文件stlink-v2.cfstm32适配文件stm32f1x.cfg,如果是使用的apt命令安装,那就就会存在于/usr/share/openocd/scripts目录下。或者,如果大家想直接查找也可使用whereis + 查找内容find命令。)

步骤三:在vscode中下载插件:cortex-debug + Cortex-Debug: Device Support Pack - STM32F1+ venu's cortex-debug + rtos views + MemoryView + peripheral viewer 这写插件。(我搭环境的时候文档上就只写了前两个😢,不过有些是会自动下载的)上述这些插件也就差不多跟cortex-debug全都相关的插件了(如下图),哈哈哈。(说明:插件 Cortex-Debug: Device Support Pack - STM32F1是一个支持包,自己用的哪一款就下载哪一版本即可。不过,小编发现下载插件 venu's cortex-debug 后不安装这玩意似乎也行🤣。)在这里插入图片描述步骤四:在命令行中,使用命令 sudo apt-get install make cmake 下载工程管理工具。这里建议搭建先去学习一下makefilecmake,不管自己要不要写这部分代码,起码要能够看懂吧。

步骤五:搭建STM32项目,验证自己所搭环境是否可用。这里可使用cubemx生成待makefile管理的工程,创建时选择makefile管理文件即可。 在这里插入图片描述
或者大家也可参考这个项目gcc+vscode开发stm32,在这个项目中也有成功移植FreeRTOSRT-Thread的工程供大家参考。

完成上述步骤后大家还需要配置gdb调试配置文件launch.json,下面这个配置大家可参考:

{
    // 使用 IntelliSense 了解相关属性。 
    // 悬停以查看现有属性的描述。
    // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "cwd": "${workspaceRoot}",
            "executable": "./build/FreeRtos_Hao.elf",
            "name": "myDebug",
            "request": "launch",
            "type": "cortex-debug",
            "interface": "swd",
            "runToEntryPoint": "main",
            "servertype": "openocd",
            "configFiles": [
            	// 下面这两个根据自己的openocd目录更改
                "/usr/share/openocd/scripts/interface/stlink-v2.cfg",
                "/usr/share/openocd/scripts/target/stm32f1x.cfg"
            ],
            // 这个就是交叉编译工具链所在的目录
            "armToolchainPath": "/usr/bin",
            // 所用gdb目录
            "gdbPath": "/usr/bin/gdb-multiarch",
            "showDevDebugOutput": "raw"
        },
    ]
}

如果大家是使用github上的工程验证大家还需要更改makefile文件一处,如下:

OPENOCD_DOWN_PATH = /usr/share/openocd/scripts/interface/stlink-v2.cfg
OPENOCD_CHIP_PATH = /usr/share/openocd/scripts/target/stm32f1x.cfg

最后,借用其他兄弟的图画来表示这个调试过程就如下图:
在这里插入图片描述

搭建过程中遇到的问题

问题:
   在移植过程中,小编遇到了报错 Failed to launch OpenOCD GDB Server: Timeout.(就是这个问题困扰了我近两周)

解决方案:
   首先,检查在命令行中使用openocd是否可以连接开发板,这里可使用命令:

openocd -f   xxx/openocd/scripts/stlink-v2.cfg -f  xxx/openocd/scripts/interface/target/stm32f1.cfg

   其次,使用gdb连接openocd调试开发板。如果使用gdb-multiarch,那么命令为:
gdb-multiarch + xxx.elf,进入gdb后就可使用target remote localhost:3333连接openocd服务。

   最后,如果命令行可成功连接,那么就是vscode配置问题(小编就是这样,小编是缺少插件)。如果链接不成功,那么可能是版本问题,建议大家换版本重新尝试(ubuntu20.04安装的openocd是0.10版本的,而目前最新是0.12)。



如果大家碰到问题,可去官网查看有没有相关解析;或者 更换软件版本,可能是软件本班不兼容导致的;大家也可以去github上看看有没有相关issue

如果大家在windows上尝试,大家将对应工具换成win版本与MinGW即可,不过这种方式小编没尝试过,网上普遍在windows上都使用arm-none-eabi-gdb调试😅。

FreeRTOS 是一个广泛应用于嵌入式系统的实时操作系统(RTOS),以其轻量级、可移植性和高效的资源管理著称。以下是关于 FreeRTOS 的使用指南、核心特性和下载信息的详细说明: ### FreeRTOS 的使用指南 《FreeRTOS 实时内核使用指南(中文版)》是一份详尽的开发者资源,涵盖了从基础概念到高级应用的全面内容。该指南从实时内核的基本原理入手,逐步深入讲解任务管理、中断处理、通信与同步机制、内存管理以及性能优化策略。无论开发者是初学者还是具备一定经验,都能通过该指南快速掌握 FreeRTOS 的使用方法,并将其高效地应用于项目开发中。这份指南不仅包括环境搭建和内核配置的完整指导,还提供了实际案例帮助开发者理解如何在具体场景中使用 FreeRTOS [^1]。 ### FreeRTOS 的核心特性 FreeRTOS 提供了多种核心特性,使其成为嵌入式系统开发中的首选操作系统: - **任务管理**:支持多任务调度,开发者可以定义任务优先级并进行动态调度,确保关键任务得到及时执行。 - **时间管理**:提供精确的延时和定时功能,支持相对延时和绝对延时。 - **同步与通信机制**:提供信号量、互斥量、队列和事件组等机制,确保任务之间的安全通信与同步。 - **内存管理**:支持动态和静态内存分配,开发者可以根据系统需求选择合适的内存管理策略。 - **可移植性与可裁剪性**:FreeRTOS 可以轻松移植到多种处理器架构,并且其可裁剪性允许开发者根据具体需求去除不必要的功能,以节省系统资源 [^3]。 ### FreeRTOS 的下载与获取 FreeRTOS 作为一个开源项目,其官方资源和文档可以从多个渠道获取。例如,《FreeRTOS 实时内核使用指南(中文版)》可以在 GitCode 上找到并下载,项目地址为 [https://gitcode.com/Open-source-documentation-tutorial/932f9](https://gitcode.com/Open-source-documentation-tutorial/932f9) [^1]。此外,开发者还可以访问 FreeRTOS 官方网站([https://www.freertos.org](https://www.freertos.org))获取最新版本的源代码和相关文档。Amazon 也提供了对 FreeRTOS 的长期维护和支持,确保其在物联网和嵌入式设备中的稳定运行 [^2]。 ### 示例代码:创建一个简单的任务 以下是一个使用 FreeRTOS 创建简单任务的代码示例: ```c #include "FreeRTOS.h" #include "task.h" #include <stdio.h> // 任务函数 void vTaskFunction(void *pvParameters) { for (;;) { printf("Hello from a FreeRTOS task!\n"); vTaskDelay(pdMS_TO_TICKS(1000)); // 延迟1秒 } } int main(void) { // 创建任务 xTaskCreate(vTaskFunction, "Task", configMINIMAL_STACK_SIZE, NULL, 1, NULL); // 启动调度器 vTaskStartScheduler(); // 如果到达这里,说明内存不足无法启动调度器 for (;;) ; } ``` 上述代码展示了如何使用 FreeRTOS API 创建一个简单的任务,并让其每隔一秒打印一条消息。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值