本帖最后由 337zhang 于 2016-12-31 23:00 编辑
100元RMB求熟悉W5500的亲们帮看下下面这个程序,为什么断开网线重新连接后,UDP就不能自动收发了,也ping不通模块的IP地址了
是不是程序中少了哪部分?用的是中断接收数据的方式,程序是以前买的泥人的W5500模块附送的程序
泥人W5500模块-UDP模式例程.rar
(4.25 MB, 下载次数: 19)
2016-12-31 22:53 上传
点击文件名下载附件
重新编辑帖子原因:另增加100RMB悬赏,比表感谢,微信支付宝转账都可以!
1. 我增加了两个全局状态变量,用于判断Sn_SR和Sn_MR的状态
添加在了w5500.c中的第480行下面的函数中
void Write_SOCK_Data_Buffer(SOCKET s, unsigned char *dat_ptr, unsigned short size)
sr_state=Read_W5500_SOCK_1Byte(s,Sn_SR); //正常是值为0x22 拔掉网线后值是0x40 重新插上网线后值是0x00
mr_state=Read_W5500_SOCK_1Byte(s,Sn_MR); //正常是值为0x02 拔掉网线后值是0x40 重新插上网线后值是0x00
仿真器一步步测出来的,要是早仿真,估计就早解决了
2. 在main.c的第229行主函数main中,判断这两个状态,都为0x00时,重新初始化
if((sr_state==0x00)||(mr_state==0x00))
{
Load_Net_Parameters(); //重新加载网络参数,不写这句的话,板子的IP和端口会发生变化,还没找到原因,至少我加上后,测试十几次没变化,感觉是驱动的事
W5500_Hardware_Reset(); //硬件复位W5500
W5500_Initialization(); //W5500初始化配置
Socket_UDP(0); //初始化端口,用于改变那两个寄存器的状态
}
3. 下载上电后,插拔网线,就正常了,亲们可以多试试,程序我放下面了,接法很简单的,main.c里面有接法的说明,上电后就会看到UDP主动发送数据了,板子和电脑的IP看下图吧
4.另外在吐槽下商家,写的例程都不完整~
2.jpg (143.55 KB, 下载次数: 0)
下载附件
2017-1-7 21:29 上传
一周热门 更多>