真.从“零”搞 VSCode+STM32CubeMx+C <2>调试+烧录

目录

前言

准备工作

Daplink连接

调试配置(cortex-debug)

烧录配置

坑点


前言

      昨天有惊无险的构建了一个简单的闪灯程序,今天来挑战下调试+烧录,看看有什么坑。

准备工作

Daplink连接

  • 接线,如下

Daplink         单片机

TCK/CK ----- SWCLK

TMS/IO  ----- SWIO

3.3v        ----- 3.3v

GND       ----- GND

  • 插上电脑,直接会识别(我的是windows10)

调试配置(cortex-debug)

  • 需要提前安装好cortex-debug插件,并添加launch.json配置文件,这里需要注意.cfg要配置成符合自己单片机的,文件在openocd的“openocd\scripts\target”路径下

  • 插件不会帮助你安装openocd需要自己下载,并配置环境变量,配置完之后,务必关闭VSCode,再重新打开
  • 配置完成后,就可以直接点击上图中左上方的运行按钮,程序会自动烧录到单片机中,并可执行断点调试。

烧录配置

  • 如果不需要调试,那直接配如下所述的就可以了

  • 点击开发工具右上方的烧录按钮,即可完成烧录

异常解决

  • 今天相对比较顺利,遇到两个问题,一是VSCode始终读不到配置好的openocd的环境变量,重启多次后可以了;二是调式报错以及无法烧录程序,这个问题比较刁钻,多种报错信息:
Output radix now set to decimal 10, hex a, octal 12.
Input radix now set to decimal 10, hex a, octal 12.
0x0800025e in HAL_MspInit () at ./Core/Src/stm32f1xx_hal_msp.c:77
77	  __HAL_AFIO_REMAP_SWJ_DISABLE();
Program stopped, probably due to a reset and/or halt issued by debugger
[stm32f1x.cpu] halted due to debug-request, current mode: Thread 
xPSR: 0x01000000 pc: 0x0800016c msp: 0x20000660
[stm32f1x.cpu] halted due to breakpoint, current mode: Thread 
xPSR: 0x01000000 pc: 0x08000c34 msp: 0x20005000
Error connecting DP: cannot read IDR

Program
 stopped.
0x00000000 in ?? ()
Error: Error connecting DP: cannot read IDR
Error: [stm32f1x.cpu] Polling failed, trying to reexamine
Error: [stm32f1x.cpu] Examination failed
Error: [stm32f1x.cpu] Examination failed, GDB will be halted. Polling again in 300ms
Error: Error connecting DP: cannot read IDR
Error: Failed to read memory and, additionally, failed to find out where
Error: Error connecting DP: cannot read IDR

解决:

原来是STM32CubeMx生成代码的时候,有一行禁止调试的代码:

注释掉!即可!重新构建。

  • 但我们之前的程序已经烧录,怎么办?考研手速的时候到了!用单片机上的Reset按钮,按住,点烧录,看到成功连接OCD后立刻松开,便可以正常烧录了。
  • 由于这行代码是STM32CubeMx生成的,下次有什么引脚变化,还得用他生成,那么就需要直接一下,让它不要生成,如下:

后记

      又是有惊无险的一通瞎操作,接下来要开始进入此次旅程的核心 → 用Make编译出bin文件,并烧录到单片机中。

### STM32CubeMXVSCode配置及烧录教程 #### 工具准备 为了实现基于STM32CubeMXVSCode的开发环境搭建以及程序烧录,需先完成工具链的准备工作。这包括安装STM32CubeMXVSCode及其插件、GNU Arm Embedded Toolchain编译器套件以及其他必要的依赖项[^1]。 #### 配置流程 以下是具体的配置过程: 1. **初始化项目** 使用STM32CubeMX创建一个新的工程文件并设置目标微控制器型号及相关外设参数。完成后导出适用于GCC编译器的Makefile项目到指定目录下。 2. **安装必要软件** - 安装最新版本的Visual Studio Code编辑器。 - 在VSCode中通过扩展市场添加C/C++ IntelliSense支持插件(由Microsoft提供),用于语法高亮显示等功能;同时还需要安装名为"Cortex-Debug"调试插件来处理ARM Cortex架构下的断点调试操作。 3. **配置工作区** 打开之前从STM32CubeMX导出来的源码所在路径作为新的VSCode workspace加载进来之后调整tasks.json以匹配make命令执行需求,并修改launch.json使得能够连接硬件设备进行在线调试模式启动。 4. **编写构建任务** 编辑`.vscode/tasks.json` 文件定义一个build task用来调用外部make utility完成整个项目的链接组装阶段转换成最终可执行映像文件(.elf): ```json { "version": "2.0.0", "tasks": [ { "label": "Build Project", "type": "shell", "command": "make all", "group": { "kind": "build", "isDefault": true }, "problemMatcher": ["$gcc"] } ] } ``` 5. **设定调试选项** 修改 `.vscode/launch.json` 来适配实际使用的STLink v2 或其他兼容JTAG/SWD接口标准的编程器规格说明文档里提到的相关属性字段值比如 `request`, `type`, `name`, `preLaunchTask`, `miDebuggerPath`, `setupCommands` 等等: ```json { "version": "0.2.0", "configurations": [ { "name": "Cortex Debug", "type": "cortex-debug", "request": "launch", "servertype": "openocd", "executable": "./Output_Directory_Name/Project_Name.elf", "device": "STM32Fxxx", "interface": "swd", "configFiles": [ "board/st_nucleo_f4.cfg" ], "runToMain": true, "postRestartCommands": [ "break main" ] } ] } ``` 6. **上传固件至MCU** 当一切就绪后,在VSCode顶部菜单栏选择对应刚才建立好的configuration名称运行即可自动触发一系列动作直至成功把生成的目标代码灌入单片机内部flash存储区域当中去。 #### 注意事项 确保所有的驱动程序均已正确安装完毕并且物理连线无误(如SWDIO, SWCLK,GND,VCC),另外还需留意不同系列芯片可能存在的特殊要求或者差异之处。 ```bash st-flash write Build/Project_Name.elf 0x8000000 ``` 上述命令可以单独利用开源工具 st-link 实现快速刷写功能而不必每次都经历完整的gdb session握手协商环节。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值