VSCode编译烧录调试HC32F460x
通过VSCode的EIDE和Cortex-Debug插件实现编译、烧录、调试华大HC32F460x芯片。EIDE具有独立的工作区,完全兼容MDK工程。分别使用JLink和DapLink进行烧录调试。
华大HC32F460x使用的是ARM Cortex M4架构,因此只要配置了正确的芯片支持包,就能够实现与STM32系列芯片一致的开发效果。如果不熟悉EIDE和Cortex Debug的使用方法,建议先阅读Windows搭建STM32开发环境-进阶篇[1]和cortex-debug 用法[2]。
1.编译
1.1 导入Keil项目
准备好能够编译成功的Keil项目,VSCode工作区下点击Import Project
,选择MDK,选择Keil项目。
1.2 加载芯片支持包
点击Chip Support Package,选择From Disk,选择华大提供的芯片支持包(.pack后缀),再根据自己的芯片选择具体的型号,比如我这里是HC32F460KEUA
1.3 编译
点击Build,快捷键F7,编译成功后会输出已使用的静态RAM/ROM信息。其他编译输出信息参考EIDE官方文档[3]说明。
2.JLink烧录调试
2.1 添加新设备
JLink默认的设备列表不包含HC32F460x,因此需要手动添加新设备给JLink的设备列表。
找到EIDE的JLink安装目录,比如
C:\Users\Orionxer\.eide\tools\jlink
,备份JLinkDevices.xml文件进入Devices文件夹,新建HDSC文件夹
解压Pack包后找到HC32F460_512K.FLM文件,将文件复制到HDSC文件夹下,将HC32F460_512K.FLM重命名为HC32F46x.FLM
编辑JLinkDevices.xml文件,复制以下内容,在文件底部添加新设备
▶JLinkDevices.xml1
2
3
4
5
6
7<!-- -->
<!-- HDSC (HC32) -->
<!-- -->
<Device>
<ChipInfo Vendor="HDSC" Name="HC32F46x" WorkRAMAddr="0x20000000" WorkRAMSize="0x10000" Core="JLINK_CORE_CORTEX_M4"/>
<FlashBankInfo Name="Flash_512K" BaseAddr="0x0" MaxSize="0x80000" Loader="Devices/HDSC/HC32F46x.FLM" LoaderType="FLASH_ALGO_TYPE_OPEN" AlwaysPresent="1"/>
</Device>VSCode重新加载JLink设备:
Ctrl + Shift + P
打开命令面板,输入Reload Jlink Devices List即可
如果JLink弹窗提示选择设备,注意华大的缩写是HDSC,输入HC32是找不到的
2.2 烧录
点击Flasher Configurations的切换按钮,确保烧录方式为JLink,选择CPU Name为HC32F460x,点击Program Flash按钮尝试烧录
2.3 调试
2.3.1 Cortex Debug配置
自行确保Cortex Debug插件配置正确,以下提供一个示例配置,请根据自己的实际情况进行修改
1 |
|
2.3.2 生成调试配置
- EIDE中右键点击项目,选择Generate Debugger Configuration,选择JLink,
- 一般默认参数不需要修改,点击Create
- F5启动调试,调试启动较慢,大概耗时10-20秒不等
关于调试的更多用法,可以参考Linux搭建C开发环境的[4]第4点-调试入门,详细介绍了各类断点、监控变量、调用堆栈以及常用快捷键说明。
由于EIDE独立安装了JLink,如果Cortex Debug使用的JLink-GDBServer不是EIDE的JLink,因此添加新设备的操作可能需要在其他JLink的安装路径再操作一遍。
3.DapLink烧录调试
3.1 安装pyOCD
注意:Python3.12无法安装pyOCD[5]。Python3.10.x满足要求。pyOCD安装命令:
1 |
|
3.2 烧录
使用pyOCD烧录固件,理论上兼容所有的DapLink。
- 点击Flasher Configurations的切换按钮,确保烧录方式为pyOCD
- 选择Target Name为hc32f460xe
- 修改Download Speed为8M
- 点击Program Flash按钮尝试烧录,实测烧录速度比JLink快;同等硬件下也比Keil烧录快。
3.3 调试
3.3.1 安装OpenOCD
点击Setup Utility Tools,选择OpenOCD,点击安装
3.3.2 新增目标配置
增加target配置文件:比如在路径C:\Users\Orionxer\.eide\tools\openocd_7a1adfbec_mingw32\share\openocd\scripts\target
中,新增hc32f46x.cfg文件,完整复制以下内容并保存。文件内容来源于羽名大佬[5],感谢🎉
1 |
|
3.3.3 生成调试配置
启动调试前自行确保Cortex Debug配置正确。
- EIDE中右键点击项目,选择Generate Debugger Configuration,选择OpenOCD,
- Interface选择cmsis-dap-v1
- Target选择hc32f46x
- 一般默认参数不需要修改,点击Create
- F5启动调试,调试启动较慢,大概耗时10-20秒不等。如果已经存在JLink等其他调试配置,可以先注释以避免无法启动调试。
3.3.4 优化调试速度
成功进入调试后,根据gdbserver的log显示,其速度默认在100KHz;找到并修改cmsis-dap-v1.cfg文件:指定速度为8000KHz,即8MHz,能够显著提升进入调试的速度,实测启动调试耗时约4秒(与Keil的速度一致),调试过程中没有延时。完整配置与路径如下:
1 |
|
关于更多FreeRTOS调试分析可以参考STM32-FreeRTOS移植与调试[7]的第3点-调试FreeRTOS和第4点-监控分析
不选用PyOCD进行调试是因为实测调试速度特别慢,且重启芯片的时候无法再次停在main函数。