在进行STM32H750系列芯片开发过程中,使用ST官方自带的CubeIDE开发工具生成具有串口输出功能的驱动代码时,直接调用printf()时,是无法直接成功打印出相关信息到上位机,串口调试助手的。如下图所示,串口在CubeIDE中的配置以及相关打印函数的直接调用,其中串口1的IO口复用是PA9、PA10。
下图展示了在未进行任何重定义的情况下,直接调用printf(),结果很明显,在串口助手中没有任何输出。
原因很简单,要想调用printf(),那么就需要对该函数的接口进行重定义,也就是添加某些必要代码,添加代码如下,本人将下面的代码放在的文件是usart.c中,并且将#include "stdio.h"包含在main.h文件中。
#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,HAL_MAX_DELAY);
return ch;
}
最后重新编译代码,连接MCU以及烧录代码,可以看到在串口助手中看到打印的数据为
Hello H750 !!******** 这代表在CubeIDE环境下使用串口的printf()函数成功。