求助 GD32 Embedded Builder printf函数打印失败

[复制链接]
4321|19
 楼主| zdfdy 发表于 2024-6-12 11:32 | 显示全部楼层 |阅读模式
用GD32 Embedded Builder 直接生成的GD32f310工程,printf打印串口没有输出信息,int fputc(int ch, FILE *f)
{
    usart_data_transmit(EVAL_COM, (uint8_t)ch);
    while(RESET == usart_flag_get(EVAL_COM, USART_FLAG_TBE));
    return ch;
}
printf("\r\nCK_SYS is %d", rcu_clock_freq_get(CK_SYS));没有输出,点灯和按键响应正常


FranklinUNK 发表于 2024-6-20 18:01 | 显示全部楼层
有没有重定义printf啊
NorSensor 发表于 2024-6-20 18:16 | 显示全部楼层
请问解决了吗?我也遇到了同样的问题
NorSensor 发表于 2024-6-21 10:01 | 显示全部楼层
代码中增加如下代码,编译器GCC和ARM的差异问题
#if 1
#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__ */

/* retarget the C library printf function to the USART */
PUTCHAR_PROTOTYPE
{
    /* Place your implementation of fputc here */
    /* e.g. write a character to the USART */
        usart_data_transmit(USART1, (uint8_t)ch);
    /* Loop until transmit data register is empty */
        while(RESET == usart_flag_get(USART1, USART_FLAG_TBE));
        return ch;
}

#endif
b5z1giu 发表于 2024-6-26 12:50 | 显示全部楼层
是不是没有勾选microlib啊?
t1ngus4 发表于 2024-6-26 13:55 | 显示全部楼层
这个如果你使用printf函数通过串口打印信息,需要确保串口已经正确初始化
ex7s4 发表于 2024-6-26 15:06 | 显示全部楼层
你需要设置串口的波特率、数据位、停止位和校验位等参数,并打开串口使能
p0gon9y 发表于 2024-6-26 16:10 | 显示全部楼层
未正确配置printf函数:在一些嵌入式系统中,printf函数需要正确配置才能通过串口打印信息
脚后跟 发表于 2024-6-26 16:58 | 显示全部楼层
GD32 Embedded Builder  只能生成GCC编译的工程 吗。。不能生成MDK的工程吗
q1d0mnx 发表于 2024-6-26 17:24 | 显示全部楼层
建议你在代码中实现一个适配器函数,将printf函数的输出重定向到串口输出
su1yirg 发表于 2024-6-26 18:33 | 显示全部楼层
如果你的嵌入式系统内存较小,可能会出现内存不足的情况,导致printf函数无法正常工作。确保你的系统有足够的内存来支持printf函数的操作
liu96jp 发表于 2024-6-27 08:25 | 显示全部楼层
如果printf函数在中断中被调用,需要确保中断的优先级设置正确,以免影响printf函数的正常执行
y1n9an 发表于 2024-6-27 09:12 | 显示全部楼层
如果你的printf函数中包含了浮点数的打印,需要确保你的编译器和printf函数库支持浮点数打印
g0d5xs 发表于 2024-6-27 10:09 | 显示全部楼层
你想打印什么?我觉得最初应该配置好串口才行
lix1yr 发表于 2024-6-27 12:14 | 显示全部楼层
你可以用调试工具抓个串口的数据啊,看看发的是什么

arm小小白 发表于 2024-10-27 12:58 | 显示全部楼层
GD32F303RET6芯片,重定向函数如下,就可以使用printf函数正常输出了。在firmware/cmsis/src/syscalls.c 中 有定义 extern int __io_putchar(int ch) __attribute__((weak));  
int __io_putchar(int ch)
{
        usart_data_transmit(USART0, (uint8_t)ch);
            while(RESET == usart_flag_get(USART0, USART_FLAG_TBE));

            return ch;
}
probedog 发表于 2025-2-27 12:07 | 显示全部楼层
检查是否有任何物理连接问题,如引脚弯曲、焊接不良等。
probedog 发表于 2025-2-27 12:07 | 显示全部楼层
检查电源和复位
xdvca 发表于 2025-2-27 13:08 | 显示全部楼层
如果串口初始化没有正确配置,数据无法通过串口发送。
东方条纹响尾蛇 发表于 2025-3-7 01:22 | 显示全部楼层
一定要在输出的语句里面加上 \n 或是 \r\n,不然printf不会输出。整了差不多两天,真的有点坑。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

5

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部