一,前言
之前上位机已经完成,调试方法是通过上位机读文件,写入PC,并且检查读写一致。今天就把串口协议定义下,然后进行上下位机联调。
二,协议定义
一条open命令+一条数据的传输方式,每次上位机发送后,下位机都会回复ack,针对命令回复0x31,针对数据回复0x32。命令的第一个字节为len后面2个字节为0xd+0xa。stm32收到open命令后,以追加的方式打开,并且写len长度字节到此文件,最后关闭文件。后来由于bug修改了open命令为len+0xa1+0x4c+0xd8。
三,运行效果
使用简单的qss对界面进行了美化四,遇到的问题及解决
单独用串口调试助手和stm32f4开发板调试都是正常的。截图如下而对于QT上位机调试,我下载了虚拟串口vspd,短接了com3和com4进行串口调试,也是正常的。
这是怎么回事,联调只能6%的进度就停下了,为了加快调试速度,我下载了串口监控软件Device Monitoring Studio,它可以试用15天,果然我捕获到了问题。
主要原因是交互协议设计的太简单了,导致数据中有命令协议内容47 0d 0a,最终导致协议交互不正常。
解决方法:本来想做CRC的,后来通过概率方法,命令再加长一个字节。并且修改了命令的随机值。
m_cmdbyte[0] = dlen;
m_cmdbyte[1] = 0xa1;
m_cmdbyte[2] = 0x4c;
m_cmdbyte[3] = 0xd8;
五,总结
我喜欢这样的全栈工程师的感觉,作为大牛就应该上下位机全部自己实现。在QT6的PC端我后续会优化重构下代码结构,增加其可扩展性。