一、环境介绍
1.软件环境:STM32CubeIDE
2.硬件环境:STM32F103C8T6最小系统板
二、模块源码
1.uart.h文件代码
/*
* uart.h
*
* Created on: 2024年4月11日
* Author: 废话文学创始人
*/
#ifndef INC_UART_H_
#define INC_UART_H_
#include <stm32f1xx_hal.h>
#include <stm32f1xx_hal_uart.h>
#include <stdio.h>
#include <stdarg.h>
#include <string.h>
extern UART_HandleTypeDef huart2;
#define HUART huart2 //串口号
#define TXBUFFERSIZE 50 //输出字符串的最大值
#define TIMEOUT 10 //超时时间
void Uart_Send_String(const char *format,...);
#endif /* INC_UART_H_ */
2.uart.c文件代码
/*
* uart.c
*
* Created on: 2024年4月11日
* Author: 废话文学创始人
*/
#include <uart.h>
uint8_t TXBuffer[TXBUFFERSIZE];//发送缓存区
//用法与prinf一样
void Uart_Send_String(const char *format,...)
{
va_list args; //定义一个va_list类型的变量,用来储存单个参数
va_start(args, format); //使args指向可变参数的第一个参数
vsprintf((char*)TXBuffer,format,args); //必须用vprintf等带V的
va_end(args); //结束可变参数的获
HAL_UART_Transmit(&HUART,TXBuffer, strlen(format), TIMEOUT);
}
三、相关宏定义说明
1.硬件IO:UART2的PA2和PA3
2.串口号:HUART(我这里是huart2)
2.字符长度:TXBUFFERSIZE(按需修改)
3.超时时间:TIMEOUT(HAL_UART_Transmit中需要的参数,按需修改)
四、简单示例
1.示例一
while(1)里1s输出一次调试信息
效果
2.示例二
while(1)里1s输出一次整数
效果
五、总结
这样对HAL库的串口发送函数再封装之后,可以很轻松的输出各种带参的字符串了。
要修改的参数已经全部通过宏再定义过了,以后使用模块只需要修改相关宏即可。
如果使用的是不同系列的芯片,还需要修改头文件。