对于STM32,支持指定某个串口格式化输出,实现如下:
//硬件驱动
#include "usart.h"
#include "delay.h"
//C库
#include <stdarg.h>
#include <string.h>
#include <stdio.h>
void MyUartPrintf(USART_TypeDef *USARTx, char *fmt,...)
{
unsigned char UsartPrintfBuf[296];
va_list ap;
unsigned char *pStr = UsartPrintfBuf;
va_start(ap, fmt);
vsnprintf((char *)UsartPrintfBuf, sizeof(UsartPrintfBuf), fmt, ap); //格式化
va_end(ap);
while(*pStr != 0)
{
USART_SendData(USARTx, *pStr++);
while(USART_GetFlagStatus(USARTx, USART_FLAG_TC) == RESET);
}
}
实际调用:
...
//串口初始化
USART1_Init(115200);
USART2_Init(115200);
....
//串口1格式化输出
MyUartPrintf(USART1, "Hello STM32!%d \r\n", 1234);
//串口2格式化输出
MyUartPrintf(USART2, "Hello STM32!%d \r\n", 1234);
.....