[STM32F4] printf 错误

[复制链接]
599|13
 楼主| yunfu1117 发表于 2025-5-24 23:06 | 显示全部楼层 |阅读模式
用 STM32CubeIDE开发 STM32f407VET6。在使用 printf () 函数时遇到错误。
调用该函数时,程序将跳转到 HardFault_Handler (void)。
已使用 ITM_SendChar (* ptr ++) ;重定向了函数。
调试时时,程序调用的是 puts 而不是 printf ()。.

powerantone 发表于 2025-5-26 12:41 | 显示全部楼层
检查_write函数是否已正确实现。
flycamelaaa 发表于 2025-5-26 18:00 | 显示全部楼层
检查ITM配置是否有误。
powerantone 发表于 2025-5-26 20:00 | 显示全部楼层
代码中是否误用了puts。在编译器选项中禁用优化。
公羊子丹 发表于 2025-5-27 07:40 | 显示全部楼层
看样子你可能没勾选使用半主机或者 ITM 输出支持,printf 默认行为可能有问题。
周半梅 发表于 2025-5-27 07:41 | 显示全部楼层
会不会是没有打开 SWV 功能?没启动 trace,ITM_SendChar 发不出去就会触发 HardFault。
帛灿灿 发表于 2025-5-27 07:42 | 显示全部楼层
printf() 在某些配置下其实会调用 puts(),这是标准库行为,不用太担心。
童雨竹 发表于 2025-5-27 07:42 | 显示全部楼层
看你用了 ITM_SendChar 重定向,那你是不是也改了 _write() 函数?有可能哪里指针错了。
万图 发表于 2025-5-27 07:43 | 显示全部楼层
检查一下是不是 Debug 配置中没有启用 SWO 输出,或者没选择正确的 Trace IO口。
Wordsworth 发表于 2025-5-27 07:44 | 显示全部楼层
我遇到过类似的,结果是 printf 字符串太长导致溢出崩溃,你试试先打印简单的。
Bblythe 发表于 2025-5-27 07:45 | 显示全部楼层
在 ITM 使用前,记得初始化调试相关的时钟,比如 DBGMCU->CR 开启 SWO trace。
Pulitzer 发表于 2025-5-27 07:45 | 显示全部楼层
我当时也是死在 printf,后来加了 extern int _write(...) 并配合 ITM_SendChar 才搞定。
Uriah 发表于 2025-5-27 07:46 | 显示全部楼层
你试下把 printf 换成 puts 看是否依旧崩溃,有可能是格式化字符串出了问题。
Clyde011 发表于 2025-5-27 07:47 | 显示全部楼层
把断点设置在 _write() 里调试一波,就知道 printf 有没有成功走到那里了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

59

主题

61

帖子

0

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