本人正在学正点原子的FreeRTOS教程,使用stm32f103写程序,但是发现好几次使用printf打印信息给串口,发送中文的时候部分中文会出现乱码现象。
比如下图如果打印剩余内存为,那么串口信息打印就正常
但是多打印一个大小两个字就会出问题
这种类似情况出现过几次了,编码用的简体中文,波特率都对的,关键只有部分文字会出现问题,网上查了相关解决方案也没解决,求解决一下。
本人正在学正点原子的FreeRTOS教程,使用stm32f103写程序,但是发现好几次使用printf打印信息给串口,发送中文的时候部分中文会出现乱码现象。
比如下图如果打印剩余内存为,那么串口信息打印就正常
但是多打印一个大小两个字就会出问题
这种类似情况出现过几次了,编码用的简体中文,波特率都对的,关键只有部分文字会出现问题,网上查了相关解决方案也没解决,求解决一下。
以下内容由CHATGPT及阿里嘎多学长共同生成、有用望采纳:
您提问的目的是解决在使用STM32F103开发板进行串口通信时,通过printf函数打印中文信息时出现的乱码问题。
乱码问题通常与字符编码有关。在嵌入式系统中,如果串口通信的发送端和接收端使用的编码不一致,或者发送端在发送中文字符时没有正确处理编码转换,就可能导致乱码。根据您提供的图片,问题出现在打印中文“大小”两个字时。
printf
函数打印中文时,需要确保使用的是支持多字节字符集的printf
版本,例如printf
函数的-u
版本(如果可用)。由于您提供的图片中代码不完整,以下是一个简单的示例代码,用于在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)
{
// 其他代码...
}
}
// 省略初始化函数...
如果一切配置正确,您应该能够在串口助手中看到正确的中文字符输出,而不会出现乱码。