一种比较笨的方法是在上位机和下位机之间同来设置一个心跳,多长时间后没有心跳了,w5500重启
第二种和第一种差不多,但是简单,只需在w5500寄存器里面改个参数就行,具体参照https://blog.csdn.net/wiznet2012/article/details/38340375
如需以上图片内容做参考,请点击https://download.csdn.net/download/fei_yang_yf/10481429
本人用的笨方法解决的热插拔
下位机(STM32)程序
上位机(qt5)程序:
//定时器做心跳 myTime = new QTimer(); myTime->setInterval(1000);//1s定时 connect(myTime,SIGNAL(timeout()),this,SLOT(AutoSend()));
void MainWindow::AutoSend()//定时器自动发送 { QString str0 = "aa 03 03 ff 05 06 07 bb";//发送心跳 QByteArray sendBuf0 = " "; sendBuf0 = QByteArray::fromHex (str0.toLatin1().data()); tcpSocket->write(sendBuf0); }
具体定时器什么时候开启,关闭要酌情添加
注意的是如果单开一个窗口或对话框,用exec即模态的,会造成不发送心跳,一直重启,解决方法是多线程,或者如果条件允许可以用show即非模态的
头文件里面声明定时器槽函数,源文件上面加个#include<QTimer>,
文章来源: W5500不能热插拔