0


STM32CubeIDE串口printf函数输出中文乱码(配置教程+解决方法)

前言

本文主要讲述在使用CubeIDE配置串口通信的过程中,如何重定向printf()函数,以及如何解决在串口打印中文时输出乱码的情况。

平台环境

软件:STM32CubeIDE

       串口调试助手

硬件:STM32H7A3ZIT6Q


一、串口配置

主要配置的内容为NVIC;RCC;SYS;USB_OTG_HS;USART3(作者使用串口3,可根据自身情况修改)

(1)RCC:

PS:注意在时钟树配置界面将其配置成8MHz(推荐),时钟配错会导致输出乱码。

(2)NVIC:打开中断

(3)SYS:

(4)USART3:

(5)USB_OTG_HS:

串口配置完成,但这时候还不能使用printf函数来打印数据,需要我们重写函数。


二、printf重定向

首先需要我们引用头文件,注意要放在private includes下面,如图所示:

/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */
#include <string.h>
#include <stdio.h>

/* USER CODE END Includes */

接着我们要在USER CORE BEGIN4/USER END BEGIN4之间插入以下代码:

/* USER CODE BEGIN 4 */
#ifdef __GNUC__

#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)

#define GETCHAR_PROTOTYPE int __io_getchar(FILE *f)

#else

#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)

#define GETCHAR_PROTOTYPE int fgetc(FILE *f)

#endif /* __GNUC__ */

PUTCHAR_PROTOTYPE
{
    HAL_UART_Transmit(&huart3, (uint8_t *)&ch, 1, 0xFFFF);

    return ch;
}

GETCHAR_PROTOTYPE
{
    uint8_t ch = 0;
    HAL_UART_Receive(&huart3,(uint8_t *)&ch, 1, 0xFFFF);

    if (ch == '\r')
    {
        __io_putchar('\r');
        ch = '\n';
    }

    return __io_putchar(ch);
}

/* USER CODE END 4 */

另外,补充一点,如果想要发送浮点数据,还需进行以下操作

首先找到任务栏中的project ,左击最底下找到properties。

之后找到c/c++ Build栏中的settings

到这里就完成了printf的重定向,可以引用printf函数了

但是!

这时候会出现输出乱码的情况,,如图:

所以需要进行以下设置


三、中文乱码解决方案

步骤

首先找到任务栏中的project ,左击最底下找到properties

点击properties后的界面,注意若只是下面界面中other栏中改成GBK是无效的,其实这个地方选GBK或者UTF-8没有什么影响,只是选择UTF-8时,串口打印中文会偶尔出现乱码,GBK则会好一点

界面左侧找到c/c++ Build栏中的settings

在左侧other flags中添加图中标蓝部分,添加后点击应用并关闭。

效果

注意:使用前要调试好串口助手的波特率等数据(根据自己配置的数据来调)

四、总结

以上是本人在串口学习中遇到的一些问题和注意点,如有瑕疵,还望包涵,欢迎大家在评论区提出自己的看法。

标签: stm32 单片机 ide

本文转载自: https://blog.csdn.net/m0_74141752/article/details/129962616
版权归原作者 Rabbit—Smash 所有, 如有侵权,请联系我们删除。

“STM32CubeIDE串口printf函数输出中文乱码(配置教程+解决方法)”的评论:

还没有评论