0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

分享一个开源的QT的串口示波器

strongerHuang 来源:果果小师弟 作者:果果小师弟 2022-11-25 10:28 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

逛github时看到这个QT的串口示波器,完全开源,支持串口、TCP、波形显示、通信协议。感觉很不错,跟以前分享的那个vofa+有点像。

Sailor Project功能说明

8a09edd0-6c57-11ed-8abf-dac502259ad0.png

串口调试助手功能

  • 支持传统的串口调试助手的基本收发功能,同时可以刷新大量的数据而不卡顿
  • 支持保存接收的数据
  • 支持最大200条可编辑指令的设置,并用于多条发送
  • 支持定时器发送
  • 支持换行符替换时间戳功能
  • 支持较多的中文编码格式
  • 值得注意的是支持Linux简单的串口调试
  • 支持加载csv表格数据到200条可编辑指令
  • 支持部分窗口配置的保存和重启恢复(前提是你不会删除配置文件)

操作说明

注意由于QT自带文本显示窗口加载大量数据后会造成软件卡顿,现解决方案为设定一个显示缓冲区,在有刷新数据阶段(即串口接收数据阶段),如果需要保持刷新状态(即实时显示接收得数据),则仅显示显示缓冲区的内容,你可以使用鼠标移动向上滚动条,停止数据刷新,同时当你向上移动滚动条到一定程度,便会开始加载所有数据,如果你想再次触发实时刷新数据状态,只需要将滚动条移动到最低端,并确保有数据接收。

由于保存数据为显示界面的数据,如果出于刷新状态,则无法保存所有数据,正确的做法是关闭串口后,将滚动条移动到最顶端,加载全部数据,然后保存窗口数据。

TCPServer界面

8a14e078-6c57-11ed-8abf-dac502259ad0.png8a1f5558-6c57-11ed-8abf-dac502259ad0.png8a2a8ad6-6c57-11ed-8abf-dac502259ad0.png8a3909b2-6c57-11ed-8abf-dac502259ad0.png8a5d4d04-6c57-11ed-8abf-dac502259ad0.png

SEASKY串口通信协议

通信方式是串口,配置为波特率115200, 8位数据位, 1位停止位, 无硬件流控, 无校验位。

1、通信协议格式

帧头 设备类型 设备ID 数据ID 帧尾
protocol_header(4-byte) equipment_type(2-byte) equipment_id (2-byte) data_id(2-byte) frame_tail(2-byte,CRC16,整包校验)

2、帧头详细定义

8a6b92a6-6c57-11ed-8abf-dac502259ad0.png

3、串口通信协议

