STM32(HAL)多串口进行重定向(printf函数发送数据)
目录
1、简介
在HAL库中,常用的printf函数是无法使用的。本文通过重映射实现在HAL库多个串口可进行类似printf函数的操作。
2.1 基础配置
2.1.1 SYS配置
2.1.2 RCC配置
2.2 串口外设配置
接着将串口2、3分别打开,如下图所示:
2.3 项目生成
3、KEIL端程序整合
在usart.c函数最下方复制如下代码
void Uart_printf(UART_HandleTypeDef *huart,char *format, ...)
{
char buf[512]; //定义临时数组,根据实际发送大小微调
va_list args;
va_start(args, format);
uint16_t len = vsnprintf((char *)buf, sizeof(buf), (char *)format, args);
va_end(args);
HAL_UART_Transmit(huart,(uint8_t *)buf,len,1000);
}
接着在usart.h、main.h中分别调用如下头文件。
#include <stdlib.h>
#include <stdio.h>
#include <stdarg.h>
最后设置如下
4、效果测试
在主函数中进行打印测试,代码如
Uart_printf(&huart1,"%dn",10);
串口调试助手显示如下图所示:
上文如有错误,恳请各位大佬指正。