pogba爱音乐 2024-05-21 09:41 采纳率: 0%
浏览 67

正点原子STM32串口打印出现中文部分乱码问题

本人正在学正点原子的FreeRTOS教程,使用stm32f103写程序,但是发现好几次使用printf打印信息给串口,发送中文的时候部分中文会出现乱码现象。

比如下图如果打印剩余内存为,那么串口信息打印就正常

img

img

但是多打印一个大小两个字就会出问题

img

img

这种类似情况出现过几次了,编码用的简体中文,波特率都对的,关键只有部分文字会出现问题,网上查了相关解决方案也没解决,求解决一下。

  • 写回答

3条回答 默认 最新

  • 阿里嘎多学长 2024-05-21 09:42
    关注

    以下内容由CHATGPT及阿里嘎多学长共同生成、有用望采纳:


    您想要解决的问题:

    您提问的目的是解决在使用STM32F103开发板进行串口通信时,通过printf函数打印中文信息时出现的乱码问题。

    图片内容:

    1. 第一张图片显示了串口打印的“剩余内存为”后面跟着一串数字,没有出现乱码。
    2. 第二张图片显示了串口打印的“剩余内存为”后面跟着一串数字,同样没有出现乱码。
    3. 第三张图片显示了串口打印的“剩余内存大盐”后面跟着一串数字,出现了乱码。
    4. 第四张图片显示了串口打印的“剩余内存大小为”后面跟着一串数字,也出现了乱码。

    问题出现原因:

    乱码问题通常与字符编码有关。在嵌入式系统中,如果串口通信的发送端和接收端使用的编码不一致,或者发送端在发送中文字符时没有正确处理编码转换,就可能导致乱码。根据您提供的图片,问题出现在打印中文“大小”两个字时。

    问题解决方案:

    1. 确认编码格式:确保您的STM32代码使用的是UTF-8编码,并且串口通信的接收端(如PC端的串口助手)也支持UTF-8编码。
    2. 使用正确的函数:在STM32中,使用printf函数打印中文时,需要确保使用的是支持多字节字符集的printf版本,例如printf函数的-u版本(如果可用)。
    3. 检查串口配置:确保串口的波特率、数据位、停止位和奇偶校验位设置正确,并且发送端和接收端一致。
    4. 使用串口助手:使用支持UTF-8编码的串口助手,如“PuTTY”或“Tera Term”。

    提供代码:

    由于您提供的图片中代码不完整,以下是一个简单的示例代码,用于在STM32中打印中文字符:

    #include "stm32f10x.h"
    #include <stdio.h>
    
    UART_HandleTypeDef huart1;
    
    void SystemClock_Config(void);
    static void MX_GPIO_Init(void);
    static void MX_USART1_UART_Init(void);
    
    int main(void)
    {
      HAL_Init();
      SystemClock_Config();
      MX_GPIO_Init();
      MX_USART1_UART_Init();
    
      // 打印中文字符
      char *str = "剩余内存大小为";
      HAL_UART_Transmit(&huart1, (uint8_t *)str, strlen(str), HAL_MAX_DELAY);
    
      while (1)
      {
        // 其他代码...
      }
    }
    
    // 省略初始化函数...
    

    代码运行方式:

    • 确保您的STM32开发环境已经配置好,包括编译器、烧录器等。
    • 将上述代码复制到您的项目中,并确保UART初始化函数正确配置。
    • 编译并烧录到STM32开发板。
    • 使用支持UTF-8编码的串口助手打开相应的串口号和波特率,查看打印结果。

    代码预期运行结果:

    如果一切配置正确,您应该能够在串口助手中看到正确的中文字符输出,而不会出现乱码。

    推荐相关链接:

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 5月21日

悬赏问题

  • ¥15 stm32cubemx生成代码后利用printf输出浮点数卡死。
  • ¥15 关于#windows#的问题:我是想本地生成pdf的标签文件然后扔给其他的电脑打印,是修改pdf打印格式打印出来这个pdf给那边打印,还是说有其他办法可以生成文件给人家打印
  • ¥15 dy/dx-y/x=x^2sinx通解 解题过程 用一阶线性非齐次公式
  • ¥15 ERNIE大模型的系统记忆没有生效
  • ¥15 如何用C++在CAD二次开发中,对标注AcDbDimension文字的高度与宽度的获取方法?
  • ¥15 C++检查代码什么问题
  • ¥20 matlab写的上位机UDP速率不到1M
  • ¥100 tomcat应用从Termux上连接不到Linux上的MySQL服务器(相关搜索:服务器)
  • ¥15 flutter 错误RROR:flutter/runtime/dart_vm_initializer.cc(41)
  • ¥15 python和aspen Adsportion交互