# 多多盒子助手 J-link RTT实时助手 串口助手 **Repository Path**: momingchuan/duo-duo-box ## Basic Information - **Project Name**: 多多盒子助手 J-link RTT实时助手 串口助手 - **Description**: 可以显示波形图,还有更多的功能!请关注后续更新。 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 43 - **Forks**: 5 - **Created**: 2025-09-05 - **Last Updated**: 2026-05-03 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 多多盒子助手 -V 1.2.2 - **如果这个项目对你有帮助,请给我们一个 ⭐ 星标!** - **短期内会继续更新请期待,欢迎广大工程师积极留言反馈BUG,任何问题都可在Gitee网站的Issues留言反馈** - **预计下次更新在2026年6月左右** ​ 更新预告: 1、考虑增加ST-link。 3、修复已知BUG ## 介绍 🌟 特性概览 📊 **智能数据分析与可视化** - **10通道实时波形显示** - 支持动态缩放和拖拽操作 - **自定义缓冲管理** - 可配置数据缓冲区大小,智能内存优化 - **实时统计分析** - 最大值、最小值、平均值和标准差计算显示 - **曲线增益调节** - 各通道独立增益和偏置调整 🔌 **多协议多设备支持** - **串口调试** - 完整串口参数配置(波特率、数据位、校验位等) - **J-Link** - 支持RTT实时数据传输 - **多窗口并行** - 同时打开多个串口和J-Link设备窗口 - **设备独立管理** - 每个窗口独立运行,互不干扰 🌍 **国际化与编码支持** - **多语言界面** - 完整中英文界面切换 - **多编码解析** - UTF-8、GBK、ASCII等多种字符编码支持 - **智能编码识别** - 自动检测和转换不同编码格式 ⚡ **高效数据处理** - **智能内存管理** - 自动数据清理防止内存溢出 - **数据导出** - 支持TXT、CSV等多种格式导出 - **历史记录** - 完整的发送历史记录和快速重发 - **周期发送** - 可配置自动循环发送 ### 主界面 ![输入图片说明](%E5%9B%BE%E7%89%87/%E4%B8%BB%E9%A1%B5%E9%9D%A2.png) ## 安装教程 **1、打开文件夹:** ![输入图片说明](%E5%9B%BE%E7%89%87/%E6%89%93%E5%BC%80%E6%96%87%E4%BB%B6%E5%A4%B9image.png) **2、启动软件:** ![输入图片说明](%E5%9B%BE%E7%89%87/%E5%90%AF%E5%8A%A8%E8%BD%AF%E4%BB%B6image.png) ## 使用说明 #### J-link使用说明 如果使用j-link 则安装J-link驱动,如果已经安装过J-link驱动了则不用安装,但是为了避免可能出现未知的错误问题,还是强烈建议安装此版本的J-link驱动程序。 ![输入图片说明](%E5%9B%BE%E7%89%87/%E5%AE%89%E8%A3%85J-link%E9%A9%B1%E5%8A%A811zon_created-GIF%20(4).gif) J_Link的的数据传输速度可达多少? ![输入图片说明](%E5%9B%BE%E7%89%87/Jlink%E9%80%9F%E5%BA%A6%E5%9B%BE.jpg) 从上图可见,RTT的传输速度可达1us传输82个字符,这速度还是相当可观的。 > 测试条件:STM32F407 Cortex-M4,时钟168M 还有一组RTT的传输速度曲线可供参考。 ![输入图片说明](%E5%9B%BE%E7%89%87/J-link%E5%92%8C%E5%85%B6%E4%BB%96%E6%8E%A5%E5%8F%A3%E6%AF%94%E8%BE%83%E9%80%9F%E5%BA%A6%E5%9B%BE.png) ##### RTT工程移植 ![输入图片说明](%E5%9B%BE%E7%89%87/%E7%A7%BB%E6%A4%8D%E5%88%B0%E8%87%AA%E5%B7%B1%E7%9A%84keil%E5%B7%A5%E7%A8%8Bimage.png) ![输入图片说明](%E5%9B%BE%E7%89%87/%E5%A2%9E%E5%8A%A0%E5%A4%B4%E6%96%87%E4%BB%B6image.png) ![输入图片说明](%E5%9B%BE%E7%89%87/Keil%E5%B7%A5%E7%A8%8B%E4%BB%A3%E7%A0%81%E9%85%8D%E7%BD%AEimage.png) #### 上行/下行缓冲区配置 > Note: > 如何手动配置RTT上行/下行缓冲区? > **核心函数:** ``` SEGGER_RTT_ConfigUpBuffer(unsigned BufferIndex, const char* sName, void* pBuffer, unsigned BufferSize, unsigned Flags) SEGGER_RTT_ConfigDownBuffer(unsigned BufferIndex, const char* sName, void* pBuffer, unsigned BufferSize, unsigned Flags) ``` > **读取函数** ``` unsigned SEGGER_RTT_Read(unsigned BufferIndex, void* pBuffer, unsigned BufferSize) ``` > 用途:用于创建自定义的上行(MCU到调试器)或下行(调试器到MCU)通道,替换默认的0号通道。 > **配置步骤:** > 定义缓冲区:声明静态字符数组作为数据缓冲区。 > 调用配置函数:在初始化阶段配置缓冲区。 > **指定通道参数:** > BufferIndex:通道索引(0为默认通道,1及以上为用户自定义通道)。 > sName:通道标识名。 > pBuffer:缓冲区地址。 > BufferSize:缓冲区大小。 > Mode:缓冲模式(如SEGGER_RTT_MODE_NO_BLOCK_SKIP非阻塞跳过模式)。 > **RTT缓冲区大小的根本限制:** > *RTT缓冲区直接占用MCU的RAM,调试器只是读取该内存区域。 > 因此,缓冲区最大尺寸的硬性上限是您愿意且能够从MCU总RAM中划拨出的空间。* > MCU型号总RAM容量 > 建议的RTT缓冲区大小 > STM32G473​ 128 KB SRAM > 可轻松配置 32KB 或 64KB > STM32F407​ 192 KB RAM > 通常可用 64KB ~ 100KB > STM32H743​ 512 KB DTCM RAM > 可配置高达几百KB > **总结与使用建议** > 配置流程:先根据您的调试输出数据量需求。 > 尺寸规划:在规划缓冲区大小时,必须首要考虑硬件限制,即根据您的MCU型号和应用程序已占用的RAM,评估剩余可用空间,并据此设置一个合理的缓冲区大小,避免导致系统内存不足。 ## 图表 ### 图表帧格式 显示波形图发送数据格式,最大显示10个通道数据。 "ch:1,2,3,4,5,6,7,8,9,10\n" 数字1表示通道1的数据 数字2表示通道2的数据 数字3表示通道3的数据 数字4表示通道4的数据 数字5表示通道5的数据 数字6表示通道6的数据 数字7表示通道7的数据 数字8表示通道8的数据 数字9表示通道9的数据 数字10表示通道10的数据 一帧数据后面一定要加换行符‌,否则图标显示不出来。 例如显示通道1波形图: "ch:65\n" "ch:71\n" "ch:80\n" ``` int buffer[3]={65,71,80}; SEGGER_RTT_printf(0, "ch:%d\n",buffer[0]); SEGGER_RTT_printf(0, "ch:%d\n",buffer[1]); SEGGER_RTT_printf(0, "ch:%d\n",buffer[2]); ``` 例如显示通道1和通道2波形图: "ch:65,30\n" "ch:60,40\n" "ch:80,50\n" ``` int buffer1[3]={65,60,80}; int buffer2[3]={30,40,50}; SEGGER_RTT_printf(0, "ch:%d,%d\n",buffer1[0],buffer2[0]); SEGGER_RTT_printf(0, "ch:%d,%d\n",buffer1[1],buffer2[1]); SEGGER_RTT_printf(0, "ch:%d,%d\n",buffer1[2],buffer2[2]); ``` > Note: > > 1. **RTT目前只支持0通道,不支持其他通道**。这意味着你只能调用SEGGER_RTT_printf(0, "test\n")发送数据,而不能调用SEGGER_RTT_printf(1,"test\n")去发送数据。 ### 波形图 波形图是一种以时间为横轴、数据值为纵轴,动态展示数据变化趋势的可视化图表。它能够清晰呈现信号在连续时间点上的波动情况,是观察数据实时变化、分析周期性或趋势性规律的理想工具。 在本软件中,波形图支持最多10个通道的数据并行显示。您可以通过右侧面板独立控制每个通道的颜色、线宽、散点显示及可见性。 图表会为每个通道实时计算并更新关键统计信息,包括最大值、最小值、平均值和标准差。标准差是衡量数据离散程度的核心指标,其值越小,表明该通道的数据越稳定,波动性越低。 ![输入图片说明](%E5%9B%BE%E7%89%87/%E6%B3%A2%E5%BD%A2%E5%9B%BE%E5%8A%A8%E5%9B%BE.gif) #### 卡尺测量 - 鼠标双击数据点可以使用数据测量卡尺功能,一组测量最多可以选中3个点,最多可以设置10组测量卡尺,右键弹出菜单可取消测量卡尺标签信息。 ![输入图片说明](%E5%9B%BE%E7%89%87/%E6%B5%8B%E9%87%8F%E5%8D%A1%E5%B0%BA.png) #### 数据框选 可以使用鼠标框线指定数据统计数据信息,选择《数据框选》功能,鼠标移动到指定的数据区域,鼠标按住左键不放可对数据进行选中。 ![输入图片说明](%E5%9B%BE%E7%89%87/%E6%95%B0%E6%8D%AE%E6%A1%86%E9%80%89.gif) ### 直方图 ​ (柱状图也称直方图)是一种用于展示数据分布情况的可视化图表。它将数据范围划分为若干个连续的区间(称为“柱”或“箱”),并统计落入每个区间的数据点数量,最终以柱子的高度直观呈现。 在数据分析中,直方图常用于观察数据的概率分布、集中趋势和离散程度,是初步判断数据是否符合正态分布等重要统计特性的有力工具。 本软件的直方图功能支持多通道数据实时显示与分析。您可以使用右侧面板独立控制每个通道的颜色、柱子宽度和可见性。 图表会实时计算并显示各通道数据的统计信息,包括最大值、最小值、平均值和标准差。标准差是衡量数据波动大小的关键指标,其值越小,表明数据越集中在平均值附近。 **使用建议:** 观察直方图的整体形状。若图形呈现中间高、两侧逐渐降低且大致对称的“钟形”曲线,则数据可能接近正态分布。 您可通过调整X轴范围、柱子宽度来聚焦于特定数据区间,从而更清晰地分析其分布特征。结合统计面板提供的具体数值(如平均值和标准差),可以更科学地评估数据的稳定性和一致性。 #### 核心工作原理 **参数配置:** 柱子个数:20 X轴统计范围:X轴下限 = 0,X轴上限 = 1000 柱子总数: 0到1000有20个柱子 数据处理逻辑: 第一帧数据到达:"ch:10,32,18" 数值10:10 ÷ 5 = 2 → 第2个柱子计数加1 数值32:32 ÷ 5 = 6.4(向下取整为6)→ 第7个柱子计数加1 数值18:18 ÷ 5 = 3.6(向下取整为3)→ 第4个柱子计数加1 当前统计结果:柱子2=1,柱子7=1,柱子4=1 第二帧数据到达:"ch:10,3,3"(假设采用滑动窗口机制,保留最近N个数据点) 数值10:10 ÷ 5 = 2 → 第2个柱子计数加1(累计:柱子2=2) 数值3:3 ÷ 5 = 0.6(向下取整为0)→ 第1个柱子计数加1 数值3:3 ÷ 5 = 0.6(向下取整为0)→ 第1个柱子计数再加1 如果数据窗口已满(上限缓冲),则移除最早的一帧数据"ch:10,32,18": 移除数值10:第2个柱子计数减1(累计:柱子2=1) 移除数值32:第7个柱子计数减1(累计:柱子7=0) 移除数值18:第4个柱子计数减1(累计:柱子4=0) 最终统计结果:柱子1=2,柱子2=1,柱子4=0,柱子7=0 ![输入图片说明](%E5%9B%BE%E7%89%87/%E7%9B%B4%E6%96%B9%E5%9B%BE%E5%8A%A8%E5%9B%BE.gif) ### 频谱图 **1. 频谱图是什么?** 频谱图用于把时域信号转换到频域进行观察 **(傅里叶变换)** 。平时我们看到的波形图,是信号随时间变化的曲线,也就是“时域”。频谱图则是把这段信号分解成不同频率成分后,显示每个频率分量的强弱,也就是“频域”。 简单理解: 波形图回答的是:信号什么时候变大、什么时候变小 频谱图回答的是:信号里主要包含哪些频率成分,它们各有多强 如果你想知道一个信号是不是有主频、谐波、杂波、噪声、周期性干扰,频谱图会比波形图更直观。 **2. 频谱图有什么用** 频谱图主要适合这些场景: 查看信号主频 1、分析周期信号的频率成分 2、查看高频噪声、杂散分量 3、对比不同通道的频率分布 4、判断机械振动、电机转速、传感器周期输出是否正常 5、观察某个频率附近的能量是否异常增大 6、辅助定位串口/J-Link 采集数据中的周期干扰问题 **常见例子:** 一个正弦波在频谱图里通常会出现一个明显尖峰方波除了基频,还会出现一系列谐波噪声信号通常表现为大范围铺开的频谱底噪有固定干扰时,会在某几个频率位置出现稳定突起。 **采样率和 Δt 的作用** 频谱分析是否准确,和采样率密切相关。软件里通过输入每包数据时间间隔 Δt 来换算采样率。 Δt 越小,采样越快,采样率越高,可分析的最高频率越高,如果 Δt 设置不正确,会直接影响: 1、频率轴显示是否正确 2、主频位置是否准确 3、整个频谱结果是否可信 **重点公式:** **1 / Δt(ms) = 信号采样率 Hz** 如果的你信号采样率是1000Hz,1/1000 = 0.001s,则你Δt=1ms,Δt就填 1 如果的你信号采样率是20kHz,1/20000 = 0.00005s 则你Δt=0.05ms,Δt就填 0.05 ![输入图片说明](%E5%9B%BE%E7%89%87/%E9%A2%91%E8%B0%B1%E5%9B%BE.gif) ### 图表移出主窗口操作 鼠标左键按住窗口标签拖动出去就可以了。 ![输入图片说明](%E5%9B%BE%E7%89%87/%E5%9B%BE%E8%A1%A8%E7%A7%BB%E5%8A%A8%E5%87%BA%E6%82%AC%E6%B5%AE%E7%AA%97%E5%8F%A3%E6%93%8D%E4%BD%9C.gif) ## 错误 ### PARSE 0x0000 数据解析错误 **PARSE 表示数据解析错误** **0x0000:十六进制错误码,用于标识具体错误类型** 错误码 | 错误名称 | 中文说明 | 常见原因 ---- | ----- | ------ | ------- 0x0001 | 数据过短 | 接收到的数据长度不足 |数据被截断、传输不完整 0x0002 | 缺少换行符 | 数据行末尾缺少换行符 |数据格式错误 0x0004 | 无效前缀 | 数据前缀不是"ch:" |数据源错误、协议不匹配 0x0008 | 帧头后为空 | "ch:"前缀后没有数据 |数据格式错误 0x0010 | 数据过长 | 数据部分超过200字符 |数据异常、缓冲区溢出 0x0020 | 空通道数据 | 某个通道的数据为空 |数据格式错误 0x0040 | 无效数字格式 | 通道数据不是有效浮点数 |数据包含非数字字符 0x0080 | 转换失败 | 字符串到浮点数转换失败 |数据格式异常 0x0100 | 数值超范围 | 数值超出合理范围 |传感器异常、数据错误 ### SEND 0x0000 发送数据错误 **SEND 表示发送数据错误** **0x0000 十六进制错误码,用于标识具体错误类型** 错误码 | 错误名称 | 中文说明 | 常见原因 ---- | ----- | ------ | ------- 0x0001 | 发送数据错误 | 当在使用J-link发送数据的时候,由于下位机设备没有及时读取数据导致发送错误。状态栏会显示已成功发送的字节数。 |上位机发送太快下位机没有及时处理或者没有处理导致发送错误产生。 ### 错误码计算方法 **1. 单一错误码** 每个错误码对应一个固定的十六进制值,直接查看即可: 0x0001 = 数据过短错误 0x0004 = 无效前缀错误 0x0040 = 无效数字格式错误 **2. 组合错误码(同时发生多个错误)** 当多个错误同时发生时,错误码是各个错误码的相加结果: **示例1:** 同时发生"数据过短"和"缺少换行符" 计算:0x0001 + 0x0002 = 0x0003 状态栏显示:PARSE 0x0003 **示例2:** 同时发生"无效前缀"和"无效数字格式" 计算:0x0004 + 0x0040 = 0x0044 状态栏显示:PARSE 0x0044 **示例3:** 同时发生"数据过短"、"缺少换行符"和"无效数字格式" 计算:0x0001 + 0x0002 + 0x0040 = 0x0043 状态栏显示:PARSE 0x0043 ## 使用技巧 ### 软件操作界面 ![输入图片说明](%E5%9B%BE%E7%89%87/%E6%89%8B%E5%8A%A8%E8%BF%9E%E6%8E%A5image.png) ![输入图片说明](%E5%9B%BE%E7%89%87/%E7%82%B9%E5%87%BB%E6%8C%89%E9%92%AE%E7%BC%A9%E6%94%BEimage.png) ![输入图片说明](%E5%9B%BE%E7%89%87/%E5%8F%AA%E6%98%BE%E7%A4%BA%E6%B3%A2%E5%BD%A2%E5%9B%BEimage.png) ### 数据保存处理 ![输入图片说明](%E5%9B%BE%E7%89%87/%E6%95%B0%E6%8D%AE%E4%BF%9D%E5%AD%98.gif) **使用WPS把无效字符数据分割出来保存纯数据** ![输入图片说明](%E5%9B%BE%E7%89%87/WPS%E6%95%B0%E6%8D%AE%E5%88%86%E5%89%B2%E4%BF%9D%E5%AD%98.gif) ## 参与贡献 **@多多盒子工作室** ## 获取最新版本 网址:https://gitee.com/momingchuan/duo-duo-box