在此声明:文章能够转载,必须注明出处!(文章已被转载屡次,可是写的是原创,令我非常生气)
(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... }