[其他ST产品] ubuntu stm32cubeide 中printf 发不出数据

[复制链接]
833|10
 楼主| SocialButterfly 发表于 2025-4-3 22:03 | 显示全部楼层 |阅读模式
在 windows10 中,用iar创建的项目可以用 printf 将字符串发送到串行端口,有PC串口助手接收,但在 ubuntu  stm32cubeide 中,HAL_UART_Transmit可以成功发送字符到PC,但printf 发不出数据。

夜阑风雨 发表于 2025-4-9 01:21 | 显示全部楼层
Ubuntu环境下使用STM32CubeIDE时,printf无法通过串口输出数据,而 HAL_UART_Transmit 可以正常工作,这通常是因为标准库的printf 未正确重定向到 UART

一秒落纱 发表于 2025-4-9 02:10 | 显示全部楼层
STM32CubeIDE 默认使用 NewlibGNU 的标准 C 库),需要手动重定向 _write 函数才能让 printf 输出到串口

暖了夏天蓝了海 发表于 2025-4-9 03:37 | 显示全部楼层
检查你的代码中是否包含类似以下重定向代码并且确保huart1已正确初始化(在 main() 之前调用 MX_USART1_UART_Init()

三生万物 发表于 2025-4-9 04:24 | 显示全部楼层
如果使用其他 UART(如 UART2),需修改句柄(如 &huart2

远山寻你 发表于 2025-4-9 05:42 | 显示全部楼层
STM32CubeIDE 中,Newlib printf 需要链接器支持。如果使用浮点数(如 printf("%f")),需额外启用浮点支持

淡漠安然 发表于 2025-4-9 06:47 | 显示全部楼层
CubeMX中检查UARTTX/RX引脚是否与硬件连接一致(如 PA9/PA10 对应 USART1

光辉梦境 发表于 2025-4-9 07:21 | 显示全部楼层
使用 minicom gtkterm 确保波特率、数据位、停止位与 STM32 配置一致

江河千里 发表于 2025-4-9 08:14 | 显示全部楼层
printf 默认使用行缓冲(\n 触发刷新),如果字符串末尾无换行符,可能不会立即输出

冰春彩落下 发表于 2025-4-9 09:35 | 显示全部楼层
如果堆栈(Stack)设置过小,printf 可能崩溃

别乱了阵脚 发表于 2025-4-9 10:31 | 显示全部楼层
某些情况下,Newlib 会尝试使用半主机(Semihosting)模式,导致 printf 无输出

您需要登录后才可以回帖 登录 | 注册

本版积分规则

57

主题

57

帖子

0

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