STM32 下载报错 Internal command error 修复指南
报错核心场景
- 硬件环境:STM32 系列 MCU(以 STM32F103 为例)、STLINK 调试器。
- 现象:首次通过 STLINK 下载程序、在线 Debug 均正常;修改代码后二次下载时 Keil/STM32CubeIDE 提示「Internal command error」,无法建立调试连接、无法下载程序。
- 关键前提:报错前曾配置过 PA13、PA14 引脚,或给调试引脚加过外部上下拉电阻。
报错原因
原因 1:MCU 内部 Flash 未彻底擦除
STM32 的 Flash 在二次下载时,若前一次程序未完全擦除(尤其是 Debug 相关的中断、引脚配置残留),会导致 STLINK 与 MCU 的调试通信异常,直接触发「Internal command error」。首次下载正常是因为 Flash 为空,通信无干扰;二次下载时残留程序占用调试资源,导致通信中断。
原因 2:PA13/SWDIO、PA14/SWCLK 被复用或受干扰
PA13、PA14 是 STM32 SWD 调试的核心引脚(默认复用为调试功能)。若在程序中误将其配置为普通 GPIO(比如复用为输入/输出),会覆盖调试引脚功能,导致 STLINK 无法与 MCU 通信。若给 PA13、PA14 外接了上下拉电阻,会改变调试引脚的默认电平,干扰 SWD 通信时序,同样触发报错。
解决方案
第一步:使用 STLINK Utility 软件擦除 MCU Flash

- 硬件连接:保持 STLINK 与 MCU 的 SWD 连接(PA13 接 SWCLK、PA14 接 SWDIO,GND、VCC 正常供电)。
- 打开软件:安装并启动「STLINK Utility」(可从 ST 官网获取适配所有 STLINK 版本)。
- 建立连接:点击软件顶部连接 MCU 图标,等待连接成功。
- 擦除 Flash:连接成功后,点击顶部擦除图标,选择「Full Chip Erase」(全片擦除),点击确认,等待擦除完成(擦除时间 1-2 秒)。
- 断开连接:擦除完成后,点击「Disconnect」,关闭 STLINK Utility。
第二步:检查并修改 PA13、PA14 引脚配置
- 检查程序代码:删除 PA13、PA14 的 GPIO 复用配置(禁止将其设为普通 IO),确保这两个引脚保留默认的 SWD 调试功能。具体代码参考:
// 错误配置:将 PA13、PA14 设为普通 IO,导致调试失效
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_14;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IPU; // 禁止这样配置
GPIO_Init(GPIOA, &GPIO_InitStruct);
- 检查硬件电路:拆除 PA13、PA14 引脚上的外部上下拉电阻(调试引脚默认自带内部电平,无需外接,外接会干扰通信)。
- 补充说明:若确实需要使用 PA13、PA14 作为普通 IO,需先配置引脚重映射(仅关闭 JTAG,保留 SWD),具体代码参考:
// 正确配置:保留 SWD 调试,仅释放其他 JTAG 引脚(不影响 PA13、PA14)
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);


