数码之家

 找回密码
 立即注册
搜索
查看: 1657|回复: 4

[ARM] 关于STM32CubeMX升级后注释变成乱码的解决

[复制链接]
发表于 2024-12-5 22:21:15 | 显示全部楼层 |阅读模式
本帖最后由 晒曭曮曯 于 2024-12-5 22:21 编辑

我在使用STM32一直都是习惯用STM32CubeMX生成初始化代码工程,使用起来很方便,没事的时候会更新一下软件和包,保持最新的版本,KEIL软件也一样。
昨天发现STM32CubeMX有更新6.13.0版本,于是就更新了一下。

以为没什么区别,然后我就去玩STM32去了,就在我添加引脚后重新生成工程后,发现之前写的注释全都乱码了,感到一丝不祥。
还好之前有压缩备份,然后我就重新解压出来,发现CubeMX没有修改之前是正常的,修改之后注释就不正常了,我第一反应就是编码不一样,因为我之前在KEIL里面一直都是设置GB2312。

然后我就重新生成一个测试工程,测试简单配置了一下。

生成的文件

然后打开工程,随便写一些注释。

编译一下后再次点击CubeMX生成代码。可以看到注释已经乱码了。

之前没有发现这个问题,就是更新CubeMX之后出现的。然后我就安装回之前的6.12.1版本,发现不会这样子。这样子可不行呀,不能一直不更新软件呀。
我就去看看网上有没有什么解决的方法,结果基本上都是说将KEIL改成UTF-8编码。
本来我是无所谓的,应该不会有什么问题,我就测试了一下,发现确实不会再乱码了。
到这里我就确认是编码的问题,KEIL里面保存成GB2312,但是CubeMX会修改成UTF-8。我就将我的工程里面我自己写的和生成后修改过的.c和.h文件使用Notepad++都转换成UTF-8编码了。可以看到新生成的工程修改main.c后再次使用CubeMX生成代码就乱码了,编码也变成UTF-8。

就在我以为问题都解决后,我打开我之前的工程,发现编译直接报错了。经过一顿解决后,得出结论,KEIL不能使用UTF-8,简单用了一下,就发现两个问题,一个是汉字字模会报错,这个不是致命问题,可以将这一个文件编码使用ANSI编码,CubeMX在重新生成的时候不会修改这个文件。

最致命的是printf打印出来的是乱码,这个是绝对不能忍受的。

没办法,看来还是得要使用GB2312。
然后我又去网上搜索,无果,然后我就想,既然KEIL不能修改成UTF-8,那将CubeMX改成GBK不就可以了。
经过一顿摸索,最终的解决办法就是在系统变量里面添加一个名称为JAVA_TOOL_OPTIONS,值为-Dfile.encoding=GBK的变量。

经过测试后重新生成代码里面的注释就不会再乱码了。





补充内容 (2025-5-6 11:50):
或者在安装文件夹内的 STM32CubeMX.l4j.ini 配置文件添加一行:-Dfile.encoding=GBK也可以

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

打赏

参与人数 3家元 +57 收起 理由
mmxx2015 + 30 優秀文章
jf201006 + 18 謝謝分享
vip2128 + 9

查看全部打赏

发表于 2024-12-5 23:01:14 | 显示全部楼层
多谢分享,编译器乱码是很烦人,那个iar乱码好像更厉害。
回复 支持 0 反对 0

使用道具 举报

发表于 2024-12-6 20:38:14 | 显示全部楼层
感谢分享。
有装STM32CubeMX,但对它生成的代码效率不满意,只用来看下某些外设初始化怎么写。
回复 支持 反对

使用道具 举报

发表于 2024-12-27 11:19:28 | 显示全部楼层
同样的烦恼,没想到可以这样解决,真的不错,给楼主点赞
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

APP|手机版|小黑屋|关于我们|联系我们|法律条款|技术知识分享平台

闽公网安备35020502000485号

闽ICP备2021002735号-2

GMT+8, 2025-5-7 21:10 , Processed in 0.093601 second(s), 9 queries , Redis On.

Powered by Discuz!

© 2006-2025 MyDigit.Net

快速回复 返回顶部 返回列表