关于STM32CubeIDE串口函数重定向问题总结

本文介绍了在STM32CubeIDE环境下如何进行串口函数重定向,以便使用printf函数进行数据打印。关键步骤包括包含stdio.h库,重写fputc函数,以及在工程属性中进行MPU设置和编译标志配置。注意printf函数需以 结尾才能正常打印串口数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  今天在做课程实验的时候为了方便数据的可视化,就想要将数据利用串口发给电脑进行显示。但是利用HAL_UART_Transmit函数的时候传输的数字都是hex格式,比如我想要发的是1,但实际ASCII显示出来可能是一个“?”这种。当然也不是不能直接用对应函数解决,比如我现在想发1,那我实际传输的数据应该就是0x31。但是这样很麻烦而且可能会遇到奇怪的bug。为了省事就想到了之前看到的串口函数重定向,就是利用我们都很熟悉的C语言中的printf函数进行数据打印在上位机显示。

  在网上搜了很多,但是大部分都是基于Keil这个软件的,很不幸,本人目前所用的电脑上没有这个软件。关于在STM32CubeIDE上的串口函数重定向的文章很少。我在此就对我遇到的问题进行总结,也希望各位有缘看到的人能通过阅读这篇文章解决你们的问题。

  首先我们再引入串口函数重定向的时候肯定是要引入一个库的

 就是我们熟悉的:stdio.h

#include "stdio.h"

所谓的函数重定向,是指我们要通过改写fputc函数,进而实现对printf函数的重定向,下面是fputc函数重写的具体代码

/* USER CODE BEGIN 0 */

#ifdef __GNUC__
#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#else
#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#endif

PUTCHAR_PROTOTYPE
{
 HAL_UART_Transmit(&huart1,(uint8_t*)&ch, 1, 0xFFFF);
 return ch;
 }
/* USER CODE END 0 */

同时,在这里,我还是对stdio.h头文件中的fputc函数的声明进行了改写,改写成这样滴。

int fputc(int ch,FILE *f);

 做完这些,我们程序部分的改写就到此为止。下面我们还需要对STM32cubeIDE进行一些配置,否则我们的printf函数依旧是无效的!!!

首先我们鼠标右键对应需要改写的工程,会出现这样的框

 我们选择属性,会出现这样的情况

 我们选到MPU setting这里,按照图示红线部分进行配置,一定要勾选!!!!不然可能没有办法使用浮点型喔。

然后我们再选到这里

在other flag中添加

-u_printf

 然后我们选择应用并关闭,就可以在程序中利用printf函数进行打印了。

这里还有一个问题,就是我们写的printf函数必须必须必须要以\r\n结尾!!!!这个非常非常重要如果不以\n结尾是无效的,不会正常打印串口!!!!具体原因enmm我还不太了解,如果有大佬知道的话麻烦评论区给俺讲解一下。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cointreau97

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值