历史上的今天
返回首页

历史上的今天

今天是:2024年10月12日(星期六)

正在发生

2020年10月12日 | STM32驱动W5100实现udp通信

2020-10-12 来源:eefocus

环境:


主机:WIN7


开发环境:MDK4.72


MCU:STM32F103ZE



源代码:


驱动层代码:


drv_w5100.h


/*********************************************************************

*   w5100驱动层头文件

*   (c)copyright 2013,jdh

*   All Right Reserved

*文件名:drv_w5100.h

*程序员:jdh

*修改日期:2013/10/22

*   2013/10/23

*   2013/10/24

**********************************************************************/

/*********************************************************************

硬件连接说明

电路标号 单片机引脚 特殊功能

W5100_MISO PB4 SPI3_MISO

W5100_MOSI PB5 SPI3_MOSI

W5100_CS PA15 SPI3_NSS

W5100_SCLK PB3 SPI3_SCK

/RESET PD3

/INT PD6

**********************************************************************/

 

#ifndef _DRV_W5100_H_

#define _DRV_W5100_H_

 

/*********************************************************************

* 头文件

**********************************************************************/

 

#include "stm32f10x.h"

#include "stm32f10x_spi.h"

 

/*********************************************************************

* 宏定义

**********************************************************************/

 

/*********************************************************************

* 读写操作

**********************************************************************/

 

//写操作

#define WRITE_COMMAND    0xf0   

//读操作

#define READ_COMMAND    0x0f    

 

/*********************************************************************

* 基地址

**********************************************************************/

 

#define COMMON_BASE 0x0000

 

/*********************************************************************

* 寄存器

**********************************************************************/

 

//-----------------------------------------------------------------------------

//                               Common register

//-----------------------------------------------------------------------------

//Mode register, R/W, Default=0x00

#define SOCKET0       0

#define SOCKET1       1

#define SOCKET2       2

#define SOCKET3       3

 

#define TCP_SERVER    0

#define TCP_CLIENT    1

#define UDP           2

 

#define W5100_MODE COMMON_BASE

#define MODE_RST 0x80 //Software reset

#define MODE_PB 0x10 //Ping block mode

#define MODE_PPPOE 0x08 //PPOE mode

#define MODE_AI 0x02 //Address auto increment in indirect bus I/F

#define MODE_IND 0x01 //Indirect bus I/F mode

 

//Gateway address register, R/W, default=0x00

#define W5100_GAR COMMON_BASE+0x01

 

//Subnet mask address, R/W, default=0x00

#define W5100_SUBR COMMON_BASE+0x05

 

//Source hardware address, R/W, default=0x00

#define W5100_SHAR COMMON_BASE+0x09

 

//Source IP address, R/W, default=0x00

#define W5100_SIPR COMMON_BASE+0x0f

 

//Interrupt and interrupt mask register

#define W5100_IR COMMON_BASE+0x15 //RO, Default=0x00

#define IR_CONFLICT 0x80 //IP conflict

#define IR_UNREACH 0x40 //Destination unreachable

#define IR_PPPOE 0x20 //PPOE close

#define IR_S3_INT 0x08 //Occurrence of socket 3 socket interrupt

#define IR_S2_INT 0x04 //Occurrence of socket 2 socket interrupt

#define IR_S1_INT 0x02 //Occurrence of socket 1 socket interrupt

#define IR_S0_INT 0x01 //Occurrence of socket 0 socket interrupt

 

#define W5100_IMR COMMON_BASE+0x16 //R/W, Default=0x00

#define IMR_CONFLICT 0x80 //IP conflict

#define IMR_UNREACH 0x40 //Destination unreachable

#define IMR_PPPOE 0x20 //PPOE close

#define IMR_S3_INT 0x08 //Occurrence of socket 3 socket interrupt

#define IMR_S2_INT 0x04 //Occurrence of socket 2 socket interrupt

#define IMR_S1_INT 0x02 //Occurrence of socket 1 socket interrupt

