欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

任意串口重定向,实现数据打印

程序员文章站 2024-03-17 12:16:46
...
#include "string.h"     //包含头文件
#include "stdarg.h"      
#include "stdio.h"

#define USART1_REC_LEN  250
u8  USART1_PRINTF_Buffer[USART1_REC_LEN];//Usart1_printf发送缓冲区

void Usart1_printf(char* fmt,...)
{
    u16 i,j;
    va_list ap;
    va_start(ap,fmt);    //
    vsprintf((char*)USART1_PRINTF_Buffer,fmt,ap);
    va_end(ap);
    i=strlen((const char*)USART1_PRINTF_Buffer);//计算数据长度
    for(j=0;j<i;j++)//循环发送数据
    {
        USART_SendData(USART1, (uint8_t) USART1_PRINTF_Buffer[j]);   //发送单字节
        while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET) {}  
    }
}
//参考了STM32 USB转虚拟串口的打印重定向
//(1)首先在函数里定义一具VA_LIST型的变量,这个变量是指向参数的指针;
//(2)然后用VA_START宏初始化刚定义的VA_LIST变量;
//(3)然后用VA_ARG返回可变的参数,VA_ARG的第二个参数是你要返回的参数的类型(如果函数有多个可变参数的,依次调用VA_ARG获取各个参数);
//(4)最后用VA_END宏结束可变参数的获取。
相关标签: 通讯