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: 超时时间,单位为毫秒。如果在这个时间内数据没有被完全发送,函数将返回错误。
相关推荐
哈泽尔都8 小时前
运动控制教学——5分钟学会PRM算法!
人工智能·单片机·算法·数学建模·贪心算法·机器人·无人机
代码会说话9 小时前
i2c通讯
android·linux·嵌入式硬件·嵌入式
qq_384049039 小时前
stm32第二天之基本定时器
stm32·单片机·嵌入式硬件
国科安芯9 小时前
核辐射检测仪中的抗辐照MCU芯片应用探索与挑战应对
网络·人工智能·单片机·嵌入式硬件·安全·fpga开发
一支闲人10 小时前
带你了解STM32:SPI通信(软件部分)
stm32·单片机·嵌入式硬件·基础知识·适用于新手小白
蜀黍@猿11 小时前
【GD32】MCU选型参考标准
arm开发·单片机·mcu
CiLerLinux12 小时前
第五十五章 ESP32S3 基于MQTT协议连接OneNet物联网开放平台
单片机·嵌入式硬件·物联网
单片机系统设计13 小时前
基于STM32的智能物联网加湿器/智能家居
stm32·单片机·物联网·毕业设计·智能家居
一支闲人14 小时前
带你了解STM32:I2C通信(第二部分)
stm32·单片机·嵌入式硬件·基础知识·适用于新手小白