#define IMR_S0_INT 0x01 //Occurrence of socket 0 socket interrupt

 

//Retry time value. Value 1 means 100us, R/W, default=0x07D0

#define W5100_RTR COMMON_BASE+0x17

 

//Retry count, R/W, Default=0x08

#define W5100_RCR COMMON_BASE+0X19

 

//RX memory size register, R/W, default=0x55

//--------------------------------------------------------    S1      S0      Memory size

//  Socket3    |  Socket2    |  Socket1    |  Socket0    |    0       0           1KB

//-------------|-------------|-------------|-------------|    0       1           2KB

//S1       S0  |S1       S0  |S1       S0  |S1       S0  |    1       0           4KB

//--------------------------------------------------------    1       1           8KB

#define W5100_RMSR COMMON_BASE+0x1a

 

//TX memory size register, R/W, default=0x55

#define W5100_TMSR COMMON_BASE+0x1b

 

//Authentication type in PPPOE mode, R, default=0x0000

#define W5100_PATR COMMON_BASE+0x1c

 

//PPP LCP request timer register, R/W, default=0x28

//Value 1 is about 25ms

#define W5100_PTIMER COMMON_BASE+0x28

 

//PPP LCP magic number register, R/W, default=0x00

#define W5100_PMAGIC COMMON_BASE+0x29

 

//Unreachable IP address, RO, default=0x00

#define W5100_UIPR COMMON_BASE+0x2a

 

//Unreachable port register, RO, default=0x0000

#define W5100_UPORT COMMON_BASE+0x2e

 

 

//-----------------------------------------------------------------------------

//                                  Socket register

//-----------------------------------------------------------------------------

//Socket mode register, R/W, default=0x00

#define W5100_S0_MR COMMON_BASE+0x0400 //Socket 0

#define W5100_S1_MR COMMON_BASE+0x0500 //Socket 1

#define W5100_S2_MR COMMON_BASE+0x0600 //Socket 2

#define W5100_S3_MR COMMON_BASE+0x0700 //Socket 3

#define S_MR_MULTI 0x80 //Multcasting

#define S_MR_MC 0x20 //Multcast

 

//  P3   P2   P1   P0     Meaning

#define S_MR_CLOSED 0x00 //  0    0    0    0      Closed

#define S_MR_TCP 0x01 //  0    0    0    1      TCP

#define S_MR_UDP 0x02 //  0    0    1    0      UDP

#define S_MR_IPRAW 0x03 //  0    0    1    1      IPRAW

#define S_MR_MACRAW 0x04 //  0    1    0    0      MACRAW

#define S_MR_PPPOE 0x05 //  0    1    0    1      PPPOE

 

//Socket command register, R/W, default=0x00

#define W5100_S0_CR COMMON_BASE+0x0401 //Socket 0

#define W5100_S1_CR COMMON_BASE+0x0501 //Socket 1

#define W5100_S2_CR COMMON_BASE+0x0601 //Socket 2

#define W5100_S3_CR COMMON_BASE+0x0701 //Socket 3

#define S_CR_OPEN 0x01 //It is used to initialize the socket

#define S_CR_LISTEN 0x02 //In TCP mode, it waits for a connection request from any remote peer(Client)

#define S_CR_CONNECT 0x04 //In TCP mode, it sends a connection request to remote peer(SERVER)

#define S_CR_DISCON 0x08 //In TCP mode, it sends a connection termination request

#define S_CR_CLOSE 0x10 //Used to close the socket

#define S_CR_SEND 0x20 //It transmit the data as much as the increase size of write pointer

#define S_CR_SEND_MAC 0x21 //In UDP mode, same as SEND

#define S_CR_SEND_KEEP 0x22 //In TCP mode

#define S_CR_RECV 0x40 //Receiving is processed including the value of socket RX read

//pointer register

 

/* Definition for PPPOE */

#define S_CR_PCON 0x23 //Start of ADSL connection

#define S_CR_PDISCON 0x24 //End of ADSL connection

#define S_CR_PCR 0x25 //Send REQ message ineach phase

