STM32F407通过FSMC连接W5100S进行TCP网络通信
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模块连接
包括:
- 13根FSMC线(8根数据线+2根地址线+读/写/片选)
- 1根W5100S硬件复位线
- 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网络通信相关推荐
- STM32F407通过SPI连接W5100S进行TCP网络通信
STM32F407通过SPI连接W5100S进行网络通信 一.W5100S硬件 1.HS-NM5100SA模块 模块厂家:成都浩然电子http://www.hschip.com HS-NM5100SA ...
- tcp网络通信教程 java_基于java TCP网络通信的实例详解
JAVA中设计网络编程模式的主要有TCP和UDP两种,TCP是属于即时通信,UDP是通过数据包来进行通信,UDP当中就会牵扯到数据的解析和传送.在安全性能方面,TCP要略胜一筹,通信过程中不容易出现数 ...
- Nginx加密与上游服务器的TCP网络通信
Nginx加密与上游服务器的TCP网络通信 本文介绍了如何保护NGINX和TCP上游服务器或TCP服务器上游组之间的TCP通信. 先决条件 NGINX Plus R6和更高版本或使用--with-st ...
- 一文搞懂如何使用Node.js进行TCP网络通信
摘要: 网络是通信互联的基础,Node.js提供了net.http.dgram等模块,分别用来实现TCP.HTTP.UDP的通信,本文主要对使用Node.js的TCP通信部份进行实践记录. 本文分享自 ...
- Java网络编程 ---- TCP 网络通信编程
视频:[零基础 快速学Java]韩顺平 零基础30天学会Java 文章目录 1. Socket 2. TCP 网络通信编程 3. 应用案例 1(使用字节流) 4. 应用案例 2(使用字节流) 5. 应 ...
- 【STM32F407开发板用户手册】第35章 STM32F407的FSMC总线应用之驱动AD7606(8通道同步采样, 16bit, 正负10V)
最新教程下载:http://www.armbbs.cn/forum.php?mod=viewthread&tid=93255 第35章 STM32F407的FSMC总线应用之驱动A ...
- QT实现TCP网络通信
QT实现TCP网络通信 前言 一.目标 二.思路总览 服务器端主要代码 客户端主要代码 三.代码 客户端代码 mainwindow.h mainwindow.cpp mainwindow.ui 服务器 ...
- 基于TCP网络通信的自动升级程序源码分析-客户端接收文件
升级程序客户端接收文件 /// <summary>/// 文件数据缓存 索引是 ConnectionInfo对象 数据包的顺序号 值是数据/// </summary>Dicti ...
- Qt 的TCP网络通信
Qt网络通信: Socket 通信: Qt 中提供的所有的 Socket 类都是非阻塞的. Qt 中常用的用于Socket 通信的套接字类 QTCPServer:用于TCP/IP 通信,作为服务器端套 ...
最新文章
- 原来 Kubernetes 部署如此简单,看完全明白了
- Ubuntu 下面部署Django 项目
- 京瓷1110打印自检页_如何修改小票打印机、厨房打印机IP地址
- 聊天记录存redis还是mysql_一个小小的签到功能,到底用MySQL还是Redis?
- java局域网 端口扫描_java 如何端口扫描出ssh端口?
- 渗透测试技巧之Redis漏洞利用总结
- (JAVA)Integer类之基本数据类型之间的转换
- c语言字母随机初始值,C语言的未初始化的数组的值为什么是随机的
- 17.3.13--pycharm2和3的常识问题
- (X)HTML Strict 下的嵌套规则
- Servlet九大内置对象
- 2020年下半年软件设计师下午真题及答案解析
- maya阿诺德渲染失败_maya2018无法加载ARNOLD渲染器?
- html caption属性,HTML caption align 属性 | 菜鸟教程
- 【刷题-每天一算法】赛马
- 《计算机视觉黑魔法16个实战项目》之扫描全能王
- @ResponseBody对象有空属性报错
- Python中import的用法总结
- 推荐一个开源的任务管理工具DooTask(支持私有部署)
- 捕鱼游戏源码(数值+完整项目资源)
热门文章
- Photoshop CS2 视频教程-PS涂抹工具(转)
- linux命令行下读取u盘内容_Linux复制U盘文件(命令行)
- 分布式系统:向量时钟
- WIN10笔记本偶然会出现插入USB设备的时候报错:无法识别的usb设备,前一个设备不正常......
- [数据分析实例5]使用python-pandas对历届世界杯数据进行数据分析,并用matplotlib绘图,干货满满,赶紧收藏学习起来!
- kafka-manager监控kafka集群启动失败
- android 同根动画_Android(java)学习笔记141:Android下的逐帧动画(Drawable Animation)...
- IECQ HSPM QC080000简介
- 微信小程序 - 商城项目 - 个人中心
- 全连接神经网络VS卷积神经网络基本概念理解