关于 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 |