HC32L110(一) 从零搭建:Win10下DAP-Link/ST-Link/J-Link烧录环境全攻略
1. 硬件准备与开发环境搭建
第一次接触HC32L110这款MCU时,我完全被它迷你的尺寸震惊了——CSP16封装的版本只有1.6mm×1.4mm,比芝麻还小。但别被它的体积吓到,搭建开发环境其实比想象中简单。先说说硬件选择,市面上常见的开发板主要有两种:LilyGo的T-HC32开发板(采用CSP16封装)和泽耀的2.4G模块套件底板(QFN20封装)。个人建议新手选择泽耀的套件,因为QFN20封装更容易焊接,而且9.9元还附赠Si24R1射频芯片,性价比超高。
调试器的选择上,DAP-Link、ST-Link V2和J-Link都能完美支持。如果你手头有现成的ST-Link V2(比如从STM32开发板拆下来的),完全可以复用。我自己测试过三种调试器,发现J-Link的兼容性最好,特别是在Linux环境下。但Windows用户用DAP-Link就足够了,某宝上20多元就能买到CMSIS-DAP兼容的调试器。
软件方面需要准备三个关键文件:HC32L110_DDL_Rev1.1.4.zip(设备驱动库)、HC32L110_IDE_Rev1.0.3.zip(Keil支持包)、JLink_Windows_Vxxx.exe(如果用J-Link)。这些在华大官网和GitHub都能找到。特别提醒:下载HC32L110_IDE包后,记得检查MDK_IDE目录下的HDSC.HC32L110.1.0.3.pack文件,这就是Keil的芯片支持包。
2. Keil MDK环境配置详解
安装完Keil MDK后,双击HDSC.HC32L110.1.0.3.pack会自动导入芯片支持。这里有个坑要注意:如果Keil版本太新(比如V5.37),可能会报兼容性错误。我实测V5.29和V5.33版本最稳定。导入成功后,新建项目时就能在芯片列表里找到"HDSC"分类下的HC32L110系列。
创建项目时,关键是要选对芯片具体型号。比如泽耀底板用的是HC32L110C4UA(32KB Flash/4KB RAM),而T-HC32开发板是HC32L110B6YA(16KB Flash/2KB RAM)。选错型号会导致后续烧录失败。项目模板建议直接从HC32L110_DDL的Example里复制,特别是startup_hc32l110.s这个启动文件,不同型号的RAM/Flash配置差异都体现在这里。
在Options for Target配置中,需要重点关注三个标签页:
- Target:确认ROM和RAM地址范围与芯片匹配
- Output:勾选"Create HEX File"以便用J-Flash烧录
- Debug:根据使用的调试器选择对应选项
3. DAP-Link烧录全流程
用DAP-Link烧录时,首先在Debug标签页选择"CMSIS-DAP Debugger",然后点击Settings进入配置。这里最容易出问题的是时钟频率设置——Keil经常默认选1MHz,这会导致擦除Flash时超时。建议手动改为10MHz,如果还不行就逐步降低到5MHz。
Flash Download配置页必须勾选"Reset and Run",否则程序烧录后不会自动启动。下方的Programming Algorithm要确认加载了正确的算法文件。华大的算法文件命名很直观:HC32L110B4_C4.FLM对应C4/B4型号,HC32L110B6_C6.FLM对应C6/B6型号。
第一次连接时可能会遇到"SWD/JTAG Communication Failure"错误。我总结的排查步骤是:
- 检查开发板供电(最好用调试器的5V输出)
- 确认SWD接口连接正确(SWDIO、SWCLK、GND三线必需)
- 尝试降低时钟频率到1MHz临时测试
- 重启Keil并重新插拔调试器
4. ST-Link V2的特殊配置
ST-Link V2的配置与DAP-Link大同小异,主要区别在Debug设置里要选择"ST-Link Debugger"。有个隐蔽的坑:ST-Link默认使用JTAG模式,而HC32L110只支持SWD模式。必须在Port选项里手动切换为SW,否则会报"No target connected"错误。
时钟频率建议设为4MHz,这个值经过实测最稳定。ST-Link的驱动有时会和Keil产生冲突,如果遇到无法识别的情况,可以尝试以下步骤:
- 卸载当前ST-Link驱动
- 安装最新版ST-Link Utility
- 在设备管理器里更新驱动
烧录速度方面,ST-Link比DAP-Link快约30%,特别是对于32KB Flash的型号,完整擦写只需要1.5秒左右。不过华大芯片的Flash算法没有STM32那么完善,不建议开启"Verify after programming"选项,可能会误报校验失败。
5. J-Link的高阶玩法
J-Link在Windows下的配置与前述两种调试器类似,但它的优势在于可以单独使用J-Flash工具进行烧录。首先需要将Keil安装目录下的FLM算法文件(路径通常是C:\Keil_v5\ARM\PACK\HDSC\HC32L110\1.0.3\Flash)复制到J-Link的Devices目录,然后修改JLinkDevices.xml添加设备支持。
具体操作步骤:
- 在C:\Program Files\SEGGER\JLink\下创建Devices\HDSC目录
- 复制HC32L110B4_C4.FLM和HC32L110B6_C6.FLM到该目录
- 用文本编辑器打开JLinkDevices.xml
- 在前添加设备描述(参考华大GitHub的示例)
J-Flash的最大优势是支持脚本自动化。比如我需要批量生产测试时,会写个简单的.jlink脚本:
device = HC32L110x4; speed = 4000; h loadfile "firmware.hex", 0x0 r q然后用命令行调用:JFlash.exe -openprj"hc32.jflash" -auto就能实现一键烧录。
6. 常见问题排查指南
遇到烧录失败时,首先要判断问题是出在硬件连接还是软件配置。我常用的诊断方法是观察调试器的指示灯:
- 红灯常亮:供电异常或目标板短路
- 红灯闪烁:通信失败(检查SWD连线)
- 绿灯常亮:连接正常但Flash算法错误
对于报错"Flash timeout",可以尝试以下解决方案:
- 降低时钟频率到1MHz临时测试
- 检查Reset引脚是否被正确拉高
- 在Keil的Flash Download配置里取消勾选"Reset before loading"
最棘手的要数"J-Link识别为Cortex-M3"的警告。这是因为J-Link的数据库没有正确配置HC32L110的M0内核信息。虽然不影响使用,但强迫症患者可以按照前文修改JLinkDevices.xml解决。
7. 开发实战技巧
在实际项目中,我发现华大芯片的Flash编程有几个特点需要注意:
- 擦除操作是以页为单位(每页1KB)
- 写操作必须按4字节对齐
- 不支持同时读写(需要在RAM中建立缓存)
推荐使用华大提供的DDL库中的Flash操作函数,比直接操作寄存器稳定得多。例如擦除一页的代码应该是:
stc_flash_erase_cfg_t eraseCfg; eraseCfg.u32Timeout = 1000; eraseCfg.u32PageAddr = 0x0000; FLASH_ErasePage(&eraseCfg);对于需要低功耗的应用,务必在烧录前确认选项字节(Option Bytes)配置正确。特别是LVD电压阈值和看门狗设置,错误的配置会导致芯片无法唤醒。华大提供了专门的Option Bytes编程工具,在DDL包的Utilities目录下。
调试时如果发现程序运行异常,可以先检查MAP文件确认内存分配是否合理。HC32L110的RAM很小(只有2-4KB),Keil默认的堆栈设置可能不够用。我通常会把启动文件中的Stack_Size和Heap_Size改为:
Stack_Size EQU 0x00000400 Heap_Size EQU 0x00000200