arm/PRINTF_OUTPUT_GUIDE.md

3.7 KiB
Raw Blame History

Printf 输出配置指南Ozone 调试)

📌 当前状态

你的项目 printf 通过 __io_putchar() 输出,但该函数是弱定义(未实现),导致:

  • Ozone 调试时看不到任何 printf 输出
  • 验证测试的结果无法查看

解决方案3种方式

🔹 方案1: SWO/ITM 输出(推荐)

优点:

  • Ozone 原生支持,无需额外硬件
  • 不占用任何外设UART等
  • 实时性好,不影响程序执行

配置步骤:

1. 编译设置

已创建 Core/Src/retarget.c 文件,确保:

#define USE_ITM_SWO       1  // 启用 ITM
#define USE_UART          0
#define USE_SEMIHOSTING   0

2. Ozone 配置

在 Ozone 中:

  1. ToolsTerminal
  2. 勾选 "Enable SWO"
  3. 设置 SWO Speed(通常自动检测)
  4. 选择 ITM Port 0 用于 printf

3. 硬件连接

确保调试器的 SWO 引脚已连接:

  • ST-Link V2: SWO 自动支持
  • J-Link: 需要连接 SWO 线PB3

4. 验证

运行程序后,在 Ozone 的 Terminal 窗口应该能看到:

========================================
     正逆运动学验证测试
========================================
...

🔹 方案2: UART 串口输出

优点:

  • 可以同时用串口助手查看
  • 脱离调试器也能输出

缺点:

  • 占用一个 UART 外设
  • 需要额外的 USB-TTL 模块

配置步骤:

1. CubeMX 配置 UART

arm.ioc 中:

  • 启用 USART1或其他
  • 波特率115200
  • 生成代码

2. 修改 retarget.c

#define USE_ITM_SWO       0
#define USE_UART          1  // 启用 UART
#define USE_SEMIHOSTING   0

并确保包含正确的头文件:

#include "usart.h"  // 根据你的 UART 外设调整

3. 查看输出

  • 使用串口助手(如 PuTTY、Tera Term
  • 波特率115200
  • 连接对应的 COM 口

🔹 方案3: 半主机模式(不推荐)

缺点:

  • 严重降低程序运行速度
  • 每个 printf 都会暂停 CPU

仅适用于简单调试,不推荐在实时控制系统中使用。


🎯 推荐配置(默认已配置)

使用 ITM/SWO 方式,因为:

  1. 不占用外设资源
  2. Ozone 原生支持,配置简单
  3. 实时性好,适合机器人控制

🔧 Ozone 具体操作步骤

1. 打开 SWO 配置

Tools → Terminal

2. 配置 SWO

☑ Enable SWO
  SWO Speed: [Auto]  (或手动设置为系统时钟/2)
  Prescaler: 1

3. 选择 ITM 通道

☑ ITM Port 0  (用于 printf)

4. 运行程序

点击 GoF5 运行程序

5. 查看输出

在 Ozone 底部的 Terminal 窗口查看 printf 输出


🐛 故障排查

问题 原因 解决方法
Terminal 窗口无输出 SWO 未启用 检查 Tools→Terminal 配置
乱码 SWO 速度设置错误 调整 SWO Speed
仍然无输出 retarget.c 未编译 检查 CMakeLists.txt 是否包含
硬件错误 SWO 引脚未连接 检查调试器连接

📝 CMakeLists.txt 配置

确保 retarget.c 被编译:

# 在 CMakeLists.txt 中添加
set(SOURCES
    # ... 其他文件 ...
    Core/Src/retarget.c  # 添加这一行
)

💡 验证是否工作

重新编译并运行后,应该在 Ozone Terminal 看到:

========================================
     正逆运动学验证测试
========================================

测试1: 零位验证
原始关节角度: [0.000, 0.000, 0.000, 0.000, 0.000, 0.000] rad
正运动学位姿: x=0.00, y=0.00, z=530.00 mm
...

如果看不到输出,按照上述步骤逐一检查配置。