参考网上STM32修改fputc(int ch, FILE *f),把串口打印函数printf()重定向到UUART1模块的端口输出,最终未成功。
但循着类似解决问题的思路,直接在工程中查找有关printf()函数和fputc()函数的定义位置。
最终发现printf()函数在stdio.h头文件中定义,属于标准C的定义,无价值...
发现fputc()函数在retarget.c文件中定义: int fputc(int ch, FILE *stream){ SendChar(ch); return ch;}进一步对SendChar()剥皮,发现在retarget.c文件中定义。而retarget.c文件就是NDA102EC1 Series Debug Port and Semihost Setting Source File。
确认找对地方了,对retarget.c文件中的宏定义逐个排查,最终确认DEBUG_PORT就是定义的UUART端口。反向查找发现在system_NDA102EC1Series.h头文件开始部分: /* Using UART0 or UART1 */#define DEBUG_PORT UUART0//#define DEBUG_PORT UUART1修改DEBUG_PORT指向UUART1: /* Using UART0 or UART1 *///#define DEBUG_PORT UUART0#define DEBUG_PORT UUART1 //2019-11-23 revise UUART1 as debug_portOK,可以在主函数中放心使用printf()向UUART1端口打印输出调试信息了。
|