关于 STM32CubeMX 生成代码卡死的一些解决方案

上个月有个单片机的开发项目,使用了 STM32CubeMX(v6.5.0) 来生成 HAL 库代码,几乎在每次重新生成代码(Re-Generate)时,都会出现卡死的情况,尝试了网上的一些方案并未解决,这里记录下自己的解决办法。

问题补充

实际上我遇到的卡死并非 "程序无响应",因为点击 CubeMX 的界面时能够听到 Windows 的 “噔” 的提示音。应该是 CubeMX 存在问题,弹出了一个对话框,但是并没有显示出来,用户无法操作。

这也导致了父级窗体处于等待状态,无法响应用户事件。

问题解决

方法一

问题由于开启 "代码备份" 功能导致。

我在项目的 Project Manager - Code Generator 部分中勾选了 Backup previous generated files when re-generating 选项,CubeMX 会在每次重新生成代码时将当前文件复制到 “Backup” 目录中。

在第2次及以上的重新生成时,由于先前的 "Backup" 文件已存在,CubeMX 可能由于某些原因无法将原有文件覆盖,导致卡死。

解决方案有两种:

  • 每次重新生成代码时,手动删除 "Backup" 目录。
  • 取消勾选 "代码备份" 选项。

其中我还是比较推荐第一种,这样在不使用版本控制的情况下,可以多一道保险。

方法二

问题可能由于打开了 Keil 工程文件导致。

该条问题收集于网络,我并没有遇到,实测在 Keil 开启的情况下,仍然能够重新生成。

相应的解决方案也很简单,在重新生成代码时,保存 Keil 项目并将其关闭即可。

其它补充

如果 STM32CubeMX 无响应,需要结束进程,其进程在为 OpenJDK Platform binary 下方, 而不是直接显示为 xxxCubexxx 这种形式。

可以用下列命令结束进程:

1
taskkill /f /im javaw.exe