STM32F407通过SPI连接W5100S进行网络通信
一、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模式,设置方式如下图:

模块原理图

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

  1. 4根SPI线
  2. 1根W5100S硬件复位线
  3. 3.3V供电

单片机SPI配置复用模式,片选信号配置成输出模式

//SPI1初始化 配置成主机模式
//SPI1 RCC_APB2=84M
void W5100S_SPI_Init(void)
{SPI_InitTypeDef   SPI_InitStructure;GPIO_InitTypeDef GPIO_InitStructure;RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);//使能GPIOA时钟   RCC_APB2PeriphClockCmd( RCC_APB2Periph_SPI1, ENABLE);/* Configure SPIy pins: SCK, MISO and MOSI */GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7; //PA5/6/7GPIO_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(GPIOA, &GPIO_InitStructure);GPIO_PinAFConfig(GPIOA,GPIO_PinSource5,GPIO_AF_SPI1); //PA5复用为 SPI1GPIO_PinAFConfig(GPIOA,GPIO_PinSource6,GPIO_AF_SPI1); //PA6复用为 SPI1GPIO_PinAFConfig(GPIOA,GPIO_PinSource7,GPIO_AF_SPI1); //PA7复用为 SPI1/*Init CS*/GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_4; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;GPIO_Init(GPIOA, &GPIO_InitStructure);GPIO_SetBits(GPIOA, GPIO_Pin_4);/* SPI Config -------------------------------------------------------------*/SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;SPI_InitStructure.SPI_Mode = SPI_Mode_Master;SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low; //时钟空闲状态为低电平SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge;//时钟的第1个跳变沿SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_8;//波特率预分频SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;SPI_InitStructure.SPI_CRCPolynomial = 7;SPI_Init(SPI1, &SPI_InitStructure);SPI_Cmd(SPI1, ENABLE);//使能SPI外设
}

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/13130744点击进入
STM32F407通过W5100S进行网络通信.rar
例程包括:SPI模式和FSMC总线模式
包含TCP_Server服务器模式和TCP_Client客户端模式

仅需通过修改自定义参数选择SPI模式或FSMC总线模式

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

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

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

  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. QT实现TCP网络通信

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

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

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

  8. Qt 的TCP网络通信

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

  9. 通过连接实例解读TCP/IP协议

    通过连接实例解读TCP/IP协议 最近狂补基础,猛看TCP/IP协议.不过,书上的东西太抽象了,没有什么数据实例,看了不 久就忘了.于是,搬来一个sniffer,抓了数据包来看,呵呵,结合书里面得讲解 ...

最新文章

  1. nginx的读写分离
  2. C# 实现Winform全屏后不遮挡任务栏,显示任务栏
  3. Keil中的Code,RO,RW,ZI分别表示什么?
  4. 子类怎么继承父类方法中的变量_关于继承的那些事!
  5. c/c++将字符串中的空格替换成%20
  6. qq家园纵横四海的源码
  7. 1513_人月神话阅读笔记_再论没有银弹
  8. 分布式系统架构实例剖析
  9. DSN,W-DSN文献资料整理
  10. Java开源中文分词器的使用方法和分词效果对比
  11. 现在还有人说Python 爬虫没用吗?股票数据定向爬虫让你轻松了解股势
  12. 抖音小程序调起支付宝支付php微擎代码和HTML代码
  13. CeTx解决pdf书签乱码问题
  14. 幼儿课外活动游戏_适合幼儿园的课外活动有哪些游戏
  15. 如何在黑客马拉松中生存
  16. 大型分布式系统监控平台(六)-- 第一个flink应用topN
  17. 基于python下django框架 实现多用户商城平台详细设计
  18. 调用CMD执行程序的各种方法
  19. 计算机毕业设计 SSM+Vue停车位管理系统 临时停车位管理系统 车位停车管理系统 停车位租用管理系统Java Vue MySQL数据库 远程调试 代码讲解
  20. cannot be cast to android.view.inputmethod.InputConnection

热门文章

  1. if语句(条件表达式)
  2. logstash丢弃没有精准匹配到文件名的日志数据
  3. 金字塔原理的核心思想
  4. 微信小程序微信公众号支付宝小程序H5(获取信息用户信息,支付,分享,人脸识别)
  5. Robotics Education and Research at Scale - A Remotely Accessible Robotics Development Platform
  6. 双目摄像头立体成像(三)双目摄像头的标定及测距(Ubuntu16.04 + OpenCV)
  7. linux常用命令详解 1
  8. 插入排序详解(Java)
  9. 轧机是用计算机操作的吗,轧机生产操作流程及安全规程
  10. 如何有效地与开发人员一起工作(一)