STM32CubeMX、MDK(Keil MDK)、git、vscode等工具中统一编码设置(UTF-8),确保中文支持,避免乱码问题
STM32CubeMX、MDK(Keil MDK)、git、vscode等工具中统一编码设置(UTF-8),确保中文支持,避免乱码问题
STM32CubeMX、MDK(Keil MDK)、git、vscode等工具中统一编码设置(UTF-8),确保中文支持,避免乱码问题
核心需求:我们希望在这些工具中统一编码设置,确保中文支持,避免乱码问题。这通常涉及到设置文件编码为UTF-8,以及配置编辑器、编译器等。
为了在STM32开发环境中统一编码并支持中文,需要分别配置STM32CubeMX、Keil MDK、Source Insight和Git。以下是各工具的详细设置方法:
一、STM32CubeMX 编码设置
核心目标:强制生成UTF-8编码的源代码文件,避免中文注释乱码。
配置步骤:
- 找到STM32CubeMX安装目录下的STM32CubeMX.l4j.ini文件(通常位于 C:\Program Files\STMicroelectronics\STM32Cube\STM32CubeMX)。
- 在文件末尾的部分添加以下参数
-Dfile.encoding=UTF-8 -Duser.language=zh -Duser.region=CN - 保存文件并重启STM32CubeMX。
- 验证:生成工程后,用文本编辑器(如Notepad++)打开 main.c,确认编码为UTF-8。
二、Keil MDK 编码设置
核心目标:确保编辑器正确显示和保存UTF-8编码的中文。
配置步骤:
- 打开Keil MDK,进入 Edit→ Configuration→ Editor选项卡。
- 在 Encoding下拉菜单中选择:
- 推荐:UTF-8
- 或 Chinese GB2312(Simplified)(纯中文环境)
- 勾选 Use Unicode Byte Order Mark(自动添加BOM头)。
- 字体设置(确保中文显示正常):
- 点击 Font…按钮,选择支持中文的字体(如 Microsoft YaHei、SimSun)。
- 字符集选择 CHINESE_CHARSET。
5. 系统区域设置(Windows,慎重处理,建议不要修改):
- 打开“控制面板” → “区域” → “管理” → “更改系统区域设置”。
- 选择“中文(简体,中国)”,取消勾选“Beta版:使用Unicode UTF-8提供全球语言支持”。
- 重启电脑生效。
**注意:**对于已有乱码文件,可使用 File→ Open With Encoding…选择正确编码重新加载。
三、Git 编码设置
核心目标:确保Git命令行和日志正确显示中文文件名和内容。
配置步骤(在Git Bash中执行):
- 设置全局编码参数:
git config --global core.quotepath false# 直接显示中文文件名git config --global i18n.commitEncoding utf-8 # 提交信息编码git config --global i18n.logOutputEncoding utf-8 # 日志输出编码git config --global gui.encoding utf-8 # 图形界面编码- 终端编码设置:
- 右键Git Bash窗口标题栏,选择 Options→ Text。
- 将 Character set设置为 UTF-8,保存并重启终端。
- 解决 git log乱码:
exportLESSCHARSET=utf-8 # 确保分页器支持UTF-8- Windows换行符设置(推荐):
git config --global core.autocrlf true# 提交时CRLF转LF,检出时LF转CRLF四、VS Code设置UTF-8编码
五、统一工作流建议
源头控制:在STM32CubeMX中强制生成UTF-8编码的源文件。
IDE统一:Keil MDK和VS Code均设置为UTF-8编码。
版本控制:Git配置为全程UTF-8,避免文件名和日志乱码。
团队协作:将上述配置写入团队文档,并使用 .gitattributes文件统一换行符和编码:
* text=auto *.c text charset=utf-8 *.h text charset=utf-8 按照以上步骤配置后,四个工具将统一使用UTF-8编码,彻底解决中文乱码问题,并确保团队协作的一致性。
MDK编码格式为UTF-8,stm32的printf中文输出到串口调试软件,中文显示乱码
原因分析:
MDK编码为UTF-8,所以源代码中的中文字符串是UTF-8编码。当程序通过printf输出到串口时,发送的是UTF-8编码的字节流。串口调试软件如果以错误的编码(比如GB2312)显示,就会看到乱码。因此,我们需要将串口调试软件的显示编码设置为UTF-8。
sscom5.13.1.exe 不支持编码设置,默认系统ANSI编码(中文编码为GBK),所以无法修改。
以下以常见的串口调试软件为例,说明如何设置:
SecureCRT:
- 打开会话选项(Session Options)。
- 在终端(Terminal)设置中,找到外观(Appearance)下的字符编码(Character encoding)。
- 将编码设置为“UTF-8”。
Xshell:
- 打开会话属性(Session Properties)。
- 在终端(Terminal)设置中,找到编码(Encoding)。
- 选择“UTF-8”。
Putty:
- 在连接设置中,找到窗口(Window)下的转换(Translation)。
- 在“接收数据的字符集”(Received data assumed to be in which character set)中选择“UTF-8”。
MobaXterm:
- 打开会话设置(Session Settings)。
- 在终端设置(Terminal settings)中,找到终端字体(Terminal font)下的编码(Encoding)。
- 选择“UTF-8”。
串口调试助手(如SSCOM、AccessPort等):
很多国产串口调试助手默认使用GB2312编码。如果软件支持设置显示编码,请将其设置为UTF-8。
但是在SSCOM5.13.1中,不支持编码选择“UTF-8”。
如果串口调试软件不支持UTF-8编码:
可以考虑更换支持UTF-8的串口调试软件。
或者,在代码中将UTF-8字符串转换为GB2312再发送(不是我们期望的)。