#define S_CR_PCN 0x26 //Send NAK message in each phase

#define S_CR_PCJ 0x27 //Senf REJECT message in each phase

 

//Socket interrup register, RO, default=0x00

#define W5100_S0_IR COMMON_BASE+0x0402 //Socket 0

#define W5100_S1_IR COMMON_BASE+0x0502 //Socket 1

#define W5100_S2_IR COMMON_BASE+0x0602 //Socket 2

#define W5100_S3_IR COMMON_BASE+0x0702 //Socket 3

#define S_IR_SENDOK 0x10 //Send data complete

#define S_IR_TIMEOUT 0x08 //Set if timeout occurs during connection or termination

//or data transmission

#define S_IR_RECV 0x04 //Set if data is received

#define S_IR_DISCON 0x02 //Set if receiv connection termination request

#define S_IR_CON 0x01 //Set if connetion is established

 

/* Definition for PPPOE */

#define S_IR_PRECV 0x80 //Indicate receiving no support option data

#define S_IR_PFAIL 0x40 //Indicate PAP Authentication fail

#define S_IR_PNEXT 0x20 //Go next phase

 

//Socket status register, RO, default=0x00

#define W5100_S0_SSR COMMON_BASE+0x0403 //Socket 0

#define W5100_S1_SSR COMMON_BASE+0x0503 //Socket 1

#define W5100_S2_SSR COMMON_BASE+0x0603 //Socket 2

#define W5100_S3_SSR COMMON_BASE+0x0703 //Socket 3

#define S_SSR_CLOSED 0x00 //In case that OPEN command are given to Sn_CR, Timeout interrupt

//is asserted or connection is terminated

#define S_SSR_INIT 0x13 //In case that Sn_MR is set as TCP and OPEN commands are given to Sn_CR

#define S_SSR_LISTEN 0x14 //In case that under the SOCK_INIT status, LISTEN commands

//are given to Sn_CR

#define S_SSR_ESTABLISHED 0x17 //In case that connection is established

#define S_SSR_CLOSE_WAIT 0x1c //In case that connection temination request is received

#define S_SSR_UDP 0x22 //In case that OPEN command is given to Sn_CR when Sn_MR is set as UDP

#define S_SSR_IPRAW 0x32 //In case that OPEN command is given to Sn_CR when Sn_MR is set as IPRAW

#define S_SSR_MACRAW 0x42 //In case that OPEN command is given to S0_CR when S0_MR is set as MACRAW

推荐阅读

史海拾趣

Advanced Optoelectronic Technology Corp公司的发展小趣事

为了进一步提高竞争力,AOTC开始寻求与上下游企业的合作。通过与原材料供应商、生产设备制造商以及销售渠道商建立紧密的合作关系,公司成功实现了产业链的整合,降低了生产成本,提高了生产效率。此外,公司还与其他科技公司开展战略合作,共同研发新产品,拓展新市场。

Hifn Inc公司的发展小趣事

在追求经济效益的同时,AOTC也积极履行社会责任。公司注重环保和可持续发展,采用环保材料和节能技术生产产品,降低对环境的影响。此外,公司还积极参与公益事业,支持教育、科研等领域的发展,为社会做出了积极贡献。

这些故事虽然是虚构的,但它们反映了一个电子行业中公司可能经历的一些典型发展阶段和挑战。在真实情况中,公司的发展路径会受到市场环境、技术变革、竞争态势等多种因素的影响。

DLP Design公司的发展小趣事

DLP科技,一家以DLP技术为核心的创新设计公司,在电子行业的快速发展中崭露头角。公司创始人李博士,凭借对DLP技术的深入研究和独到见解,带领团队开发出了一系列具有革命性的产品。从最初的DLP投影机到后来的无屏电视,DLP科技不断突破技术瓶颈,引领市场潮流。通过持续的创新和研发,DLP科技在电子行业树立了技术领先的地位。

和芯润德(CoreChips)公司的发展小趣事

