【前言】
前面我在论坛之中分享了两种不同的重定向:
瑞萨RA0单片机连载之五——实现串口重定向之printf-电子产品世界论坛 (eepw.com.cn)
stm32H7S7L中printf不使用微库的实现方法-电子产品世界论坛 (eepw.com.cn)
这一篇分享一下另一种写法。
【开发板】
NUCLEO-H503RB
【软件环境】
MDK3.7
【实现方式】
1、在usart.h中引用必要的头文件:
/* USER CODE BEGIN Includes */ #include "stdarg.h" #include "stdio.h" #include "string.h" /* USER CODE END Includes */
2、在usart.c中添加实现函数:
/* USER CODE BEGIN 1 */ void U3_printf(char *format,...){ uint8_t send_str[128] = {0}; va_list listdata; va_start(listdata,format); vsprintf((char *)send_str,format,listdata); va_end(listdata); HAL_UART_Transmit(&huart3,send_str,strlen((const char*)send_str),100); } /* USER CODE END 1 */
此函数主要是使用stdarg.h库函数,使用va_list来提取传进来的参数。再使用HAL库的发送函数,实现输出。
【实验效果】
在main.c中添加测试代码:
/* USER CODE BEGIN 2 */ U3_printf("%d,%c,%x\n",0x30,0x30,0x30); U3_printf("%s\n%s\n",__FILE__,__TIME__); /* USER CODE END 2 */
下载后,使用串口调试助手可以看到输出内容为:
【总结】
这个重定向,移植比较方向,不挑编译器。