手把手教你配置 STM32CubeIDE for VSCode 下基于 OpenOCD 的调试配置

如果你在使用 STM32CubeIDE for VSCode 插件,可能会发现它默认的烧录工具只完美支持正版 STLink。市面上几十块钱的仿制 STLink 经常出现连接不稳定、烧录失败、甚至无法识别的“玄学”问题。 为了彻底解决这个问题,我们推荐使用 DAPLink 调试器配合 OpenOCD。这不仅能解决烧录问题,还能让你拥有一套适用于几乎所有 ARM 芯片(不仅限于 STM32)的通用开发环境。本教程将以 STM32CubeIDE for VSCode 生成的项目为基础,教你如何“外挂” OpenOCD 来接管烧录和调试工作。 本教程虽然以 STM32CubeIDE for VSCode 为例,但同样适用于任何基于 OpenOCD 的工具链配置,只需要稍作修改。 Warning 本教程涉及 Scoop 的安装。安装 Scoop 前需要检查自己的用户文件夹是否含有中文,如果有中文会导致安装后无法正常使用,且卸载复杂的后果。可以修改默认用户文件夹或重装系统,建议重装系统。 ...

November 22, 2025 · molqzone

Linux 环境下的 CH32 + LibXR 开发环境搭建

笔者最近在研究国产单片机。大家对国产单片机的固有印象可能还停留在一比一复刻 STM32,但是随着国产单片机产业的蓬勃发展,各个国产单片机也在自己的产品中做出了自己的特色,其中沁恒家的 RISC-V 系列单片机我最近比较感兴趣(因为沁恒真的敢送)。 说到沁恒,相信大家对他们家 CH340 这款经典的 USB 转串口芯片并不陌生。而在单片机领域,沁恒同样展现出强大的技术实力,尤其在USB功能方面独树一帜:既有经济实用、集成 USB2.0 接口的 V203 系列,也有搭载高速 480MHz USB PHY 的 V307 系列,为嵌入式开发者提供了丰富的选择。 LibXR 是一个功能强大的跨平台 C++ 开发框架,集成了丰富的外设驱动、数据结构、通信中间件、操作系统封装和数学工具库。它为 CH32 系列单片机提供了一个兼容层,不仅对 CH32 标准库进行了高层次的抽象封装,还修复了原库中的一些已知问题,大大提升了开发效率和代码质量。 本文将详细介绍如何在Linux环境下搭建基于 CH32 单片机和 LibXR 库的完整开发环境,帮助开发者快速上手这一优秀的开发组合。 环境准备 1. 获取项目模板 LibXR 官方提供了现成的项目模板,支持 CH32V307 和 CH32V203 两种型号,已预配置好构建脚本和调试配置,无需手动设置。 # 克隆对应芯片的模板项目 git clone https://github.com/xrobot-org/CH32V307_LibXR_Template.git # 或者选择 CH32V203 模板 # git clone https://github.com/xrobot-org/CH32V203_LibXR_Template.git # 初始化 LibXR 子模块 git submodule add https://github.com/Jiu-xiao/libxr 2. 安装调试工具链 CH32 芯片需要专用的调试工具。从MounRiver 官网下载 Linux 版工具链: ...

November 16, 2025 · molqzone

STM32H7 HAL 库开发中的 DMA 传输失败问题的解决方案

引言 最近我尝试在 STM32H723ZGT6 上使用 STM32CubeMX + CMake + GCC 方案配置 ADC1 的 DMA Circular Mode,发现在我的 STM32CubeMX 的参数配置正确的情况下仍然配置不成功。现象是可以进入 ADC1 对应的 DMA1_Stream0_IRQHandler 中断函数,但是无法进入 HAL_ADC_ConvCpltCallback。经过排查发现系统稳定地在 DMA 中断中报告传输错误(TEIF - Transfer Error Interrupt Flag)。下面是我的错误验证代码: void DMA1_Stream0_IRQHandler(void) { /* USER CODE BEGIN DMA1_Stream0_IRQn 0 */ if (__HAL_DMA_GET_FLAG(&hdma_adc1, DMA_FLAG_TEIF0_4)) { log_e("DMA1 Stream0 transfer error occurred"); // 此处报错 } /* USER CODE END DMA1_Stream0_IRQn 0 */ HAL_DMA_IRQHandler(&hdma_adc1); /* USER CODE BEGIN DMA1_Stream0_IRQn 1 */ /* USER CODE END DMA1_Stream0_IRQn 1 */ } 常规的调试手段,如排查 MPU 配置、管理 D-Cache 一致性,乃至验证外设时钟与模拟电源,均无法解决问题。从这个现象可以看出,这个坑并非来自 ADC 或 DMA 外设本身的功能缺陷,而是两者在特定工作模式下,触发了系统级深层次的硬件冲突。幸运的是,最终我在社区的帮助下解决了这一问题。 ...

July 29, 2025 · molqzone

手把手教你移植 CMSIS-DSP 到 STM32CubeMX 生成的 CMake 项目

在使用 STM32 系列单片机进行信号处理的过程中,我们往往会选择 ARM 提供的 CMSIS-DSP 库。CMSIS-DSP库涵盖了嵌入式信号处理的大部分常用算法函数,同时针对 Cortex-M 核心做了手工汇编优化,还提供了统一的接口。目前使用 CMSIS-DSP 库有以下几种方案: Keil 项目 + 封装好的 CMSIS-DSP 库 CMSIS-Pack STM32CubeMX CMake 项目 + Software Components STM32CubeMX CMake 项目 + CMSIS-DSP 源码 其中后两种方案更现代化,可以适配 STM32 for Visual Studio Code、CLion 等现代开发环境。而现在(2025 年 7 月)通过 Software Components 安装的 DSP Library 版本还停留在 v1.4.0,这是 2013 年 1 月发布的 CMSIS-DSP 版本,距今已超过十年。这十年里 ARM 为 CMSIS-DSP 追加了更多Cortex-M 架构的支持,新增了窗函数等功能模块。而第三种方案直接从 GitHub 上抓取源码,版本最新,功能最全面。但是需要一些 CMake 配置,没有第二种方案直接快捷。而这篇文章的使命就是带你将 GitHub 上的 CMSIS-DSP 源码加入到 STM32CubeMX 生成的 CMake 项目中。(下图是第二种方法通过 Software Components 配置 CMSIS-DSP) ...

July 20, 2025 · molqzone