[开发工具] STM32CubeIDE. Gcc 优先级的问题

[复制链接]
663|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 直接输出更稳定。
Bblythe 发表于 2025-3-15 07:53 | 显示全部楼层
试试看 printf("before delay\n\r");,CubeIDE 里有些终端可能对 \r\n 处理不同。
Pulitzer 发表于 2025-3-15 07:54 | 显示全部楼层
你可以试试 setvbuf(stdout, NULL, _IONBF, 0); 关掉 printf 缓冲,看看能不能正确打印。
帛灿灿 发表于 2025-3-15 07:55 | 显示全部楼层
你可以试试在 printf 之前加 fflush(stdout);,有时候缓冲问题会导致 CubeIDE 里 printf 失效。
Uriah 发表于 2025-3-15 07:56 | 显示全部楼层
你用的是 HAL_UART_Transmit 还是 printf?如果是 printf,检查下 retarget.c 里 _write 函数是不是正确的。
Clyde011 发表于 2025-3-15 07:58 | 显示全部楼层
试着换个 UART 波特率,CubeIDE 里 printf 可能会受到 UART 配置的影响,比如 FIFO 处理问题。
童雨竹 发表于 2025-3-15 07:59 | 显示全部楼层
你的 printf 是输出到 SWO 还是串口?如果是 SWO,CubeIDE 里需要在 debug 配置里打开 SWO 监听。
万图 发表于 2025-3-15 08:00 | 显示全部楼层
HAL_Delay(10); 这个地方可能会影响中断处理,试试 osDelay 或者直接用个循环延时看看会不会影响 printf?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

52

主题

52

帖子

0

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