一、代码

#include "stdarg.h"
#include "string.h"

void Usart_printf(USART_TypeDef *USARTx, char *fmt, ...)
{
    static unsigned char Usartx_TxBuff[200];
	unsigned int i, length;

	va_list ap; //va_list 可变参数列表,存参数地址

	va_start(ap, fmt); //获取可变参数地址 fmt地址赋给ap

	/*使用参数列表发送格式化输出到字符串,函数功能将可变参数格式化输出到一个字符数组*/
	vsprintf((char *)Usartx_TxBuff, fmt, ap); //fmt中内容赋给Usart3_TxBuff

	va_end(ap); //清空参数列表

	length = strlen((const char *)Usartx_TxBuff);
	while ((USARTx->SR & 0X40) == 0)
		;
	for (i = 0; i < length; i++)
	{
		USARTx->DR = Usartx_TxBuff[i];
		while ((USARTx->SR & 0X40) == 0)
			;
	}
}

调用

// 使用前记得初始化相应的串口
Usart_printf(USART1, "Hello CloudSir!");

二、移植到其他平台

移植到其他单片机只需要更改串口发送函数即可。

#include "stdarg.h"
#include "string.h"

void Usart_printf(int USARTx, char *fmt, ...)
{
    static unsigned char Usartx_TxBuff[200];
	unsigned int i, length;

	va_list ap; //va_list 可变参数列表,存参数地址

	va_start(ap, fmt); //获取可变参数地址 fmt地址赋给ap

	/*使用参数列表发送格式化输出到字符串,函数功能将可变参数格式化输出到一个字符数组*/
	vsprintf((char *)Usartx_TxBuff, fmt, ap); //fmt中内容赋给Usart3_TxBuff

	va_end(ap); //清空参数列表

	length = strlen((const char *)Usartx_TxBuff);
	
    // 此时,Usartx_TxBuff 是要发送的字符串,length是字符串的长度
    // 在这里写串口发送代码,和判断串口号的逻辑代码
    
}

示例:移植到51单片机

#include "stdarg.h"
#include "string.h"

void Usart_printf(int USARTx, char *fmt, ...)
{
    static unsigned char Usartx_TxBuff[200];
	unsigned int i, length;

	va_list ap; //va_list 可变参数列表,存参数地址

	va_start(ap, fmt); //获取可变参数地址 fmt地址赋给ap

	/*使用参数列表发送格式化输出到字符串,函数功能将可变参数格式化输出到一个字符数组*/
	vsprintf((char *)Usartx_TxBuff, fmt, ap); //fmt中内容赋给Usart3_TxBuff

	va_end(ap); //清空参数列表

	length = strlen((const char *)Usartx_TxBuff);
	
    // 此时,Usartx_TxBuff 是要发送的字符串,length是字符串的长度
    // 在这里写串口发送代码,和判断串口号的逻辑代码
    if(USARTx == 1)
    { // 如果是串口1,调用串口1的发送代码
        for (i = 0; i < length; i++)
        {
            SBUF = Usartx_TxBuff[i];
            while(!TI);//等待发送完毕
            TI = 0;
        }
    } 
    else if(USARTx == 2)
    { // 如果是串口2
        // 51只有一个串口,这里只是做一个示范
    }

}

调用

Usart_printf(1, "Hello CloudSir!");
Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