對於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);
.....