对于 printf() 函数我们并不陌生,初学C语言使用的第一个函数,其作用是在终端打印显示格式化字符串。
但是如果我们使用的是单片机运行C语言代码,如果不经任何修改直接使用 printf() 函数,结果是什么现象都没有。要想使用这个函数,常规方法是重定向 printf() 函数,结合串口来打印到串口助手上位机。这里的重定向就非常复杂了,你需要懂 printf() 函数内部实现机制。。。。。(参考正点原子的例程,本人表示看不懂太多太复杂了)
接下来我介绍一种特别简单的方法,让你不需要重定向 printf() 函数也可以实现相似的功能,就是那种%d,%f,%c。。。各种格式控制符的功能,我们想用这个函数大半原因就是为了这些功能。只要在合适的地方添加以下语句即可:
#define _DEBUG_ 1 //串口打印宏函数开关,1是开,0是关,调试的时候开,调式完毕就可以一键关闭
uint8_t USART_TX_BUF[200]; //发送缓冲,最大200字节,不能太小,如果你的内容太长会访问非法内存
#if _DEBUG_
#define ps(...) HAL_UART_Transmit(&huart1,USART_TX_BUF,sprintf((char *)USART_TX_BUF,__VA_ARGS__),1000)//可修改到其他串口
#else
#define ps(...)
#endif
以上代码表示用 ps() 这个宏函数代替HAL库的串口发送函数,并且可以使用格式控制符%c,%d,%f,\r,\n等可变参数控制符。
ps()宏函数使用方法如下:
while (1)
{
num++;
ps("串口打印宏函数 \r\n");//无参数打印,\r\n表示换行
ps("num = %d \r\n",num);//含参数%d
HAL_Delay(500);
}
串口助手打印情况: