打印

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

[复制链接]
2119|15
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
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

使用特权

评论回复
5
b5z1giu| | 2024-6-26 12:50 | 只看该作者
是不是没有勾选microlib啊?

使用特权

评论回复
6
t1ngus4| | 2024-6-26 13:55 | 只看该作者
这个如果你使用printf函数通过串口打印信息,需要确保串口已经正确初始化

使用特权

评论回复
7
ex7s4| | 2024-6-26 15:06 | 只看该作者
你需要设置串口的波特率、数据位、停止位和校验位等参数,并打开串口使能

使用特权

评论回复
8
p0gon9y| | 2024-6-26 16:10 | 只看该作者
未正确配置printf函数:在一些嵌入式系统中,printf函数需要正确配置才能通过串口打印信息

使用特权

评论回复
9
脚后跟| | 2024-6-26 16:58 | 只看该作者
GD32 Embedded Builder  只能生成GCC编译的工程 吗。。不能生成MDK的工程吗

使用特权

评论回复
10
q1d0mnx| | 2024-6-26 17:24 | 只看该作者
建议你在代码中实现一个适配器函数,将printf函数的输出重定向到串口输出

使用特权

评论回复
11
su1yirg| | 2024-6-26 18:33 | 只看该作者
如果你的嵌入式系统内存较小,可能会出现内存不足的情况,导致printf函数无法正常工作。确保你的系统有足够的内存来支持printf函数的操作

使用特权

评论回复
12
liu96jp| | 2024-6-27 08:25 | 只看该作者
如果printf函数在中断中被调用,需要确保中断的优先级设置正确,以免影响printf函数的正常执行

使用特权

评论回复
13
y1n9an| | 2024-6-27 09:12 | 只看该作者
如果你的printf函数中包含了浮点数的打印,需要确保你的编译器和printf函数库支持浮点数打印

使用特权

评论回复
14
g0d5xs| | 2024-6-27 10:09 | 只看该作者
你想打印什么?我觉得最初应该配置好串口才行

使用特权

评论回复
15
lix1yr| | 2024-6-27 12:14 | 只看该作者
你可以用调试工具抓个串口的数据啊,看看发的是什么

使用特权

评论回复
16
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;
}

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

4

帖子

0

粉丝