STM32F407通过FSMC连接W5100S进行TCP网络通信
一、W5100S硬件
1.HS-NM5100SA模块
模块厂家:成都浩然电子http://www.hschip.com
HS-NM5100SA以太网络控制器接口模块是将W5100S与必要的外围元器件集成在一块电路板上,为客户提供便利应用的产品。
1. 它保持了W5100S的全部功能和性能;
2. 将W5100S与MCU接口(SPI接口和并行总线接口)通过排针引出;
3. RJ-45座内部集成网络变压器,网线可直接与模块连接;
4. RJ-45上的指示灯可以指示W5100S的以太网连接状态;
5. 直流3.3V供电;
6. 严格的老化测试保证产品优质的品质。


2.设置通信模式
模块集成了总线模式和SPI模式,通过W5100S的MOD[3~0]进行选择

模块背面有电阻用来设置总线模式或SPI模式,设置方式如下图:

模块原理图

二.与单片机连接
使用单片机FSMC通信接口与W5100S模块连接
包括:

  1. 13根FSMC线(8根数据线+2根地址线+读/写/片选)
  2. 1根W5100S硬件复位线
  3. 3.3V供电

    单片机FSMC配置复用模式
//FSMC初始化
//STM32F407 FSMC管脚接线信息
// *W5100S   *STM32F407
//  DAT0            FSMC_D0     PD14  //数据
//  DAT1            FSMC_D1     PD15
//  DAT2            FSMC_D2     PD0
//  DAT3            FSMC_D3     PD1
//  DAT4            FSMC_D4     PE7
//  DAT5            FSMC_D5     PE8
//  DAT6            FSMC_D6     PE9
//  DAT7            FSMC_D7     PE10
//  WRn             FSMC_NWE  PD5  //写
//  RDn         FSMC_NOE  PD4  //读
//  CSn             FSMC_NE1  PD7  //片选
//  M0SI_AD0    FSMC_A16    PD11 //地址线
//  MISO_AD1    FSMC_A17  PD12
void FSMC_Init(void)     //2018-07-17  //FSMC初始化13个引脚 D0~7 A16/17 NOE NWE NE1
{GPIO_InitTypeDef  GPIO_InitStructure;FSMC_NORSRAMInitTypeDef  FSMC_NORSRAMInitStructure;FSMC_NORSRAMTimingInitTypeDef  Timing; RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD|RCC_AHB1Periph_GPIOE,ENABLE);//使能PD,PE时钟  RCC_AHB3PeriphClockCmd(RCC_AHB3Periph_FSMC,ENABLE);//使能FSMC时钟  /* Data lines configuration */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_14| GPIO_Pin_15| GPIO_Pin_0| GPIO_Pin_1;//D0 D1 D2 D3GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;//复用输出GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//推挽输出GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100MHzGPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//上拉GPIO_Init(GPIOD, &GPIO_InitStructure);//初始化  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7| GPIO_Pin_8| GPIO_Pin_9| GPIO_Pin_10;//D4 D5 D6 D7GPIO_Init(GPIOE, &GPIO_InitStructure);//初始化   /* Address lines configuration */GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11| GPIO_Pin_12;//A16  A17GPIO_Init(GPIOD, &GPIO_InitStructure);//初始化      /* NOE and NWE configuration */  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4| GPIO_Pin_5;//NOE  NWEGPIO_Init(GPIOD, &GPIO_InitStructure);//初始 /* NE1 configuration */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;// NE1GPIO_Init(GPIOD, &GPIO_InitStructure);//初始GPIO_PinAFConfig(GPIOD,GPIO_PinSource14,GPIO_AF_FSMC);// D0GPIO_PinAFConfig(GPIOD,GPIO_PinSource15,GPIO_AF_FSMC);// D1GPIO_PinAFConfig(GPIOD,GPIO_PinSource0,GPIO_AF_FSMC);//  D2GPIO_PinAFConfig(GPIOD,GPIO_PinSource1,GPIO_AF_FSMC);//  D3  GPIO_PinAFConfig(GPIOE,GPIO_PinSource7,GPIO_AF_FSMC);//  D4GPIO_PinAFConfig(GPIOE,GPIO_PinSource8,GPIO_AF_FSMC);//  D5GPIO_PinAFConfig(GPIOE,GPIO_PinSource9,GPIO_AF_FSMC);//  D6GPIO_PinAFConfig(GPIOE,GPIO_PinSource10,GPIO_AF_FSMC);// D7    GPIO_PinAFConfig(GPIOD,GPIO_PinSource11,GPIO_AF_FSMC);// A16GPIO_PinAFConfig(GPIOD,GPIO_PinSource12,GPIO_AF_FSMC);// A17        GPIO_PinAFConfig(GPIOD,GPIO_PinSource4,GPIO_AF_FSMC);//  NOE 读信号 GPIO_PinAFConfig(GPIOD,GPIO_PinSource5,GPIO_AF_FSMC);//  NWE 写信号GPIO_PinAFConfig(GPIOD,GPIO_PinSource7,GPIO_AF_FSMC);//  NE1 片选    //寄存器FSMC_BTR*配置   读取时序//寄存器FSMC_BWTR*配置  写入时序Timing.FSMC_AddressSetupTime = 8;//10    //0~15   //地址建立时间(ADDSET)T:1个HCLK 1/168M=6ns  //W5100s需要1个SYS_CLK=1/25M=40nsTiming.FSMC_AddressHoldTime = 0;              //0~15   //地址保持时间(ADDHLD)仅模式D使用   Timing.FSMC_DataSetupTime = 16;    //16        //1~256  //数据建立时间为16个HCLK    6ns*16=96ns               //W5100S最大需要3个SYS_CLK+5ns=125nsTiming.FSMC_BusTurnAroundDuration = 0;    //0~15   //总线周转时间Timing.FSMC_CLKDivision = 0;                      //2~16   //时钟分频比Timing.FSMC_DataLatency = 0;                       //2~17   //数据延迟Timing.FSMC_AccessMode = FSMC_AccessMode_A;  //模式A                                              //位29:28  ACCMOD 模式A/B/C/D//寄存器FSMC_BCR1   FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM1;//  这里我们使用NE            FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable;                         //位1    MUXEN  不复用数据地址FSMC_NORSRAMInitStructure.FSMC_MemoryType =FSMC_MemoryType_SRAM;                                             //位3:2 MTYP  FSMC_MemoryType_SRAM;  //存储器类型SRAM   FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_8b;                                //位5:4 MWID  存储器数据宽度为16bit   FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode =FSMC_BurstAccessMode_Disable;                     //位8        BURSTEN 禁止突发使能位 (仅对同步突发有效)FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low;               //位9        WAITPOL NWAIT低电平有效(仅对突发模式有效)FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait=FSMC_AsynchronousWait_Disable;                   //位15  ASYNCWAIT异步协议时不考虑NWAIT信号FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable;                                                //位10  WRAPMOD 环回突发模式/未使能 (仅在突发模式下有效)  FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState;//位11  WAITCFG NWAIT在等待周期之前有效  FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable;                         //位12  WREN  FSMC写使能FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable;                                       //位13  WAITEN 禁止NWAIT信号  FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable;                              //位14  EXTMOD 不考虑FSMC_BWTR(写入时序寄存),即读写使用相同时序FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable;                                        //位19  CBURSTRW 在异步模式下进行写入操作FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &Timing; //读写时序                   //寄存器FSMC_BTR*配置   读取时序FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &Timing;  //写时序                   //寄存器FSMC_BWTR*配置  写入时序FSMC_NORSRAMInit(&FSMC_NORSRAMInitStructure);  //初始化FSMC配置FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM1, ENABLE);  // 使能BANK1
}

