嵌入式学习小组
直播中

申换换

8年用户 1560经验值
私信 关注

NDA102EC1中更改UUART1作为调试串口打印输出调试信息未能成功的原因?

参考网上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_port
OK,可以在主函数中放心使用printf()向UUART1端口打印输出调试信息了。


回帖(1)

杨秀英

2024-1-4 17:49:05
因此,问题可能出在使用了错误的函数重定向方法,或者在没有正确配置UUART1模块的时候直接使用了printf()函数,导致没有输出到调试串口。建议检查当前使用的重定向方法是否适用于UUART1模块,同时确认UUART1模块的初始化配置正确。可以参考相关文档或者从硬件逐步调试的角度进行排查。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分