W5500不能热插拔

一种比较笨的方法是在上位机和下位机之间同来设置一个心跳,多长时间后没有心跳了,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>

猜你喜欢

转载自blog.csdn.net/Fei_Yang_YF/article/details/80707701