【前言】
前面我在论坛之中分享了两种不同的重定向:
瑞萨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 */下载后,使用串口调试助手可以看到输出内容为:

【总结】
这个重定向,移植比较方向,不挑编译器。
我要赚赏金
