STM32多串口共用printf打印串口数据

在此声明:文章能够转载,必须注明出处!(文章已被转载屡次,可是写的是原创,令我非常生气)
(1)问题描述:
多串口共用printf函数,百度到的资料大部分是建议从新写一个xx_printf(format, …)。可是使用起来仍是不方便,就此问题而言加上一个判断语句即可解决。
(2)解决方法:
printf函数最后调用的是int fputc(int ch, FILE *f),那么从新改写此函数即可。
(3)代码:web

//标志量定义
int USART_PRINTF_FLAG = 2;//默认串口2

//改写fputc
int fputc(int ch, FILE *f)
{
	if (USART_PRINTF_FLAG == 2)
	{
		while(USART_GetFlagStatus(USART2,USART_FLAG_TC)==RESET);
		USART_SendData(USART2,(uint8_t)ch);
	}
	else
	{
		while(USART_GetFlagStatus(USART1,USART_FLAG_TC)==RESET);
		USART_SendData(USART1,(uint8_t)ch);
	}
	
	return ch;
}

//中断处理
void USART1_IRQHandler(void)
{
	USART_PRINTF_FLAG = 1;
	//your coding here...
}

void USART2_IRQHandler(void)
{
	USART_PRINTF_FLAG = 2;
	//your coding here...
}