首先把库包含进去
#include<stdio.h>
宏定义
//将fputc替换为PUTCHAR_PROTOTYPE
#ifdef __GNUC__
/* With GCC/RAISONANCE, small printf (option LD Linker->Libraries->Small printf
set to 'Yes') calls __io_putchar() */
#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#else
#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#endif /* __GNUC__ */
两个串口使用时可选择
int current_uart_channel = 1; // 默认为串口1
int fputc(int ch, FILE *f){
if(current_uart_channel == 1){
HAL_UART_Transmit(&huart5,(uint8_t*)&ch, 1, 10);
} else if(current_uart_channel == 2){
HAL_UART_Transmit(&huart4,(uint8_t*)&ch, 1, 10);
}
return ch;
}
int fgetc(FILE *f){
uint8_t ch = 0;
if(current_uart_channel == 1){
HAL_UART_Receive(&huart5, &ch, 1, 10);
} else if(current_uart_channel == 2){
HAL_UART_Receive(&huart4, &ch, 1, 10);
}
return (int)ch;
}
// 切换串口通道
void switch_uart_channel(int channel){
if(channel == 1 || channel == 2){
current_uart_channel = channel;
}
}
重定义
PUTCHAR_PROTOTYPE
{
/* Place your implementation of fputc here ??*/
/* e.g. write a character to the EVAL_COM1 and Loop until the end of transmission */
HAL_UART_Transmit(&huart5, (uint8_t *)&ch, 1, 0xFFFF);
HAL_UART_Transmit(&huart4, (uint8_t *)&ch, 1, 0xFFFF);
return ch;
}