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: 超时时间,单位为毫秒。如果在这个时间内数据没有被完全发送,函数将返回错误。
相关推荐
Wnq100725 分钟前
当无人机 “飞” 入生活,安全隐患如何破解?
嵌入式硬件·物联网·网络安全·信息与通信·信号处理
无垠的广袤8 分钟前
【启明云端 WT9932S3-Nano 开发板】介绍、环境搭建、工程测试
python·单片机·嵌入式硬件
小李做物联网40 分钟前
【单片机毕业设计】143.1基于单片机stm32塔吊控制反馈物联网嵌入式项目程序开发系统
stm32·单片机·嵌入式硬件·物联网
Jcenav10 小时前
OCXO外围电路设计指南
单片机·嵌入式硬件
Nautiluss10 小时前
一起玩XVF3800麦克风阵列(八)
大数据·人工智能·嵌入式硬件·github·音频·语音识别
神圣的大喵11 小时前
平台无关的嵌入式通用按键管理器
c语言·单片机·嵌入式硬件·嵌入式·按键库
三佛科技-1341638421211 小时前
FT8353系列(FT8353A/B/C/CD/DD/K/KD/PD)隔离型LED恒流驱动IC芯片 典型应用电路
单片机·物联网·智能家居·pcb工艺
无人装备硬件开发爱好者12 小时前
深度解析:STM32 MDK 工程 HEX 文件转 BIN 文件 —— 原理、方法、优缺点与实战指南(中)
stm32·嵌入式软件·hex2bin
阿拉斯攀登12 小时前
嵌入式-硬件基础:了解三极管
单片机·嵌入式硬件·三极管
逐步前行12 小时前
C51_74HC165并口转串口
单片机·51单片机