当拥有多个串口需要使用同一个printf场景下,变得十分必要
本篇仅对Hal库实现,当换成其他库时只需要替换发送函数即可
先来看下效果
通过指定对应串口句柄即可实现使用同一个打印函数以不同串口发送内容
Uart_printf(&huart1, "ACK\r\n"); // 无参
Uart_printf(&huart1, "ReadFlashChipID:%d\r\n",hal_spi_flash_get_id()); // 带参
跟着一步步走,简单实现!
首先打开CubeMx选择自己的主控型号,然后将相关时钟频率、工程配置等设置好,选择开启对应需要的串口,网上教程较多这里就不再做赘述
设置好串口参数
直接生成工程即可
接着打开usart.c文件将以下代码拷贝至用户代码区
void Uart_printf(UART_HandleTypeDef *huart,char *format, ...)
{
char buf[100];
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,150);
}
然后打开usart.h引入头文件以及声明函数
#include <stdlib.h>
#include <stdio.h>
#include <stdarg.h>
void Uart_printf(UART_HandleTypeDef *huart,char *format, ...);
最后在需要的地方引入usart.h头文件再调用即可
基本使用格式有两种,带参和不带参
Uart_printf(&huart1, "ACK\r\n"); // 无参
Uart_printf(&huart1, "ReadFlashChipID:%d\r\n",hal_spi_flash_get_id()); // 带参
如果有更好建议可以随时提出!