STM32中,不进行printf改写通过函数达到同款效果

cpp 复制代码
void bt_send(char *format,...)
{
	uint8_t send_buf[128]={0};
	va_list arg;
	va_start(arg,format);
	vsprintf((char*)send_buf,format,arg);
	va_end(arg);
	
	HAL_UART_Transmit(&uart2_handle,send_buf,sizeof(send_buf),100);
} 

这段代码定义了一个名为 bt_send 的函数,用于通过串口(UART)发送格式化后的字符串。这个函数利用了 C 语言中的可变参数(varargs)特性以及串口通信的功能。下面是对这段代码的详细解释:

  1. 函数定义 :
    • void bt_send(char *format,...): 这个函数没有返回值(void),并且接受至少一个参数。第一个参数 char *format 是一个指向字符数组的指针,即格式化字符串,它指定了后续参数如何被格式化和插入到最终的字符串中。... 表示这个函数可以接受可变数量的参数,这些参数的类型和数量由 format 字符串中的格式指定符决定。
  2. 局部变量定义 :
    • uint8_t send_buf[128]={0};: 定义了一个类型为 uint8_t(无符号8位整型,通常用于表示字节)的数组 send_buf,大小为128个字节,并将所有元素初始化为0。这个数组用于存储格式化后的字符串,准备通过串口发送。
  3. 处理可变参数 :
    • va_list arg;: 声明了一个 va_list 类型的变量 arg,用于存储处理可变参数列表的信息。
    • va_start(arg,format);: 初始化 arg 变量,使其指向 format 之后的第一个参数。这是处理可变参数列表的起始点。
    • vsprintf((char*)send_buf,format,arg);: 使用 vsprintf 函数将格式化字符串 format 和其后的可变参数列表 arg 格式化后存储到 send_buf 中。这里将 send_buf 强制转换为 char* 类型,因为 vsprintf 需要一个 char* 类型的参数作为输出缓冲区。
    • va_end(arg);: 清理 arg 变量,结束对可变参数列表的处理。
  4. 串口发送 :
    • HAL_UART_Transmit(&uart2_handle,send_buf,sizeof(send_buf),100);: 调用 HAL_UART_Transmit 函数,通过 UART 发送数据。这个函数是 STM32 HAL 库的一部分,用于配置和发送数据通过指定的 UART 接口。
      • &uart2_handle: 指向 UART2 的句柄(handle)的指针,这个句柄包含了 UART 配置和状态的信息。
      • send_buf: 指向要发送的数据的指针,即之前格式化好的字符串。
      • sizeof(send_buf): 要发送的数据的大小,这里是 send_buf 数组的大小,即128字节。注意,这里有一个潜在的问题:如果 format 字符串和可变参数生成的格式化后的字符串长度超过了127字节(因为最后一个字节被初始化为0,作为字符串的结束符),则会导致数据截断或溢出。
      • 100: 超时时间,单位为毫秒。如果在这个时间内数据没有被完全发送,函数将返回错误。
相关推荐
文火冰糖的硅基工坊2 小时前
[硬件电路-192]:基级与发射极两端的电压超过1.5v可能是什么原因
单片机·嵌入式硬件·系统架构·电路·跨学科融合
源远流长jerry5 小时前
STM32之RTOS移植和使用
stm32·单片机·嵌入式硬件
2301_1472583695 小时前
STM32 单片机开发 - SPI 总线
单片机·嵌入式硬件
范纹杉想快点毕业12 小时前
ZYNQ PS 端 UART 接收数据数据帧(初学者友好版)嵌入式编程 C语言 c++ 软件开发
c语言·笔记·stm32·单片机·嵌入式硬件·mcu·51单片机
方圆工作室13 小时前
51单片机驱动数码管
单片机·嵌入式硬件·51单片机
乔宕一14 小时前
stm32 链接脚本没有 .gcc_except_table 段也能支持 C++ 异常
c++·stm32·嵌入式硬件
范纹杉想快点毕业15 小时前
STM32 串口接收数据包(自定义帧头帧尾)
stm32·单片机·嵌入式硬件
茯苓gao15 小时前
STM32G4 电流环闭环
笔记·stm32·单片机·嵌入式硬件·学习
单片机系统设计16 小时前
基于stm32的环境监测系统/智能家居/空气质量监测系统
stm32·单片机·嵌入式硬件·毕业设计·智能家居
不知所云,17 小时前
5. STM32 时钟系统分配
stm32·单片机·嵌入式硬件