【嵌入式 · 单片机 · STM32 · C51】多串口共用printf
STM32 中多串口共用 printf 的代码,可以很方便地移植到51单片机等其他平台。
·
一、代码
#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!");
更多推荐
所有评论(0)