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: 超时时间,单位为毫秒。如果在这个时间内数据没有被完全发送,函数将返回错误。
相关推荐
Wallace Zhang15 分钟前
STM32 - Embedded IDE - GCC - 显著减少固件的体积
stm32·单片机·嵌入式硬件
fengfuyao98511 小时前
STM32如何定位HardFault错误,一种实用方法
stm32·单片机·嵌入式硬件
爱学习的颖颖11 小时前
EXTI外部中断的执行逻辑|以对射式红外传感器计次为例
单片机·嵌入式硬件·exti中断
keer_zu12 小时前
STM32L051 RTC闹钟配置详解
stm32·嵌入式硬件
AI精钢13 小时前
H20芯片与中国的科技自立:一场隐形的博弈
人工智能·科技·stm32·单片机·物联网
etcix16 小时前
implement copy file content to clipboard on Windows
windows·stm32·单片机
谱写秋天16 小时前
在STM32F103上进行FreeRTOS移植和配置(STM32CubeIDE)
c语言·stm32·单片机·freertos
globbo19 小时前
【嵌入式STM32】I2C总结
单片机·嵌入式硬件
玖別ԅ(¯﹃¯ԅ)20 小时前
SysTick寄存器(嘀嗒定时器实现延时)
stm32·单片机·嵌入式硬件
limitless_peter20 小时前
集成运算放大器(反向比例,同相比例)
嵌入式硬件·硬件工程