一、代码
#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!");
致正在学习嵌入式的小伙伴们:
嵌入式的学习是要基础知识 + 动手实践同步进行的,在这里给大家推荐一个可以系统学习嵌入式和刷题的网站:牛客网(传送门:牛客网)。
牛客网原本是一个刷 IT 题库的网站,经过多年的发展,已经成为了一个集 课程+刷题+面经+求职+讨论区分享 的一站式求职学习网站,最最最重要的里面的资源全部免费, 而最近他们正打算将这套模式推广到嵌入式行业,专门为嵌入式工程师开设了相应的板块,正在学习嵌入式、寻找嵌入式专项题库、想要找嵌入式相关工作但又缺乏经验的小伙伴们,千万不要错过(链接在下面哦)!