intparse_protocol(protocol_struct*pProtocol,uint16_tparseDataLen)
{
//解析数据,使用前需提前缓冲pProtocol->message_st.pData
intret=-1;
uint16_tpos_offset;
frame_struct*pFrameStruct=&pProtocol->frame_st;
message_struct*pMessageStruct=&pProtocol->message_st;
if(check_protocol_heade(pMessageStruct->pData)==PROTOCOL_RESULT_OK)
{
//更新帧头数据
pFrameStruct->header.sof=pMessageStruct->pData[0];
//获取data段的数据长度
pFrameStruct->header.data_length=(pMessageStruct->pData[2]<< 8)|(pMessageStruct->pData[1]);
pFrameStruct->header.crc_check=pMessageStruct->pData[3];
//获取此次数据包长度
pMessageStruct->data_len=pFrameStruct->header.data_length+PROTOCOL_DATA_OFFSET+2;
//计算解析后得到的data_union数据长度
pFrameStruct->frame_user.cmd_data.data_len=(pFrameStruct->header.data_length)/sizeof(data_union);
if(pMessageStruct->data_len<=parseDataLen)
        {
            if(pMessageStruct->data_len<= pMessageStruct->max_data_len)
{
if(CRC16_Check_Sum(&pMessageStruct->pData[0],pMessageStruct->data_len)!=0)
{
pFrameStruct->frame_user.equipment_type=(pMessageStruct->pData[5]<<8)|(pMessageStruct->pData[4]);
pFrameStruct->frame_user.equipment_id=(pMessageStruct->pData[7]<< 8)|(pMessageStruct->pData[6]);
pFrameStruct->frame_user.data_id=(pMessageStruct->pData[9]<< 8)|(pMessageStruct->pData[8]);
//拷贝data段指定长度数据
ret=(int)memcpy(&pFrameStruct->frame_user.cmd_data.pData[0],&pMessageStruct->pData[PROTOCOL_DATA_OFFSET],pFrameStruct->header.data_length);
pos_offset=pFrameStruct->header.data_length+PROTOCOL_DATA_OFFSET;
pFrameStruct->frame_tail=(pMessageStruct->pData[pos_offset+1]<< 8)|(pMessageStruct->pData[pos_offset]);
returnPROTOCOL_RESULT_OK;
}
else
{
//待解析BUFF超过预定解析数据容量,避免内存越界
PROTOCOL_ERROR_PRINTF("parse_protocol->>CRC16_Check_Sumerr!
");
returnPROTOCOL_RESULT_CHECK_FRAME_ERR;
}
}
else
{
//待解析BUFF超过预定解析数据容量,避免内存越界
PROTOCOL_ERROR_PRINTF("parse_protocol->>data_len[%d]>max_data_len[%d]!
",
pMessageStruct->data_len,
pMessageStruct->max_data_len);
returnPROTOCOL_RESULT_OUT_OF_LEN;
}
}
else
{
//通过包头计算,还未收到完整的数据包
//PROTOCOL_ERROR_PRINTF("parse_protocol->>data_len[%d]>max_data_len[%d]!
",
//pMessageStruct->data_len,
//pMessageStruct->max_data_len);
returnPROTOCOL_RESULT_OUT_OF_LEN;
}
}
else
{
//待解析BUFF超过预定解析数据容量,避免内存越界
PROTOCOL_ERROR_PRINTF("parse_protocol->>check_protocol_headeerr!
");
returnPROTOCOL_RESULT_CHECK_HEAD_ERR;
}
PROTOCOL_DEBUG_PRINTF("parse_protocol->>check_protocol_headeok!
");
returnPROTOCOL_RESULT_ERR;
}

软件截图

8a7296c8-6c57-11ed-8abf-dac502259ad0.png8a8152ee-6c57-11ed-8abf-dac502259ad0.png8a905078-6c57-11ed-8abf-dac502259ad0.png8aa36d02-6c57-11ed-8abf-dac502259ad0.png

项目开源地址:

https://github.com/SEASKY-Master/vSailorProject
审核编辑 :李倩


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 示波器
    +关注

    关注

    113

    文章

    7129

    浏览量

    196902
  • 定时器
    +关注

    关注

    23

    文章

    3375

    浏览量

    124698

原文标题:分享一个开源的QT的串口示波器

文章出处:【微信号:strongerHuang,微信公众号:strongerHuang】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    逆风C++QT中控台逆向课程

    https://www.bilibili.com/opus/1178756596191199237 QT中控逆向:多线程逻辑与消息处理分析 在软件逆向工程领域,QT框架因其跨平台特性和丰富的功能模块
    的头像 发表于 04-27 10:06 79次阅读

    示波器小知识点

    示波器的系统带宽:是指逐渐升高频率的正弦输入信号显示幅度下降3dB时的频率点。测试信号般是方波,而方波信号由基波及奇次谐波组成。如果用示波器
    的头像 发表于 04-16 11:04 118次阅读
    <b class='flag-5'>示波器</b>小知识点

    QT301电容至模拟转换器:设计与应用指南

    电子工程师们关注的焦点。 文件下载: QT301-D.pdf QT301概述 QT301是款数字突发模式电荷转移(
    的头像 发表于 04-08 12:50 244次阅读

    直播 | 睿擎平台AMP混合部署:你的Qt界面如何“指挥”底层电机?

    很多工程师在做HMI+实时控制类产品时,会遇到两棘手问题:●Qt界面写好了,怎么和底层实时任务通信?●AMP混合部署架构下,Linux与RT-Thread之间的数据交换代码该怎么写?3月4日(周三
    的头像 发表于 03-03 19:33 616次阅读
    直播 | 睿擎平台AMP混合部署:你的<b class='flag-5'>Qt</b>界面如何“指挥”底层电机?

    如何使用示波器触发模式发现产品问题?示波器触发原理和应用

    什么是示波器触发? 什么是触发?触发是示波器非常重要的功能。即使用者设定条件,当被测信号满足该条件的时候,示波器被激励而捕获当前的波形。
    的头像 发表于 01-22 16:04 437次阅读
    如何使用<b class='flag-5'>示波器</b>触发模式发现产品问题?<b class='flag-5'>示波器</b>触发原理和应用

    开源鸿蒙SIG-Qt技术沙龙成都站成功举办,触觉智能产品方案展示

    ,深圳触觉智能等嘉宾展示了SIG-Qt产品解决方案。SIG-Qt产品解决方案深圳触觉智能科技有限公司,iotdraw方案展示:iotdraw是面向工业设备监控
    的头像 发表于 11-24 13:40 835次阅读
    <b class='flag-5'>开源</b>鸿蒙SIG-<b class='flag-5'>Qt</b>技术沙龙成都站成功举办,触觉智能产品方案展示

    实时示波器和采样示波器的差别

    实时示波器(Real-Time Oscilloscope)又称“单次示波器”,它每次触发时将会捕获完整波形。在次连续记录中,会捕获大量
    的头像 发表于 11-08 10:58 2234次阅读
    实时<b class='flag-5'>示波器</b>和采样<b class='flag-5'>示波器</b>的差别

    开源鸿蒙城市技术沙龙成都站圆满落幕

    10月31日,由开源鸿蒙项目管理委员会(PMC)、开源鸿蒙 SIG-Qt主办,成都中科合迅科技有限公司(以下简称“合迅科技”)支持的“开源鸿蒙城市技术沙龙·成都站”在成都海特国际广场成
    的头像 发表于 11-07 11:14 939次阅读

    tiny4412 Qt环境搭建

    1.硬件环境 PC端:ubuntu18.04 开发板硬件平台:tiny4412 内核版本:linux3.5 交叉编译器:arm-linux-gcc Qt版本:Qt5.6 2.搭建 ubuntu 下
    的头像 发表于 10-21 09:54 978次阅读
    tiny4412 <b class='flag-5'>Qt</b>环境搭建

    LVGL近期很多人问,那它和Qt哪个好?

    最近拜访做工业控制、智能家居的客户时,常被问到同一个问题:嵌入式产品,GUI选LVGL还是Qt? 其实工具选择没有绝对的“好”与“坏”,但选对适配场景的GUI图形用户界面工具,能直接让产品开发效率
    的头像 发表于 09-23 15:54 1840次阅读
    LVGL近期很多人问,那它和<b class='flag-5'>Qt</b>哪个好?

    普源示波器DS1102Z-E调试串口通信信号

    ,详解利用DS1102Z-E进行串口信号调试的全流程。   、硬件连接与初步设置 首先需确保示波器与待测串口电路正确连接:使用BNC转接线连接示波
    的头像 发表于 09-17 16:49 1271次阅读
    普源<b class='flag-5'>示波器</b>DS1102Z-E调试<b class='flag-5'>串口</b>通信信号

    又短又好用:单片机就串口,如何和多个从机串口通信?串口如何实现主多从?

    即可实现总线。 但是有时候由于些原因不得不也想到另种设计,即让串口实现主多从这种总线设计。比如板内主MCU只有
    的头像 发表于 09-17 11:49 1860次阅读
    又短又好用:单片机就<b class='flag-5'>一</b><b class='flag-5'>个</b><b class='flag-5'>串口</b>,如何和多个从机<b class='flag-5'>串口</b>通信?<b class='flag-5'>串口</b>如何实现<b class='flag-5'>一</b>主多从?

    【干货分享】基于QT和ffmpeg硬解码的多路摄像头取流

    前言其实官方为我们已经提供了三官方实例,我打开学习了下,QT实例虽然也用到了信号槽,是点击按钮的信号槽,我觉的QT妙就妙在了信号槽和多线程,而且官方的是
    的头像 发表于 07-29 08:05 1358次阅读
    【干货分享】基于<b class='flag-5'>QT</b>和ffmpeg硬解码的多路摄像头取流

    开放原子开源基金会发布150余开源项目应用案例

    近日,在2025开放原子开源生态大会开幕式上,开放原子开源基金会发布了150余开源项目应用案例,涵盖中国南方电网、中国移动、京东集团、安贞医院、南京邮电大学、蚂蚁密算等100余家单位
    的头像 发表于 07-28 17:10 1314次阅读

    如何用QT开发USB3.0上位机?

    如何用QT开发USB3.0上位机
    发表于 05-21 06:54