串口示波器的串口调试助手功能

发布时间:2023-03-28  

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

Sailor Project功能说明

3a48cdc8-e883-11ec-ba43-dac502259ad0.png

串口调试助手功能

支持传统的串口调试助手的基本收发功能,同时可以刷新大量的数据而不卡顿

支持保存接收的数据

支持最大200条可编辑指令的设置,并用于多条发送

支持定时器发送

支持换行符替换时间戳功能

支持较多的中文编码格式

值得注意的是支持Linux简单的串口调试

支持加载csv表格数据到200条可编辑指令

支持部分窗口配置的保存和重启恢复(前提是你不会删除配置文件)

操作说明

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

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

TCPServer界面

3a6f0b28-e883-11ec-ba43-dac502259ad0.png

 

3aa37624-e883-11ec-ba43-dac502259ad0.png

 

3b011f36-e883-11ec-ba43-dac502259ad0.png

 

3b33d340-e883-11ec-ba43-dac502259ad0.png

 

3b660cc0-e883-11ec-ba43-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、帧头详细定义

3bacbe40-e883-11ec-ba43-dac502259ad0.png

3、串口通信协议

int parse_protocol(protocol_struct* pProtocol,uint16_t parseDataLen)

{

    //解析数据,使用前需提前缓冲 pProtocol->message_st.pData

    int ret = -1;

    uint16_t pos_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]);

                    return PROTOCOL_RESULT_OK;

                }

                else

                {

                    //待解析BUFF超过预定解析数据容量,避免内存越界

                    PROTOCOL_ERROR_PRINTF("parse_protocol->>CRC16_Check_Sum err!

");

                    return PROTOCOL_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);

                return PROTOCOL_RESULT_OUT_OF_LEN;

            }

        }

        else

        {

            //通过包头计算,还未收到完整的数据包

//            PROTOCOL_ERROR_PRINTF("parse_protocol->>data_len[%d] > max_data_len[%d]!

",

//                pMessageStruct->data_len,

//                pMessageStruct->max_data_len);

            return PROTOCOL_RESULT_OUT_OF_LEN;

        }

    }

    else

    {

        //待解析BUFF超过预定解析数据容量,避免内存越界

        PROTOCOL_ERROR_PRINTF("parse_protocol->>check_protocol_heade err!

");

        return PROTOCOL_RESULT_CHECK_HEAD_ERR;

    }

    PROTOCOL_DEBUG_PRINTF("parse_protocol->>check_protocol_heade ok!

");

    return PROTOCOL_RESULT_ERR;

}

软件截图

3bd0f29c-e883-11ec-ba43-dac502259ad0.png

 

3c410b2c-e883-11ec-ba43-dac502259ad0.png

 

3c83617a-e883-11ec-ba43-dac502259ad0.png

 

3cc196de-e883-11ec-ba43-dac502259ad0.png

项目开源地址:
https://github.com/SEASKY-Master/vSailorProject


文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

相关文章

    数字示波器怎么存储波形;  在获得数字示波器的波形后很多小伙伴都不知道怎么保存,接下来跟随小编一起了解下示波器波形存储到U盘的方法步骤。   1、通过示波器的探头获得了自己所需的波形。   2......
    用计算机的键盘和显示器来操控仪器进行程控测量。本设计中计算机端接口为RS232接口,使用这个串口作为通信工具,编程方便、连接简单可靠,软件则采用Windows操作系统自带的超级终端。因此,可以很方便地完成计算机串口数据......
    乱真辐射,抖动分析,谐波功率分析,EMI 分析。这么看fft 大有用武之地啊。 四、我们把示波器上的频谱分析功能做到极致,怎么做到的? 首先要把频谱分析的速度提高上去,实时刷新,所以你看不再忍受示波器......
    ,才会要求示波器的带宽限制,否则即便测到电源有高频噪声,也不是芯片最后接收到的。同时探测点需要放在用电芯片端,否则如果点在VRM端,电源还没有经过用电芯片端的小电容的滤波,测出来的噪声就会偏大。 那如果没示波器怎么......
    示波器怎么选?数字示波器品牌与选购攻略!;示波器是硬件研发、实验和维修中用途最为广泛、功能强大的测量仪器。它最基本的作用是把电子电路中的电信号转换成可视化图像,直观地展现电信号的实时变化、周期......
    。利用示波器,就能够观察测量不同信号随着时间或者信号的变化。安泰测试为大家介绍一下怎么调节使用普源示波器。 普源示波器怎么调节使用? 1、示波器通电预热; 2、、调节......
    multisim中函数信号发生器怎么接;Multisim中函数发生器的三个端子,“+”和“-”输出是振幅相同但极性相反的信号(均相对于“COM”),即当“+”端输出波形为正半周波时,“-”端输......
    串口示波器的串口调试助手功能;逛github时看到这个QT的串口示波器,完全开源,支持串口、TCP、波形显示、通信协议。感觉很不错,跟以前分享的那个vofa+有点像。感兴......
    示波器十大基础知识;1.什么是示波器的实时采样率? 答:实时采样率是指示波器一次采集(一次触发)采样间隔的倒数。据了解,目前业界的最高水平是四个通道同时使用。 2.用示波器怎......
    置了接收和发送中断。 这样,我们就完成了串口2的配置工作,接下来我们需要完成两个函数,分别用于串口数据的发送和接收: void uart_write(uint8_t data) {   int......

我们与500+贴片厂合作,完美满足客户的定制需求。为品牌提供定制化的推广方案、专属产品特色页,多渠道推广,SEM/SEO精准营销以及与公众号的联合推广...详细>>

利用葫芦芯平台的卓越技术服务和新产品推广能力,原厂代理能轻松打入消费物联网(IOT)、信息与通信(ICT)、汽车及新能源汽车、工业自动化及工业物联网、装备及功率电子...详细>>

充分利用其强大的电子元器件采购流量,创新性地为这些物料提供了一个全新的窗口。我们的高效数字营销技术,不仅可以助你轻松识别与连接到需求方,更能够极大地提高“闲置物料”的处理能力,通过葫芦芯平台...详细>>

我们的目标很明确:构建一个全方位的半导体产业生态系统。成为一家全球领先的半导体互联网生态公司。目前,我们已成功打造了智能汽车、智能家居、大健康医疗、机器人和材料等五大生态领域。更为重要的是...详细>>

我们深知加工与定制类服务商的价值和重要性,因此,我们倾力为您提供最顶尖的营销资源。在我们的平台上,您可以直接接触到100万的研发工程师和采购工程师,以及10万的活跃客户群体...详细>>

凭借我们强大的专业流量和尖端的互联网数字营销技术,我们承诺为原厂提供免费的产品资料推广服务。无论是最新的资讯、技术动态还是创新产品,都可以通过我们的平台迅速传达给目标客户...详细>>

我们不止于将线索转化为潜在客户。葫芦芯平台致力于形成业务闭环,从引流、宣传到最终销售,全程跟进,确保每一个potential lead都得到妥善处理,从而大幅提高转化率。不仅如此...详细>>