打印
[开发工具]

STM32CubeIDE. Gcc 优先级的问题

[复制链接]
277|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
内核558|  楼主 | 2025-3-14 21:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
unsigned char readKey (void){
        volatile unsigned char keyValue=HAL_GPIO_ReadPin (KEY_GPIO_Port, KEY_Pin);
       if (0 == keyValue)
       {
                printf ("before delay\r\n");
               HAL_Delay (10);
               keyValue=HAL_GPIO_ReadPin (KEY_GPIO_Port, KEY_Pin);
                if (0 == keyValue)
               {
                       printf ("after delay\r\n");
                        return 1;
               }
       }
       return 0;
}
以上代码在 keil 中是正常打印。但是 STM32CubeIDE 无法打印字符。优化级别是 -O0。

使用特权

评论回复
沙发
公羊子丹| | 2025-3-15 07:49 | 只看该作者
STM32CubeIDE 里 printf 需要重定向,你确认 printf 是正确输出到串口的吗?试试 HAL_UART_Transmit 看能不能打印?

使用特权

评论回复
板凳
周半梅| | 2025-3-15 07:50 | 只看该作者
Keil 可能默认帮你做了 printf 的重定向,而 CubeIDE 需要手动配置,你可以检查 _write 函数是否正确实现。

使用特权

评论回复
地板
Wordsworth| | 2025-3-15 07:52 | 只看该作者
你在 STM32CubeIDE 里用 ITM_SendChar 试过吗?有时候 ITM 调试比 printf 直接输出更稳定。

使用特权

评论回复
5
Bblythe| | 2025-3-15 07:53 | 只看该作者
试试看 printf("before delay\n\r");,CubeIDE 里有些终端可能对 \r\n 处理不同。

使用特权

评论回复
6
Pulitzer| | 2025-3-15 07:54 | 只看该作者
你可以试试 setvbuf(stdout, NULL, _IONBF, 0); 关掉 printf 缓冲,看看能不能正确打印。

使用特权

评论回复
7
帛灿灿| | 2025-3-15 07:55 | 只看该作者
你可以试试在 printf 之前加 fflush(stdout);,有时候缓冲问题会导致 CubeIDE 里 printf 失效。

使用特权

评论回复
8
Uriah| | 2025-3-15 07:56 | 只看该作者
你用的是 HAL_UART_Transmit 还是 printf?如果是 printf,检查下 retarget.c 里 _write 函数是不是正确的。

使用特权

评论回复
9
Clyde011| | 2025-3-15 07:58 | 只看该作者
试着换个 UART 波特率,CubeIDE 里 printf 可能会受到 UART 配置的影响,比如 FIFO 处理问题。

使用特权

评论回复
10
童雨竹| | 2025-3-15 07:59 | 只看该作者
你的 printf 是输出到 SWO 还是串口?如果是 SWO,CubeIDE 里需要在 debug 配置里打开 SWO 监听。

使用特权

评论回复
11
万图| | 2025-3-15 08:00 | 只看该作者
HAL_Delay(10); 这个地方可能会影响中断处理,试试 osDelay 或者直接用个循环延时看看会不会影响 printf?

使用特权

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

本版积分规则

10

主题

10

帖子

0

粉丝