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: 超时时间,单位为毫秒。如果在这个时间内数据没有被完全发送,函数将返回错误。
相关推荐
不悔哥5 天前
开源OV-Watch:怎么做一个智能手表
单片机·开源·嵌入式
XiHongShi20165 天前
STM32F407 RTC定时器例程,建议保存
stm32·单片机·学习
优信电子5 天前
AIT1001 非接触式红外测温模块 STM32 驱动开发实战:从引脚到代码全解析
stm32·嵌入式·温度传感器·红外测温·非接触式测温·ait1001
深圳老胡5 天前
STM32F407 控制 L6470 步进电机驱动 —— 控制过程简介
笔记·stm32·单片机·嵌入式硬件·代码规范
wuyk5555 天前
《WiFi 嵌入式物联网开发全套实战》| 第 16 章 ESP32 AP+STA 双模共存原理与工程坑点
网络·stm32·物联网
女神下凡5 天前
嵌入式设计的各种存储芯片的硬件/软件设计规范,非常全面。
arm开发·单片机·嵌入式硬件
梅梅9665 天前
一款mipi转lvds的lcd调试(LT8912B)
单片机·计算机外设·电脑·显示器·pd芯片
开发笔记-阿牛5 天前
蓝牙音乐灯拆解,又一次拆到蓝牙音乐灯芯片CK6865L
人工智能·单片机·嵌入式硬件·音视频·音频
从零开始的嵌入式之旅5 天前
day47
arm开发·经验分享·笔记·嵌入式硬件
恒锐丰科技林技术员5 天前
EG1164 高压大电流升压同步整流芯片解析
经验分享·嵌入式硬件·硬件工程