数据加载中....
您的位置:电子电路网 >>电路图 >>开发板评估板 >>无线通信
STM32+W5100以太网模块示例 评论(0) 收藏(0
所属分类:开发板评估板 无线通信
相关器件: 浏览:14258次
顶 [11人]
100%
踩 [0人]
0%
登陆即可参与评分,获得积分奖励! [评分一次获1分,每天最多得5分]
  • 详细说明

w5100模块,学习了一下。这个芯片真的不错,集成了硬件tcp/ip协议栈。操作很简单,主要是通过spi接口(当然也支持并口总线操作)配置网络的相关ip 掩码 物理地址 之类的值。
参数配置好后,就是读写通讯的内容,w5100有个中断引脚来指示通讯的完成,我们通过在中断到来之后读取状态值,就会知道是那个端口的中断,以此来进行相关数据解析。
w5100初始化程序:
Write_W5100(W5100_MODE,MODE_RST);  /*软复位W5100*/
Delay(100);      /*延时100ms,自己定义该函数*/
/*设置网关(Gateway)的IP地址,4字节 */
/*使用网关可以使通信突破子网的局限,通过网关可以访问到其它子网或进入Internet*/
for(i=0;i<4;i++)
Write_W5100(W5100_GAR+i,Gateway_IP);   /*Gateway_IP为4字节unsigned char数组,自己定义*/
/*设置子网掩码(MASK)值,4字节。子网掩码用于子网运算*/
for(i=0;i<4;i++)
Write_W5100(W5100_SUBR+i,Sub_Mask);   /*SUB_MASK为4字节unsigned char数组,自己定义*/
/*设置物理地址,6字节,用于唯一标识网络设备的物理地址值
该地址值需要到IEEE申请,按照OUI的规定,前3个字节为厂商代码,后三个字节为产品序号
如果自己定义物理地址,注意第一个字节必须为偶数*/
for(i=0;i<6;i++)
Write_W5100(W5100_SHAR+i,Phy_Addr);   /*PHY_ADDR6字节unsigned char数组,自己定义*/
/*设置本机的IP地址,4个字节
注意,网关IP必须与本机IP属于同一个子网,否则本机将无法找到网关*/
for(i=0;i<4;i++)
Write_W5100(W5100_SIPR+i,IP_Addr);   /*IP_ADDR为4字节unsigned char数组,自己定义*/
/*设置发送缓冲区和接收缓冲区的大小,参考W5100数据手册*/
Write_W5100(W5100_RMSR,0x55);  /*Socket Rx memory size=2k*/
Write_W5100(W5100_TMSR,0x55);  /*Socket Tx mempry size=2k*/
/* 设置重试时间,默认为2000(200ms) */
Write_W5100(W5100_RTR,0x07);
Write_W5100(W5100_RTR+1,0xd0);
/* 设置重试次数,默认为8次 */
Write_W5100(W5100_RCR,8);
/* 启动中断,参考W5100数据手册确定自己需要的中断类型
IMR_CONFLICT是IP地址冲突异常中断
IMR_UNREACH是UDP通信时,地址无法到达的异常中断
其它是Socket事件中断,根据需要添加 */
Write_W5100(W5100_IMR,(IMR_CONFLICT|IMR_UNREACH|IMR_S0_INT|IMR_S1_INT|IMR_S2_INT|IMR_S3_INT));
主程序:
  do
{
  /* 设置W5100端口 */
  W5100_Socket_Set();
                Socket_Listen(0);
  /* 处理W5100中断 */
  if(W5100_Interrupt)
   W5100_Interrupt_Process();
  /* 如果Socket0接收到数据 */
  if((S0_Data & S_RECEIVE) == S_RECEIVE)
  {   GPIO_SetBits(GPIOB, LED_DRIVE);
   S0_Data&=~S_RECEIVE;
   Process_Socket_Data(0);
  }
  /* 如果Socket1接收到数据 */
  if((S1_Data & S_RECEIVE) == S_RECEIVE)
  {      GPIO_SetBits(GPIOB, LED_DRIVE);
   S1_Data&=~S_RECEIVE;
   Process_Socket_Data(1);
  }
  /* 如果Socket2接收到数据 */
  if((S2_Data & S_RECEIVE) == S_RECEIVE)
  {    GPIO_SetBits(GPIOB, LED_DRIVE);
   S2_Data&=~S_RECEIVE;
   Process_Socket_Data(2);
  }
  /* 如果Socket3接收到数据 */
  if((S3_Data & S_RECEIVE) == S_RECEIVE)
  {      GPIO_SetBits(GPIOB, LED_DRIVE);
   S3_Data&=~S_RECEIVE;
   Process_Socket_Data(3);

W5100模块图片


STM32103


W5100模块图片.jpg [ 68.2 KB ] [ PCB版图 ] [ 下载次数:153 ]
STM32103.jpg [ 66.3 KB ] [ PCB版图 ] [ 下载次数:134 ]
W5100中文用户手册.rar [ 6.9 MB ] [ 使用说明 ] [ 下载次数:2279 ]
W5100使用手册.pdf [ 658.1 KB ] [ 使用说明 ] [ 下载次数:284 ]

如无法正常下载,请点击这里报告问题,我们将在下一工作日内为您解决。

  • 发表评论
关闭
请您在通行证中登陆后再下载!
关闭

您当前的用户还没有激活


无法下载相关附件。


请查看您的注册邮箱获取激活信息或


单击此处


重新发送激活信息!


关闭

下载该附件需要积分

您的积分为 ,不足以支付!


您可以通过以下途径获取积分


1.上传文档可得5积分奖励


2.登陆可得2积分奖励,最多可得2分每天


3.评价文档可得1积分奖励,顶、踩,最多可得5分每天


查看更多积分获取的详细规则>>