W5100S复位引脚配置成输出模式

//W5100S复位引脚  PA12
#define W5100S_RSTn              GPIO_Pin_12
#define W5100S_RSTn_PORT         GPIOA
#define W5100S_RSTn_CLK          RCC_AHB1Periph_GPIOA
//初始化W5100S复位引脚  W5100S_RSTn
void Reset_GPIO_Config(void) //初始化W5100S复位引脚
{GPIO_InitTypeDef  GPIO_InitStructure;RCC_AHB1PeriphClockCmd(W5100S_RSTn_CLK, ENABLE);//挂载外设时钟  GPIO_InitStructure.GPIO_Pin = W5100S_RSTn;  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;//推挽输出   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //设置最高输出速率GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//推挽输出  GPIO_Init(W5100S_RSTn_PORT, &GPIO_InitStructure);//GPIO_SetBits(W5100S_RSTn_PORT, W5100S_RSTn); //高电平}

三、程序源码
STM32F407源码已上传到我的资源https://download.csdn.net/download/sgjiajia/13122385点击进入
STM32F407通过FSMC连接W5100S进行网络通信.rar
包含TCP_Server服务器模式和TCP_Client客户端模式

STM32F407通过FSMC连接W5100S进行TCP网络通信相关推荐

  1. STM32F407通过SPI连接W5100S进行TCP网络通信

    STM32F407通过SPI连接W5100S进行网络通信 一.W5100S硬件 1.HS-NM5100SA模块 模块厂家:成都浩然电子http://www.hschip.com HS-NM5100SA ...

  2. tcp网络通信教程 java_基于java TCP网络通信的实例详解

    JAVA中设计网络编程模式的主要有TCP和UDP两种,TCP是属于即时通信,UDP是通过数据包来进行通信,UDP当中就会牵扯到数据的解析和传送.在安全性能方面,TCP要略胜一筹,通信过程中不容易出现数 ...

  3. Nginx加密与上游服务器的TCP网络通信

    Nginx加密与上游服务器的TCP网络通信 本文介绍了如何保护NGINX和TCP上游服务器或TCP服务器上游组之间的TCP通信. 先决条件 NGINX Plus R6和更高版本或使用--with-st ...

  4. 一文搞懂如何使用Node.js进行TCP网络通信

    摘要: 网络是通信互联的基础,Node.js提供了net.http.dgram等模块,分别用来实现TCP.HTTP.UDP的通信,本文主要对使用Node.js的TCP通信部份进行实践记录. 本文分享自 ...

  5. Java网络编程 ---- TCP 网络通信编程

    视频:[零基础 快速学Java]韩顺平 零基础30天学会Java 文章目录 1. Socket 2. TCP 网络通信编程 3. 应用案例 1(使用字节流) 4. 应用案例 2(使用字节流) 5. 应 ...

  6. 【STM32F407开发板用户手册】第35章 STM32F407的FSMC总线应用之驱动AD7606(8通道同步采样, 16bit, 正负10V)

    最新教程下载:http://www.armbbs.cn/forum.php?mod=viewthread&tid=93255 第35章       STM32F407的FSMC总线应用之驱动A ...

  7. QT实现TCP网络通信

    QT实现TCP网络通信 前言 一.目标 二.思路总览 服务器端主要代码 客户端主要代码 三.代码 客户端代码 mainwindow.h mainwindow.cpp mainwindow.ui 服务器 ...

  8. 基于TCP网络通信的自动升级程序源码分析-客户端接收文件

    升级程序客户端接收文件 /// <summary>/// 文件数据缓存 索引是 ConnectionInfo对象 数据包的顺序号 值是数据/// </summary>Dicti ...

  9. Qt 的TCP网络通信

    Qt网络通信: Socket 通信: Qt 中提供的所有的 Socket 类都是非阻塞的. Qt 中常用的用于Socket 通信的套接字类 QTCPServer:用于TCP/IP 通信,作为服务器端套 ...

最新文章

  1. 原来 Kubernetes 部署如此简单,看完全明白了
  2. Ubuntu 下面部署Django 项目
  3. 京瓷1110打印自检页_如何修改小票打印机、厨房打印机IP地址
  4. 聊天记录存redis还是mysql_一个小小的签到功能,到底用MySQL还是Redis?
  5. java局域网 端口扫描_java 如何端口扫描出ssh端口?
  6. 渗透测试技巧之Redis漏洞利用总结
  7. (JAVA)Integer类之基本数据类型之间的转换
  8. c语言字母随机初始值,C语言的未初始化的数组的值为什么是随机的
  9. 17.3.13--pycharm2和3的常识问题
  10. (X)HTML Strict 下的嵌套规则
  11. Servlet九大内置对象
  12. 2020年下半年软件设计师下午真题及答案解析
  13. maya阿诺德渲染失败_maya2018无法加载ARNOLD渲染器?
  14. html caption属性,HTML caption align 属性 | 菜鸟教程
  15. 【刷题-每天一算法】赛马
  16. 《计算机视觉黑魔法16个实战项目》之扫描全能王
  17. @ResponseBody对象有空属性报错
  18. Python中import的用法总结
  19. 推荐一个开源的任务管理工具DooTask(支持私有部署)
  20. 捕鱼游戏源码(数值+完整项目资源)

热门文章

  1. Photoshop CS2 视频教程-PS涂抹工具(转)
  2. linux命令行下读取u盘内容_Linux复制U盘文件(命令行)
  3. 分布式系统:向量时钟
  4. WIN10笔记本偶然会出现插入USB设备的时候报错:无法识别的usb设备,前一个设备不正常......
  5. [数据分析实例5]使用python-pandas对历届世界杯数据进行数据分析,并用matplotlib绘图,干货满满,赶紧收藏学习起来!
  6. kafka-manager监控kafka集群启动失败
  7. android 同根动画_Android(java)学习笔记141:Android下的逐帧动画(Drawable Animation)...
  8. IECQ HSPM QC080000简介
  9. 微信小程序 - 商城项目 - 个人中心
  10. 全连接神经网络VS卷积神经网络基本概念理解