在2010年代初,中国的集成电路市场仍被国际巨头所主导,技术壁垒高筑。然而,和芯润德科技有限公司(以下简称“和芯润德”)却勇敢地挑战了这一现状。公司创始人团队凭借对技术的深刻理解和不懈追求,成功研发出首款具有自主知识产权的以太网网络芯片,打破了美系技术的长期垄断。这一突破不仅为和芯润德赢得了市场的认可,也为中国集成电路产业赢得了宝贵的尊严。

BH Electronics公司的发展小趣事

进入21世纪,BH Electronics面临着更加激烈的市场竞争。为了保持领先地位,公司加大了对技术研发的投入。在一次技术研讨会上,工程师小王提出了一项革命性的技术设想。经过多次试验和改进,BH Electronics成功研发出了一款具有划时代意义的电子产品,不仅提升了性能,还降低了成本。这一创新产品迅速在市场上获得了广泛认可,为公司的快速发展奠定了坚实基础。

Helicomm公司的发展小趣事

进入21世纪,BH Electronics面临着更加激烈的市场竞争。为了保持领先地位,公司加大了对技术研发的投入。在一次技术研讨会上,工程师小王提出了一项革命性的技术设想。经过多次试验和改进,BH Electronics成功研发出了一款具有划时代意义的电子产品,不仅提升了性能,还降低了成本。这一创新产品迅速在市场上获得了广泛认可,为公司的快速发展奠定了坚实基础。

问答坊 | AI 解惑

内核下获得系统版本

怎么在内核下获得系统版本。。比如 知道 现在的系统是 2000  还是 2000server  还是XP  还是2003 我想过读取注册表  但是我怕万一人家把注册表里面的系统版本改了。读出来的就是错误的吧…

查看全部问答>

#error encountered "This file should only be compiled by ARM IAR compiler and as

Micrium-NXP-UCOS-II-LCD-MCB2300为LPC2300平台,全盘移植到ADS1.2上,进行编译,调试出现以上错误,请各位大侠给予帮助,不胜感激,谢谢!其中启动文件由于汇编语言不兼容,故改变了一下,别的没动,启动文件用的是LPC23XX_USB_BOOTLOADER里的启动文件,进行 ...…

查看全部问答>

关于AQ430的问题

我刚刚开始使用AQ430 xp试用版,在Project Opction-> memory erase before programing中选择info and main 选项,但在make 或 rebuild all后,system messege 也显示info区擦除,main区擦除,program完成,写入程序后查看program memory ,其中的i ...…

查看全部问答>

进来看一下

#include <msp430x14x.h> void main(void) { WDTCTL = WDTPW + WDTHOLD; P3DIR |= BIT4;// P3.4 output TACTL = TASSEL_1 + MC_2 + TAIE; _BIS_SR(LPM3_bits + GIE); } ...…

查看全部问答>

技术转让

电压的谐波分量占有率、电流的谐波分量占有率等的测量与计算功能。…

查看全部问答>

MSP430Debug出错

IAR ,Make后完全正确,就是Debug不行…

查看全部问答>

【聊聊DSP】那一年,我追过的“女孩”们之一初识篇

那一年,我追过的“女孩”们之一初识篇 本文乃Starcool(Q工)原创,首发于EEWORLD。谢绝他人转载!由于计划篇幅较长故分开部分来回忆~~ 风风雨雨,TI不知不觉间陪伴我们工程师走过了多少岁月。TI目前的成就就像一个浩大的工程。是多少工程师的心 ...…

查看全部问答>

电阻屏原理详解

本帖最后由 paulhyde 于 2014-9-15 03:29 编辑 电阻屏原理详解    …

查看全部问答>

TIVAC LAUNCHPAD ADC内部温度传感器

代码是在ti\\TivaWare_C_Series-2.0.1.11577\\examples\\peripherals\\adc里的    计算结果那稍微改动了一下 用温度计试了   9(阳台)度到20(屋里温度)度 挺准的  就是数不太固定#include #include \"inc/hw_m ...…

查看全部问答>