高级会员
- 积分
- 563
- 金钱
- 563
- 注册时间
- 2016-9-28
- 在线时间
- 158 小时
|
本帖最后由 mftang2016 于 2017-4-15 23:11 编辑
说明:
本文主要介绍一种简单的W5500模块移植方案,仅需要简单地修改硬件接口,即可实现该驱动程序的移植。
硬件:
安富莱_STM32-V5开发板 和 有人物联网 USR-ES1 W5500模块
在安富莱_STM32-V5开发板,上预留一个NRF24L01模块的接口,可使用其作为W5500模块的控制引脚
IO连接方式:
W5500 MCU
REST PC4
CS PA4
MOSI PB5
MISO PB4
SCK PB3
具体连接实物图如下:
固件介绍
该驱动主要由四个文件组成,w5500.c, w5500.h, socket.c, socket.h, 而移植该固件仅需修改w5500.c中IO相关配置即可。
代码见附件
在w5500.c文件中修改IO端口配置信息,该测试代码使用 安富莱_STM32-V5开发板,其配置信息如下:
测试
测试版作为客户端,PC上位机作为服务器使用
测试代码如下:
INT8U NetStateCheck(void)
{
INT8U net_state,phy_cfgr;
CommModule *pCommCfg;
pCommCfg = &st_AppCfg.CommCfg;
//判断是否网线断线
phy_cfgr = getPHYCFGR();
if(!(phy_cfgr&0x1))
{
disconnect(0);
net_state = CONNECT_NONE;
return net_state;
}
net_state=getSn_SR(0);
switch(net_state)/*获取socket0的状态*/
{
case SOCK_INIT:/*socket初始化完成*/
connect(0, pCommCfg->Rj45.server_ip,pCommCfg->Rj45.server_port);/*在TCP模式下向服务器发送连接请求*/
break;
case SOCK_ESTABLISHED:/*socket连接建立*/
if(getSn_IR(0) & Sn_IR_CON) //如下代码跳入到该状态下,则网络连接成功
{
setSn_IR(0, Sn_IR_CON);/*Sn_IR的第0位置1*/
}
break;
case SOCK_CLOSE_WAIT:/*socket等待关闭状态*/
disconnect(0);
break;
case SOCK_CLOSED:/*socket关闭*/
if(pCommCfg->Rj45.local_port>=4000)
{
pCommCfg->Rj45.local_port=3000;
}
socket(0,Sn_MR_TCP, pCommCfg->Rj45.local_port++,Sn_MR_ND);/*打开socket0的一个端口*/
break;
default:
break;
}
if( net_state == SOCK_ESTABLISHED )
{
}
else
{
}
return net_state;
}
测试结果:
|
|