# Printf 输出配置指南(Ozone 调试) ## 📌 当前状态 你的项目 `printf` 通过 `__io_putchar()` 输出,但该函数是弱定义(未实现),导致: - ❌ **Ozone 调试时看不到任何 printf 输出** - ❌ 验证测试的结果无法查看 --- ## ✅ 解决方案(3种方式) ### 🔹 **方案1: SWO/ITM 输出(推荐)** **优点:** - ✅ Ozone 原生支持,无需额外硬件 - ✅ 不占用任何外设(UART等) - ✅ 实时性好,不影响程序执行 **配置步骤:** #### 1. 编译设置 已创建 `Core/Src/retarget.c` 文件,确保: ```c #define USE_ITM_SWO 1 // 启用 ITM #define USE_UART 0 #define USE_SEMIHOSTING 0 ``` #### 2. Ozone 配置 在 Ozone 中: 1. **Tools** → **Terminal** 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 ```c #define USE_ITM_SWO 0 #define USE_UART 1 // 启用 UART #define USE_SEMIHOSTING 0 ``` 并确保包含正确的头文件: ```c #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. 运行程序 点击 **Go** 或 **F5** 运行程序 ### 5. 查看输出 在 Ozone 底部的 **Terminal** 窗口查看 printf 输出 --- ## 🐛 故障排查 | 问题 | 原因 | 解决方法 | |------|------|---------| | Terminal 窗口无输出 | SWO 未启用 | 检查 Tools→Terminal 配置 | | 乱码 | SWO 速度设置错误 | 调整 SWO Speed | | 仍然无输出 | retarget.c 未编译 | 检查 CMakeLists.txt 是否包含 | | 硬件错误 | SWO 引脚未连接 | 检查调试器连接 | --- ## 📝 CMakeLists.txt 配置 确保 `retarget.c` 被编译: ```cmake # 在 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 ... ``` 如果看不到输出,按照上述步骤逐一检查配置。