零死角玩转stm32-高级篇7、以太网(ENC28J60)
零死角玩转stm32-高级篇8、以太网(ENC28J60 + Lwip)
0、友情提示《零死角玩转STM32》系列教程由初级篇、中级篇、高级篇、系统篇、四个部分组成,根据野火STM32开发板旧版教程升级而来,且经过重新深入编写,重新排版,更适合初学者,步步为营,从入门到精通,从裸奔到系统,让您零死角玩转STM32。
M3的世界,与野火同行,乐意惬无边。
另外,野火团队历时一年精心打造的《STM32库开发实战指南》将于今年10月份由机械工业出版社出版,该书的排版更适于纸质书本阅读以及更有利于查阅资料。
内容上会给你带来更多的惊喜。
是一本学习STM32必备的工具书。
敬请期待!8、以太网(ENC28J60+LWIP)8.1 友情提醒Lwip的教程非常庞大且深入,是《stm32库开发实战指南》里面的内容,鉴于跟出版社的合约的关系,这里不能够开源,但野火STM32开发板里面提供了源码。
欲知更详细内容,请关注机械工业出版社将于10月份出版的《stm32库开发实战指南》。
LWIP实验需要用到ENC28J60这个以太网模块,野火STM32开发板已经板载了这个模块,可直接做LWIP实验。
8.2实验步骤下面简单介绍下LWIP的操作方法和能够达到的效果。
野火STM32开发板供电(DC5V),插上JLINK,插上串口线(两头都是母的交叉线),利用网线把STM32开发板接入与PC相同的路由,也可以直接利用网线把开发板和PC相连,其实验的操作是相同的(这样可以排除路由的问题),但在进行浏览网页实验时,图片可能无法正常显示。
把本工程文件编译后烧录到开发板上,在程序运行框输入cmd命令进入dos模式。
8.2.1 ping实验在命令提示符窗口输入命令并回车: ping 192.168.1.18输入ping命令成功后的现象ping 192.168.1.188.2.2 telnet实验1.如果使用windows 7系统,系统没有telnet程序,需要自行下载安装。
使用xp系统的用户,在命令提示符窗口输入命令并回车:telnet 192.168.1.18输入命令后弹出如下窗口:进入 telnet程序2.见错误!未找到引用源。
以太网控制器ENC28J60编程要点
摘要:在嵌入式系统中,以太网控制器通常也是研究热点之一,MicroChip公司的ENC28J60在嵌入式系统中应用价值较高,该芯片集成了MAC控制器和PHY,使用SPI接口,适合在引脚资源比较紧张的嵌入式系统中加入以太网连接功能,本文主要介绍了MicroChip公司的ENC28J60控制器的初始化及其编程相关的注意和要点,并针对开发中可能遇到的一些问题进行了探讨。
关键字:ENC28J60编程1.以太网数据缓冲区(8K)读写/地址控制REG的相关作用:注意,这些REG除EPKTCNT外都为16bits,以太网数据缓冲区地址为:0000h~1FFFh 1).ERDPT(分为H/L两个)MC U读缓冲器指针:--手册P28,MCU读取缓冲区数据时,每次实际读取的地址由该REG保存.2).EWRPT(分为H/L两个)MC U写缓冲器指针:--手册P29,MCU向缓冲区写入数据时,每次实际写入的地址由该REG保存.3).ERXRDPT(分为H/L两个)接收读指针:--手册P17,P33, 定义禁止接收硬件写入的FIFO 中的位置。
在正常操作中,接收硬件(指网络接口方向)将数据顺序写入,直到ERXRDPT 所指单元(不包括该单元)。
注意,该REG与释放缓冲区的空间操作相关.4).ERXWRPT(分为H/L两个)接收写指针:--手册P17,P33, 定义接收硬件收到的数据写入的FIFO 中的具体位置。
在正常操作中,接收硬件(指网络接口方向)将数据顺序写入ERXWRPT所指单元。
注意,该REG为”只读”,且与释放缓冲区的空间操作相关.5).ETXST(分为H/L两个)发送缓区起始地址:--手册P17,在整个以太网数据缓冲区中,定义待发送数据区的首地址6).ETXND(分为H/L两个)发送缓区结束地址:--手册P17,在整个以太网数据缓冲区中,定义待发送数据区的尾地址7).ERXST(分为H/L两个)接收缓区起始地址:--手册P17, 在整个以太网数据缓冲区中,定义接收硬件可以写入数据的缓冲区首地址.8).ERXND(分为H/L两个)接收缓区结束地址:--手册P17, 在整个以太网数据缓冲区中,定义接收硬件可以写入数据的缓冲区尾地址.9).EPKTCNT(8bits)以太网数据包计数器:--手册P43,P45,当硬件允许的时候,每次收满一个以太网数据包(>64bytes)时,EPKTCNT+1,最大值为255,此时不论缓冲是否还有空闲也不再接收数据.每次前移ERXRDPT(即释放接收缓冲区操作)后,EPKTCNT-1,最小值为0.注意:在以上9个REG中,名称中带有”X”的规定的地址都是给以太网接收器使用的(即:从以太网一侧访问8K缓存),只有ERDPT和EWRPT是MCU通过SPI接口访问8K缓冲区用的.访问的关系如下图:其中ERXWRPT和 ERXRDPT可以指向同一地址,应为ENC28J60接收时会从ERXWRPT 指向的地址一直写到ERXRDPT指向的地址前一个空间(即手册所谓的”不包括ERXRDPT指向的单元”).此时整个接收缓冲区全部可用.8K空间中,实际用来进行发送缓冲的空间由寄存器组ETXST和ETXND确定,实际用来进行接受缓冲的空间由寄存器组ERXST和ERXND确定.显然,8K空间中可以多余一些什么也不用的位置.2.MII和PHY寄存器的操作:PHY寄存器负责对PHY接口的配置,MCU不能直接从SPI接口访问这些REG,但是主控可以通过MAC组的一组特殊控制REG来访问PHY控制寄存器,MAC组中的这些特殊的控制REG即称为MII接口寄存器.对MCU而言,不会有直接访问PHY的可能,所有的PHY操作都必须经过MII寄存器来完成.还需注意,PHY有部分为16bits,写入的时候必须先写低8bits,当写入高8bits的时候控制的设定将立即起效.3.控制器结构和初始化过程初始化的过程应该是:初始化ETH组REG--->初始化MAC组REG--->通过MII初始化PHY组REG(需要查询硬件稳定)Step1:ETH组控制寄存器初始化1).EIE初始化--手册P67,以太网中断允许控制主控SPI写控制REG(WCR),发出2byte,REG地址0h1b,数据为:0b010\11011+0bAAAAAAAA(A--8bits实际数据)2). EIR查询--手册P68,以太网中断状态获取主控SPI读控制REG(RCR),发出2byte, REG地址0h1C,数据为:0b010\11100+0bXXXXXXXX(X—为了保持SPCK发出的无效数)读取的有效数据在SPI发送的第二个有效字节返回.3).ESTAT查询--手册P66,获得PHY就绪状态(以及以太网的各种错误状态)主控SPI读控制REG(RCR),发出2byte, REG地址0h1D,数据为:0b010\11101+0bXXXXXXXX(X—为了保持SPCK发出的无效数)读取的有效数据在SPI发送的第二个有效字节返回.4).ECON2初始化--手册P16,IC节能控制,数据包指针寄存器控制主控SPI写控制REG(WCR),发出2byte,REG地址0h1E,数据为:0b010\11110+0bAAAAAAAA(A--8bits实际数据)5).ECON1初始化--手册P15,特别注意其中对BANK0~3的选择位,写不同的控制REG需要多次改变Bank0~3的选择.--手册P16,IC节能控制,数据包指针寄存器控制主控SPI写控制REG(WCR),发出2byte,REG地址0h1F,数据为:0b010\11111+0bAAAAAAAA(A--8bits实际数据)6).ERXFCON接收过滤器初始化--手册P48,首先需要写ECON1,选择访问Bank1,此后主控SPI写控制REG(WCR),发出2byte,REG地址0h18,数据为:0b010\11000+0bAAAAAAAA(A--8bits实际数据)Step2:ETH组地址寄存器初始化1).寄存器组ETXST和ETXND就位--定义发送缓冲区范围ETXSTL/H主控SPI写控制REG(WCR),发出4byte,REG地址0h04(L),0h05(H),数据为:0b010\00100+0bAAAAAAAA(A--8bits实际数据,ETXSTL)0b010\00101+0bAAAAAAAA(A--8bits实际数据,ETXSTH)ETXNDL/H主控SPI写控制REG(WCR),发出4byte,REG地址0h06(L),0h07(H),数据为:0b010\00110+0bAAAAAAAA(A--8bits实际数据,ETXNDL)0b010\00111+0bAAAAAAAA(A--8bits实际数据,ETXNDH)2). 寄存器组ERXST和ERXND就位--定义接收缓冲区范围ERXSTL/H主控SPI写控制REG(WCR),发出4byte,REG地址0h08(L),0h09(H),数据为:0b010\01000+0bAAAAAAAA(A--8bits实际数据,ERXSTL)0b010\01001+0bAAAAAAAA(A--8bits实际数据,ERXSTH)ERXNDL/H主控SPI写控制REG(WCR),发出4byte,REG地址0h0a(L),0h0b(H),数据为:0b010\01010+0bAAAAAAAA(A--8bits实际数据,ERXNDL)0b010\01011+0bAAAAAAAA(A--8bits实际数据,ERXNDH)3). ERXWRPT和ERXRDPT就位--注意其范围要随应用中定义的数据帧的大小变化,且每次处理完接收以后要操作ERXRDPT释放空间.ERXWRPTL/H主控SPI写控制REG(WCR),发出4byte,REG地址0h0C(L),0h0D(H),数据为:0b010\01100+0bAAAAAAAA(A--8bits实际数据, ERXRDPTL)0b010\01101+0bAAAAAAAA(A--8bits实际数据, ERXRDPTH)注意:初始化时, ERXWRPTL/H一般取等于ERXSTL/HERXRDPTL/H主控SPI写控制REG(WCR),发出4byte,REG地址0h0E(L),0h0F(H),数据为:0b010\01110+0bAAAAAAAA(A--8bits实际数据, ERXRDPTL)0b010\01111+0bAAAAAAAA(A--8bits实际数据, ERXRDPTH)注意: ERXRDPT与ERXWRPT的差值应该大于1个以太网数据帧的长度,如果ERXRDPT=ERXWRPT则整个接收缓冲区可以连续使用.4).根据MCU从以太网接收数据的需要,ERDPT就位ERDPTL/H主控SPI写控制REG(WCR),发出4byte,REG地址0h00(L),0h01(H),数据为:0b010\00000+0bAAAAAAAA(A--8bits实际数据,ERDPTL)0b010\00001+0bAAAAAAAA(A--8bits实际数据,ERDPTH)5).根据MCU向以太网发送数据的需要,EWRPT就位EWRPTL/H主控SPI写控制REG(WCR),发出4byte,REG地址0h02(L),0h03(H),数据为:0b010\00010+0bAAAAAAAA(A--8bits实际数据,EWRPTL)0b010\00011+0bAAAAAAAA(A--8bits实际数据,EWRPTH)Step3:MAC组寄存器初始化(注意:MAC组寄存器映射在Bank2/3,访问前需要调整ECON1中的BSEL0/1)如果初始化发生在上电复位之后,初始化前必须查询ESTAT.CLKRDY(手册P33)MAC寄存器的初始化顺序不重要,一般按照(手册P34)说明的顺序:1).MACON2.MARST位清0—MAC初始化退出.主控SPI写控制REG(WCR),发出2byte,REG地址0h01(Bank2)数据为:0b010\00001+0bAAAAAAAA(A--8bits实际数据)2).MACON1初始化--MARXEN位置1使能MAC接收.--启动全双工方式,TXPAUS和RXPAUS位置1.主控SPI写控制REG(WCR),发出2byte,REG地址0h00(Bank2)数据为:0b010\00000+0bAAAAAAAA(A--8bits实际数据)3).MACON3初始化--将PADCFG.TXCRCEN.和FULDPX位置1,使能帧自动填充,使能自动CRC生成.(要注意其中FRMLNEN位的使用).主控SPI写控制REG(WCR),发出2byte,REG地址0h02(Bank2)数据为:0b010\00010+0bAAAAAAAA(A--8bits实际数据)4).MACON4一般保持默认值5).MAMXFL(16bitsREG,分为H/L两部分)就位--确定网络帧的最大字节数(暂定义应用中的帧长度都为64bytes).主控SPI写控制REG(WCR),发出4byte,REG地址(Bank2)0h0A(L),0h0B(H),数据为:0b010\01010+0bAAAAAAAA(A--8bits实际数据, MAMXFLL)0b010\01011+0bAAAAAAAA(A--8bits实际数据, MAMXFLH)6).MABBIPG就位--背对背包时间间隔就位,全双工时置入值固定为15h主控SPI写控制REG(WCR),发出2byte,REG地址0h04(Bank2)数据为:0b010\00100+0b000101017).MAIPGL就位--非背对背包时间间隔就位, 全双工时置入值固定为12h(L)和0Ch(H)主控SPI写控制REG(WCR),发出4byte,REG地址(Bank2) 0h06(L)0h07(H)数据为:0b010\00110+0b00010010(MAIPGLL)0b010\00111+0b00001100(MAIPGLH)注意:正常使用时,应该采用全双工方式,此时MACLCON1/2可保持默认值8).MAC地址就位(映射在Bank3)--将6字节的MAC地址写入寄存器组:MAADR0~MAADR5.主控SPI写控制REG(WCR),发出6byte,REG地址(Bank3) 0h00~0h05数据为:0b010\00000+0bAAAAAAAA(A--8bits实际数据,MAADR1)0b010\00001+0bAAAAAAAA(A--8bits实际数据,MAADR0)0b010\00010+0bAAAAAAAA(A--8bits实际数据,MAADR3)0b010\00011+0bAAAAAAAA(A--8bits实际数据,MAADR2)0b010\00100+0bAAAAAAAA(A--8bits实际数据,MAADR5)0b010\00101+0bAAAAAAAA(A--8bits实际数据,MAADR4)Step4:PHY组寄存器初始化注意: 如果初始化发生在上电复位之后,初始化前必须查询ESTAT.CLKRDY(手册P33)(注意:PHY组寄存器的MII接口REG映射在Bank2,访问前需要调整ECON1中的BSEL0/1)与PHY相关的MII寄存器共有6个分别是:MICON—手册P21,MII控制REGMICMD—手册P21,MII命令REGMIREGADR—手册P19,PHY访问地址REGMIWRL/H—手册P19,PHY写数据REG高/低,注意,该REG组必须先写入L再写入H,写入H 会触发MII控制事件.MIRDL/H—手册P19,PHY读数据REG高/低.在读之前应将MICMD的MIIRD位置1,这样可以触发PHY事件且使MISTAT.BUSY=1,当MII获得了PHY值以后,MIIRD不会自动清0.所以在查询MISTAT.BUSY=0以后要手动清0.MISTAT—手册P22,MII状态REG,反映PHY的状态,在读/写PHY之前应该先查询此REG当MISTAT.BUSY=0时才可以进行操作.根据手册P38,一般只需要配置3个PHY模块并且要查询PHY的工作状态1).PHCON1的手动操作--虽然可以通过外接LED的方式确定半双工/全双工方式,但是手工设置PHCON1.PDPXMD位的值是更加安全的方法,同时也要手工修改MACON3中的FULDPX位.--PHY地址00h,通过MII操作时,流程在手册P19主控SPI写控制REG(WCR),发出2byte*3,给MIREGADR,MIWRL/H 3个REG地址(Bank2)0h14(MIREGADR),0h16(MIWRL),0h17(MIWRH),数据为:0b010\10100+0b00000000(字节1—MIREGADR的地址,字节2—写入PHCON1的地址00h)0b010\10110+0bAAAAAAAA(字节1—MIREGADR的地址, 字节2—写入MIWRL的8bits 实际数据—L字节应该是写入PHCON1的实际值)0b010\10111+0b00000000(字节1—MIREGADR的地址, 字节2—写入MIWRH的8bits 实际数据,在这里发出的数据无效,仅触发PHY事件).写入后,MII自动触发PHY事件,MISTAT.BUSY自动置1.2).PHLCON的设置--根据外结LED电路的实际结构,有可能要修改这个REG.--PHY地址00h,通过MII操作时,流程在手册P19主控SPI写控制REG(WCR),发出2byte*3,给MIREGADR,MIWRL/H 3个REG地址(Bank2)0h14(MIREGADR),0h16(MIWRL),0h17(MIWRH),数据为:0b010\10100+0b00010100(字节1—MIREGADR的地址,字节2—写入PHLCON的地址14h)0b010\10110+0bAAAAAAAA(字节1—MIREGADR的地址, 字节2—写入MIWRL的8bits 实际数据—L字节应该是写入PHLCON的实际值)0b010\10111+0b00000000(字节1—MIREGADR的地址, 字节2—写入MIWRH的8bits 实际数据,在这里发出的数据无效,仅触发PHY事件).写入后,MII自动触发PHY事件,MISTAT.BUSY自动置1.3).PHCON2的设置--一般全双工状态时可以保持其默认值,但是注意其中的TXDIS位可以关闭PHY的硬件发送. 主控SPI写控制REG(WCR),发出2byte*3,给MIREGADR,MIWRL/H 3个REG地址(Bank2)0h14(MIREGADR),0h16(MIWRL),0h17(MIWRH),数据为:0b010\10100+0b00000000(字节1—MIREGADR的地址,字节2—写入PHCON2的地址11h)0b010\10110+0bAAAAAAAA(字节1—MIREGADR的地址, 字节2—写入MIWRL的8bits 实际数据—L字节应该是写入PHCON2的实际值)0b010\10111+0b00000000(字节1—MIREGADR的地址, 字节2—写入MIWRH的8bits 实际数据,在这里发出的数据无效,仅触发PHY事件).写入后,MII自动触发PHY事件,MISTAT.BUSY自动置1.特别注意:PHY寄存器不能直接访问,需要通过MII寄存器的间接操作.4).查询MISTAT状态--主控SPI读控制REG(RCR),发出3byte, REG地址0h0A(Bank3),数据为:0b010\01010+0bXXXXXXXX+0bXXXXXXXX(X—为了保持SPCK发出的无效数) 读取的有效数据在SPI发送的第三个有效字节返回.。
基于ENC28J60的嵌入式系统以太网接口设计
第28卷第3期2007年 6月河南科技大学学报:自然科学版Journal of Henan University of Science and Technol ogy:Natural Science Vol .28No .3Jun .2007基金项目:教育部铁路电力机车牵引及控制项目(V21-W17041)作者简介:张中央(1966-),男,河南孟津人,副教授,从事电力电子技术、电力机车控制、牵引与制动等教学与研究工作.收稿日期:2006-10-13文章编号:1672-6871(2007)03-0049-05基于ENC28J 60的嵌入式系统以太网接口设计张中央,陶乃彬(郑州铁路职业技术学院,河南郑州450052)摘要:介绍了一种基于新型独立以太网控制芯片E NC28J60的以太网通讯接口的软硬件设计方法。
文中详细介绍了新型独立以太网控制器E NC28J60的结构、功能、外围电路以及E NC28J60与C8051F040的SP I 通讯和基于两者的TCP /I P 协议栈的实现的软硬件设计。
E NC28J60以太网控制器采用标准的SP I 串行接口,只需4条连线即可实现与单片机连接,有利于在小型系统上实现以太网功能。
关键词:E NC28J60芯片;以太网;接口;C8051F040;T CP /I P 设计中图分类号:TP393.11文献标识码:A0 前言随着互联网的普及和以太网的迅速发展,基于以太网的设备控制越来越多,发展也越来越快。
目前,以太网已经广泛地应用于各种计算机网络,通过以太网及T CP /I P 协议栈[1]可以使不同的网络控制设备实现互连、交换数据。
用以太网实现嵌入式系统的网络连接有多种方案,传统的多器件以太网连接方案是通过MCU 扩展以太网控制器来实现的,必要时还需要扩展外部RAM 和ROM ,虽然这种方案应用起来不是很困难,但所用外部元件数量较多,系统开销较大,最大的缺点是稳定性不高。
ENC28J60
1前言嵌入式以太网开发,可以分为两个部分,一个是以太网收发芯片的使用,一个是嵌入式以太网协议栈的实现。
以太网收发芯片的使用要比串口收发芯片的使用复杂的多,市面上流通比较广泛的以太网收发芯片种类还不少,有SPI接口的ENC28J60,也有并口形式的RTL8019S,CS8900A等。
嵌入式以太网协议栈有著名的uIP协议栈,Lwip协议栈,还有其他嵌入式高手开发的协议栈。
无论是硬件还是软件,都无法分出高低,适合项目需求的才是最好的。
1.1 写作理由再说明一下我写作的理由。
以前从淘宝上购买过ENC28J60,店家信誓旦旦地说能提供51AVR LPC STM32等多个平台的代码,可以实现一个网页控制LED。
头脑一热买了回来,买回来才发现,店家提供的资料零零散散,不易弄懂。
几经周转,发现原来这些ENC28J60的代码都出自一个地方——AVRNET,源自老外的一个开源项目。
把最原始的代码拿来细细品味,以太网协议就不那么神秘了。
在这里说一下ENC28J60的使用,熟悉了ENC28J60的驱动可以分几步走。
第一步,通过ENC28J60移植uIP或者lwIP协议栈,实现TCP或是UDP通信,第二,顺着AVRNET项目走,实现一个简单的web服务器,运行静态或者动态网页。
嵌入式以太网和计算机以太网开发不同,对于TCP通信而言没有socket套接字,对于网页编程而言也没有IIS或PHP,所示实现起来会相对麻烦,但是也非常有乐趣。
1.2 资料准备嵌入式以太网开发是非常复杂的工作,在开始之前最好先大致浏览ENC28J60的使用手册。
除此之外,需要认真阅读TCP IP相关知识,推荐一本图书《嵌入式Internet TCP/IP基础、实现和应用》。
嵌入式开发是一个反复借鉴的过程,该部分代码参考了AVRNET项目和奋斗开发板的相关范例。
【AVRNET项目网址链接】虽然AVRNET项目所使用的MCU为ATmega32,但是认真阅读源代码之后也可以方便的移植到其他的MCU平台,例如STM8、STM32和MSP430等。
ENC28J60的AVR单片机接口设计与网络通信编程
ENC28J60的AVR单片机接口设计与网络通信编程作者:黄维铭来源:《数字化用户》2013年第13期本文介绍了带有行业标准串行外设接口(Serial Peripheral Interface,SPI)的独立以太网控制器ENC28J60 在AVR单片机接口开发设计中的应用,以及单片机控制ENC28J60的程序及计算机与ENC28J60进行网络通信的有关程序设计段。
一、概述带SPI接口的ENC28J60由七个主要功能模块组成:1. SPI 接口:充当主控制器和ENC28J60 之间通信通道;2. 控制寄存器:用于控制和监视ENC28J60;3. 双端口RAM缓冲器:用于接收和发送数据包;4. 判优器:当DMA、发送和接收模块发出请求时对RAM 缓冲器的访问进行控制;5. 总线接口:对通过SPI 接收的数据和命令进行解析;6. MAC (Medium Access Control)模块:实现符合IEEE 802.3 标准的MAC 逻辑;7. PHY(物理层)模块——对双绞线上的模拟数据进行编码和译码。
该器件还包括其他支持模块,诸如振荡器、片内稳压器、电平变换器(提供可以接受5V 电压的I/O 引脚)和系统控制逻辑。
二、器件结构接口示意框图ENC28J60 中所有的存储器都是以静态RAM 的方式实现的。
ENC28J60 中有三种类型的存储器:控制寄存器、以太网缓冲器和PHY寄存器,控制寄存器类存储器包含控制寄存器(Control Register,CR)。
它们用于进行ENC28J60 的配置、控制和状态获取。
可以通过SPI 接口直接读写这些控制寄存器。
PHY 寄存器用于进行PHY 模块的配置、控制和状态获取。
PHY 寄存器用于进行PHY 模块的配置、控制和状态获取。
不可以通过SPI 接口直接访问这些寄存器,只可通过MAC 中的MII (Media Independent Interface)访问这些寄存器。
基于ENC28J60以太网通信接口的设计与实现
O前言
在嵌入式系统的开发中,比较常用的独立以太网控 制器都是为个人计算机系统而设计的,如RTL8019As、 cs8900A等,这些器件不仅结构复杂、体积大,而且价 格相对昂贵。目前市场上大部分以太网控制器封装的 引脚数目庞大,RTL8019As、cs8900A均为100脚。 ENc28J60是美国微芯科技公司近期推出的28引脚独 立以太网控制器,兼容IEEE802.3协议,与微控制器 的连接采用最高速度可达10 MB/s的业界标准sPI接 口,既能提供以太网通信的相应功能,又可以大大简化 设计、减小空间、降低成本。
TcP/IP参考模型
Mjcrochip协议栈
匿
图2 Microchip TcP/IP协议栈
2.3以太网通信实现
ENC28J60和PIcl8F4550通过sPI连接来进行通 信日141,PIcl8F4550对ENc28J60的各种操作均通过sPI 接口进行,包括寄存器的设置,数据的发送和接收。 PICl8F4550的sPI工作在主动方式,即ENc28J60的 sPI时钟信号由PIcl8F4550提供,sPI通信速率设置 成5 MB/s。要实现以太网通信首先要设置ENc28J60 的MAc地址与IP地址、子网掩码以及网关等,这些参 数可以用宏定义放在单片机ROM里,也可以以数据 的方式放在单片机的E2PROM里。在协议栈中, “StackTask”和“ARPTask”函数实现ARP和ICMP协 议,这两个函数作为必要的任务驻留在无限循环的函 数里。设定好ENc28J60的IP地址后,PC机可以通过 ping该IP地址的方式来查看通信接口的ARP协议和 IcMP协议是否正常。
基于Micmchip TcP/IP协议栈uDP和TcP协议 的应用程序需要用户根据不同的应用进行编程,本研 究实现了一个基于uDP的应用程序,通过ss=uD—
浅析ENC28J60模块在单片机以太网通信中重置问题
浅析ENC28J60模块在单片机以太网通信中重置问题作者:杨金石来源:《科学与财富》2015年第29期摘要:针对ENC28J60模块稳定性问题,采用周期重置的方式来提高其连续运行的稳定性;结合网络状态实时监测,对周期重置方式进行改进,改善了系统联网的质量。
关键词:ENC28J60 单片机稳定性一、引言单片机系统作为自动化控制的一个核心部件,随着其应用范围的不断扩大,不同单片机控制系统之间数据交互的需求也在不断的增加。
传统的单片机之间通信一般是采用RS232串口来实现,该标准典型的传输速率只有9600bps,同时其传输距离也非常有限,很难适应不断发生的应用需求。
相比于串口通信,以太网通信无论是通信速率还是通信距离都有很大的提升;美国微芯公司在2005年推出的ENC28J60是一个能够用于单片机以太网接入的集成电路芯片,该芯片采用28引脚的封装,自带SPI接口能够与带有该类型接口的单片机直接进行高速的数据交互。
通过这种方式,可以将单片机控制系统接入到以太网中实现远程高速的数据通信。
然而,在实际的工程实践过程中,在诸如数据通信量过大、系统工作时间太长等因素的影响下,容易导致ENC28J60通信模块无法正常进行数据通信,影响了单片机系统正常功能的发挥。
在排除单片机系统自身控制程序问题的前提下,笔者尝试通过以下方式来对该问题进行解决。
二、对ENC28J60模块进行周期重置该方法设计思路非常简单,就是在单片机中启动一个定时计数器,通过对定时计数器相关寄存器的初始化和单片机控制程序设计,得到一个符合系统需求的ENC28J60模块重置周期,在周期到来后,由单片机系统通过SPI接口向ENC28J60模块发送重置指令,实现对该模块的周期重置。
通过测试,发现在该方式下系统能够在连续工作数小时(12小时以上)后,仍能进行数据通信。
但是进一步的测试发现,该方式下,会出现较频繁的数据丢包现象。
通过分析,发现导致丢包的原因是在ENC28J60模块进行数据接收或者是发送过程中,该模块设定的重置周期到了,此时,由定时计数器产生的中断将使单片机由数据收发流程直接跳转到中断服务程序,进行ENC28J60模块重置工作;该模块重置后,ENC28J60的接收和发送缓存将被清空,虽然单片机控制程序返回到数据接收/发送程序,但是重置时正在接收或发送的数据包已经被清除,从而导致丢包。
ENC28J60_cn中文手册
2
20
3
19
4 ENC28J60 18
5
17
6
16
7
15
8 9 1011121314
VDDOSC
OSC2 OSC1 VSSOSC VSSPLL VDDPLL VDDRX
2006 Microchip Technology Inc.
高级信息
DS39662A_CN 第 1 页
ENC28J60
目录
1.0 概述 ... 2.0 外部连接 ... 3.0 存储器构成 ... 4.0 串行外设接口 (SPI) ... 5.0 以太网概述 ... 6.0 初始化 ... 7.0 发送和接收数据包 ... 8.0 接收过滤器 ... 9.0 双工模式配置和协商 ... 10.0 流量控制 ... 11.0 复位 ... 12.0 中断 ... 13.0 直接存储器访问控制器 ... 14.0 掉电 ... 15.0 内置自测试控制器 ... 16.0 电气特性 ... 17.0 封装信息 ... 索引 ... 客户支持 ... 系统信息和升级热线 ... 读者反馈表 ... 产品标识体系 ...
... 3 .. 5 .. 11 . 25 .. 31 . 33 . 39 .. 47 ... 53 ... 55 . 59 . 65 .. 75 . 77 . 79 ... 83 ... 89 .. 95 . 97 . 97 ... 98 .. 99
致客户
我们旨在提供᳔佳文档供客户正确使用 Microchip 产品。为此,我们将不断改进出版物的内容和质量,使之更好地满足您的要求。 出版 物的质量将随新文档及更新版本的推出而得到提升。 如果您对本出版物有任何问题和建议,请通过电子邮件联系我公司 TRC 经理,电子邮件地址为 CTRC@,或将本 数据手册 后附的 《读者反馈表》传真到 86-21-5407 5066。我们期待您的反馈。
STM32F103VET6和ENC28J60的嵌入式以太网接口设计
STM32F103VET6和ENC28J60的嵌入式以太网接口设计张庆辉;马延立【摘要】介绍了一种基于STM32F103VET6微处理器和以太网控制芯片ENC28J60的嵌入式以太网接口的设计方案.分析了基于Cortex-M3内核的微处理器STM32F103VET6的功能和特点,以及以太网控制芯片ENC28J60的主要性能和结构特性,并给出了接口的硬件和软件设计方案.本接口尺寸小、性能高,适合于便携式仪器仪表中的应用.%An embedded Ethernet interface is designed based on STM32F103VET6 microprocessor and Ethernet controller chip ENC28J60. The functions and features of microprocessor STM32F103VET6 based on Cortex-M3 core are analyzed,and main performances and structural properties of Ethernet controller chip ENC28J60 are described. Hardware and software design of the interface are given. The interface has small size and high performance, and it is used for portable instruments.【期刊名称】《单片机与嵌入式系统应用》【年(卷),期】2012(012)009【总页数】4页(P23-25,32)【关键词】STM32F103VET6;ENC28J60;嵌入式以太网【作者】张庆辉;马延立【作者单位】河南工业大学信息科学与工程学院,郑州450001【正文语种】中文【中图分类】TP393.11引言随着以太网技术的普及和发展,基于以太网的应用接口设备也迅速普及到医疗设备、工厂电力系统等领域。
奋斗STM32开发板uIP1.0 以太网例程讲解
奋斗版 STM32 开发板例程文档———uIP1.0 ENC28J60 以太网例程uIP1.0 ENC28J60 以太网例程实验平台:奋斗版STM32开发板V2、V2.1、V3 实验内容:本例程演示了在奋斗STM32开发板上完成ARP,ICMP,TCP服务器、WEB 服务器以及UDP服务器,该实验学习了基于uIP1.0网络协议栈的程序编制。
预先需要掌握的知识1.ENC28J60ENC28J60是MICROCHIP公司的带SPI 接口的独立以太网控制器, 以太网控制器特性 • IEEE 802.3 兼容的以太网控制器 • 集成MAC 和10 BASE-T PHY • 接收器和冲突抑制电路 • 支持一个带自动极性检测和校正的10BASE-T 端口 • 支持全双工和半双工模式 • 可编程在发生冲突时自动重发 • 可编程填充和CRC 生成 • 可编程自动拒绝错误数据包 • 最高速度可达10 Mb/s 的SPI 接口 缓冲器 • 8 KB 发送/ 接收数据包双端口SRAM • 可配置发送/ 接收缓冲器大小 • 硬件管理的循环接收FIFO • 字节宽度的随机访问和顺序访问(地址自动递增) • 用于快速数据传送的内部DMA • 硬件支持的IP 校验和计算 介质访问控制器(MAC)特性 • 支持单播、组播和广播数据包 • 可编程数据包过滤,并在以下事件的逻辑“与” 和“或”结果为真时唤醒主机: - 单播目标地址 - 组播地址 广播地址 - Magic Packet - 由64 位哈希表定义的组目标地址 - 多达64 字节的可编程模式匹配(偏移量可由用户定义)淘宝店铺:1奋斗版 STM32 开发板例程文档———uIP1.0 ENC28J60 以太网例程• 环回模式 物理层(PHY)特性 • 整形输出滤波器 • 环回模式 工作特性 • 两个用来表示连接、发送、接收、冲突和全/ 半双工状态的可编程LED 输出 • 使用两个中断引脚的七个中断源 • 25 MHz 时钟 • 带可编程预分频器的时钟输出引脚 • 工作电压范围是3.14V 到3.45V • TTL 电平输入 • 温度范围:-40°C 到+85°C (工业级), 0°C 到 +70°C (商业级)(仅SSOP 封装) • 28 引脚SPDIP、SSOP、SOIC 和QFN 封装概述ENC28J60 是带有行业标准串行外设接口(SerialPeripheral Interface,SPI)的独立以太网控制器。
ENC28J60驱动程序说明
Enc28j60以太网芯片驱动程序简介本介绍可分为三块内容:1.以太网数据帧结构符合IEEE802.3标准的以太网帧的长度是介于64-1516字节之间。
主要由目标MAC地址、源MAC地址、类型/长度字段、数据有效负载、可选填充字段和循环冗余校验组成,另外在通过以太网介质发送数据包时,一个7字节的前导字段和一字节的帧起始定界符被附加到以太网数据包的开头。
以太网数据包的结构如图1所示。
图1以太网数据帧结构图ENC28J60在发送或接收数据包时由以下几点值得关注:首先,ENC28J60具有一个接收过滤器可以丢弃或接收具有组播、广播或单播目标地址的数据包。
其次,在数据字段处:以太网数据字段的长度可以在0-1500字节之间变换,超过这一范围的数据包是违反以太网标准的,这些包将会被大多数以太网节点丢弃。
若设置ENC28J60的巨大帧使能位为1,可以发送和接收超大规格数据包。
在数据域中的填充字段是在数据字段小于46字节时起填充作用。
ENC28J60在发送数据包时,会自动填充0。
ENC28J60在接收时自动拒绝小于18字节的数据包。
数据填充亦可由主控芯片来配置。
最后,在CRC处:ENC28J60在接收数据包时将检查每个传入数据包的CRC,通过检测ERXFCON.CRCEN位来判断输入数据包的CRC是否正确。
ENC28J60在发送数据包时,将自动生成一个有效的CRC并发送它。
发送数据包的CRC亦可由主控芯片来提供。
2.驱动程序介绍(1)ENC28J60的寄存器读写规则由于ENC28J60芯片采用的是SPI串行接口模式,其对内部寄存器读写的规则是先发操作码<前3bit>+寄存器地址<后5bit>,再发送欲操作数据。
通过不同操作码来判别操作时读寄存器(缓存区)还是写寄存器(缓冲区)或是其它。
(2)ENC28J60芯片初始化程序ENC28J60发送和接收数据包前必须对内进行初始化设置,通常在复位后完成,不需再更改。
基于ENC28J60的以太网通信接口设计
基于ENC28J60的以太网通信接口设计作者:王兴伟解云峰来源:《科学与信息化》2017年第08期摘要针对电子系统的数据通信需求,设计了基于ENC28J60芯片的嵌入式以太网通信接口,在简要介绍ENC28J60芯片的基础上,重点阐述了以太网接口设计,对ENC28J60 与单片机的SPI 通讯进行了阐述。
关键词嵌入式;ENC28J60;SPI1 引言随着工业以太网的出现,使得电路系统内部实现信息共享,而且还能够将信息上传至Internet,实现更高等级的信息共享,用户不仅能够在一个系统内进行数据查询,甚至在多个不同系统内也能够实现实时数据查询。
2 以太网控制器ENC28J60的主要特点ENC28J60是Microchip Technology公司推出的28引脚的独立以太网控制器,它与RTL8019、CS8900A等传统的网络芯片[1]相比具有引脚少、体积小、接口简单等优点。
ENC28J60由7个主要功能模块组成:SPI 接口、控制寄存器、双端口RAM缓冲器、判优器、总线接口、MAC 模块、PHY 模块。
3 接口设计接口电路的主控制器选用STC12C5412AD型号单片机,以太网接口则主要由ENC28J60、网络变压器、RJ45接口构成。
系统采用增强型单片机STC12C5412AD 作为处理器。
STC12C5412AD 是一个具有8051 内核的单时钟周期单片机,指令代码与8051 完全兼容,但执行的效率大大提升。
而且SPI工作模式应可满足ENC28j60对SPI模式的特定要求。
4 软件设计ENC28J60与单片机的连接通过SPI实现。
单片机通过SPI发送指令到ENC28J60,以实现对其寄存器设置、数据缓冲区的读写等。
首先开启SPI复位模式、设置SPI上升沿传送数据,字符长度为8。
然后设置SPI操作控制寄存器,禁止接受溢出中断,SPICLK信号延时半个周期,设置SPI为主动模式,禁止产生发生/接收中断。
以太网接口芯片W5500与ENC28J60对比
以太网接口芯片W5500与ENC28J60对比目前较为成熟的单片机接入以太网方案:W5100和ENC28J60,都是被常常使用到的芯片,这两种方案也可以说是硬件协议栈和软件协议栈的典型代表,都经得住市场考验。
除了在传统单片机的以太网接入中被广泛使用,也能看到他们在开源硬件的以太网扩展以及物联网应用等方面发挥的重要作用。
W5500是WIZnet最新的以太网芯片,这里就拿W5500来做比较。
表1为W5500与ENC28J60基本参数对比表。
表1 W5500于ENC28J60基本参数对比1、硬件参数对比(1)ENC28J60芯片结构方面,结构比较简单,通过内置MAC+PHY芯片来实现简单的以太网物理层连接,用户需要自己创建或市场上的第三方库方能实现应用层的设计;PHY芯片方面,内置了一块10M BASE-T 芯片,基本可以满足目前通信需要;接口方面,采用最高10MHz的SPI接口;缓存方面,ENC28J60仅提供8KB内部收发缓存,在目前处理大量数据要求的背景下显得捉襟见肘。
(2)W5500芯片结构方面,内部由TCP/IP协议栈+MAC+PHY构成,拥有非常完善的官方应用库,极大缩短开发周期,可以完美实现以太网接入要求;PHY芯片方面,10M/100M BASE-T自适应芯片让W5500表现更为出色;接口方面,W5500采用新的高效SPI协议支持80MHz速率;缓存方面,W5500内置32KB收发缓存,用户可以同时使用8个硬件Socket独立通信,且各个Socket之间互不影响。
2、TCP/IP协议栈ENC28J60采用的是传统的软协议操作,需要主控MCU不断的响应中断,这在很大程度上占用了MCU的资源来跑软协议栈。
经过测试发现,随着需要响应的事件增多,MCU的处理效率直线下降,会严重影响通信质量。
W5500采用的是最新的TOE(TCP卸载引擎)技术,不同于传统的软协议栈,通过内置TCP/IP硬件协议栈也就是硬件逻辑电路,在W5500芯片内完成TCP/IP握手请求,基本上不占用MCU内部资源,能够极大地提高MCU工作效率。
零死角玩转STM32系统篇
t y w藏书友情提示t y w藏书《零死角玩转STM32》系列教程由初级篇、中级篇、高级篇、系统篇、四个部分组成,根据野火STM32开发板旧版教程升级而来,且经过重新深入编写,重新排版,更适合初学者,步步为营,从入门到精通,从裸奔到系统,让您零死角玩转STM32。
M3的世界,与野火同行,乐意惬无边。
另外,野火团队历时一年精心打造的《STM32库开发实战指南》将于今年10月份由机械工业出版社出版,该书的排版更适于纸质书本阅读以及更有利于查阅资料。
内容上会给你带来更多的惊喜。
是一本学习STM32必备的工具书。
敬请期待!前言uC/OS是一个微型的实时操作系统,包括了一个操作系统最基本的一些特性,如任务调度、任务通信、内存管理、中断管理、定时管理等。
而且这是一个代码完全开放的实时操作系统,简单明了的结构和严谨的代码风格,非常适合初涉嵌入式操作系统的人士学习。
很多人在学习STM32中,都想亲自移植一下uC/OS,而不是总是用别人已经移植好的。
在我学习uC/OS的过程中,查找了很多资料,也看过很多关于如何移植uC/OS到STM32处理器上的教程,但都不尽人意,主要是写得太随意了,思路很乱,读者看到最后还是不确定该怎样移植。
为此,我决定写这个教程,让广大读者真正了解怎样移植。
学前建议:C语言 + 数据结构Wildfire Team2011年11月3日1、官方源代码介绍首先我们下载源代码,官方下载地址:/page/downloads/ports/st/stm32(下载资料需要注册帐号)或者网盘下载:/c0jnhmfxcp我们需要下载的就是下面这个,因为我用到的开发板芯片是STM32F103VET6注意:下载的源代码开发环境是IAR编译器的。
我们使用的uCOS是2.86版本。
下载解压后可以看到Micrium含有三个文件夹:文件名说明AppNote s 包含uCOS-II的说明文件,其中文件Micrium\AppNotes\AN1xxx-RTOS\AN1018-uCOS-II-Cortex-M3\AN-1018.pdf是很重要的。
ENC28J60网络模块使用_AN1203
ALIENTEK MiniSTM32开发板
AN1203
AN1203 ALIENTEK ENC28J60 网络模块使用
本应用文档(AN1203,对应 ALIENTEK MINISTM32 扩展实验 21)将教大家如何在 ALIENTEK MiniSTM32 开发板上使用 ALIENTEK ENC28J60 网络模块。我们将使用 ALIENTEK ENC28J60 网 络模块和 uIP 1.0 实现:TCP 服务器、TCP 客服端以及 WEB 服务器等三个功能。
第三步,配置 uip-conf.h 里面的宏定义选项。主要用于设置 TCP 最大连接数、TCP 监 听端口数、CPU 大小端模式等,这个大家根据自己需要配置即可。
通过以上 3 步的修改,我们基本上就完成了 uIP 的移植。在使用 uIP 的时候,一般通过 如下顺序:
1) 实现接口函数(回调函数)UIP_APPCALL。 该函数是我们使用 uIP 最关键的部分,它是 uIP 和应用程序的接口,我们必须根据
2012-11-02
ALIENTEK MiniSTM32开发板
AN1203
uIP 协议栈提供了我们很多接口函数,这些函数在 uip.h 中定义,为了减少函数调用造 成的额外支出,大部分接口函数以宏命令实现的,uIP 提供的接口函数有:
1,初始化 uIP 协议栈:uip_init() 2.处理输入包:uip_input() 3.处理周期计时事件:uip_periodic() 4.开始监听端口:uip_listen() 5.连接到远程主机:uip_connect() 6.接收到连接请求:uip_connected() 7.主动关闭连接:uip_close() 8.连接被关闭:uip_closed() 9.发出去的数据被应答:uip_acked() 10.在当前连接发送数据:uip_send() 11.在当前连接上收到新的数据:uip_newdata() 12.告诉对方要停止连接:uip_stop() 13.连接被意外终止:uip_aborted() 接下来,我们看看 uIP 的移植过程。首先,uIP1.0 的源码包里面有如下内容,如图 1.2.2 所示:
基于STM32的嵌入式远程视频监控系统设计
基于STM32的嵌入式远程视频监控系统设计马跃辉;冀保峰;程一淼;高宏峰【摘要】随着工业技术的不断发展,以及人对安全防范意识的逐渐加强,视频监控系统已经成为人们在生产、生活中必不可少的一部分.随着计算机技术的发展、宽带的普及、图像处理技术的提高,本文设计了基于STM32的远程监控系统,以OV7670摄像头模块采集图像信息,通过ENC28J60模块将图像信息传输到以太网,同时利用SD卡实时存储图像,利用PC机或手机作为监控终端,可以随时随地的查看监控状况.该系统具有低功耗,成本低,方便可行,有广泛的应用前景.【期刊名称】《山西电子技术》【年(卷),期】2018(000)001【总页数】4页(P52-55)【关键词】STM32;远程监控;以太网;ENC28J60【作者】马跃辉;冀保峰;程一淼;高宏峰【作者单位】河南科技大学信息工程学院,河南洛阳471023;河南科技大学信息工程学院,河南洛阳471023;电子科技大学航空航天学院,四川成都611731;河南科技大学信息工程学院,河南洛阳471023;河南科技大学信息工程学院,河南洛阳471023【正文语种】中文【中图分类】TP277;TP3930 引言国内外的视频监控行业经历了本地模拟信号监控系统、基于PC插卡的数字监控系统和基于嵌入式技术的数字监控系统的发展过程。
目前已经发展到第三个阶段,正大规模向着嵌入式技术的数字监控方向发展,视频监测系统已经成为当今可视化领域的一个新的开发热点。
随着以太网的覆盖面越来越广,借助以太网能够满足用户直观实时地且不受地点限制观看监控画面,相比较于传统视频监控系统,嵌入式视频监控明显具有更高的可靠性和便利性,能够给用户带来更多舒适、安全和智能的生活体验。
1 系统总体设计系统总体设计结构如图1所示,主要由STM32F103ZET6主控制器和其他子模块组成。
主控制器主要用于处理和分析传感器信息以及以太网操作信息,控制内部运行代码及SD存储。
ENC28J60大量数据时无法中断
ENC28J60大量数据时无法中断
使用ENC28J60移植uip搭建网络,以太网控制器收到数据时,会产生中断,于是把中断口连接到GPIO口,设置为外部中断,当接收到数据时,进入中断把中断标志ETH_INT置1,然后轮询ETH_INT为1时接收数据;
在使用中发现:在接收少量数据时,可以正常运行,但是连续发送大量数据时,一段时间后单片机就无法收到;甚至持续ping一段时间就会无响应。
检查问题时,发现竟然无法进入中断;反复调试结果还是不行,不知道是什么问题导致的,上网也没找到比较有用的结论。
后来想到额一个解决办法,在主循环中直接通过SPI接口读取ENC28J60的对应寄存器来获取状态;
EPKTCNT是以太网数据包计数寄存器,当接收到一个数据包并将其完整写入缓冲器时,EPKTCNT寄存器将递增,所以只要EPKTCNT非0即代表有未处理数据,因此在轮询中使用 enc28j60Read(EPKTCNT)函数来判断是否有数据并进行处理。
这种方式经测试运行非常稳定,现在就干脆不用中断了。
新型以太网控制器ENC28J60及其接口技术
引言ENC28J60是Microchip Technology(美国微芯科技公司)近期推出的28引脚独立以太网控制器。
在此之前,嵌入式系统开发可选的独立以太网控制器都是为个人计算机系统设计的,如RTL8019、AX88796L、DM9008、CS8900A、LAN91C111等。
这些器件不仅结构复杂,体积庞大,且比较昂贵。
目前市场上大部分以太网控制器的封装均超过80引脚,而符合IEEE 802.3协议的ENC28J60只有28引脚,既能提供相应的功能,又可以大大简化相关设计,减小空间。
图1 ENC28J60的硬件连接1 结构和功能采用业界标准串行外设接口(SPI)的以太网控制器ENC28J60具有以下主要特征:◆符合IEEE 802.3协议。
内置10 Mbps以太网物理层器件(PHY)及媒体访问控制器(MAC),可按业界标准的以太网协议可靠地收发信息包数据。
◆具有可编程过滤功能。
特殊的过滤器,包括Microchip的可编程模式匹配过滤器,可自动评价、接收或拒收Magic Packet,单播(Unicast)、多播(Multicast)或广播(Broadcast)信息包,以减轻主控单片机的处理负荷。
◆10 Mbps SPI接口。
业界标准的串行通信端口,使得低至18引脚的8位单片机也具有网络连接功能。
◆可编程8 KB双端口SRAM缓冲器。
以高效的方式进行信息包的存储、检索和修改,以减轻主控单片机的内存负荷。
该缓冲存储器提供了灵活可靠的数据管理机制。
2 硬件设计ENC28J60的硬件设计需要注意复位电路时钟振荡器,振荡器启动定时器,时钟输出引脚,变压器、终端和其他外部器件,输入/输出电平等几个方面。
(图1可供参考)2.1 复位电路ENC28J60有上电复位(Power-on Reset)功能,RESET引脚上的低电平使ENC28J60进入复位模式;RESET引脚内部有弱上拉电阻。
ENC28J60的硬件连接如图1所示。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
0、友情提示《零死角玩转STM32》系列教程由初级篇、中级篇、高级篇、系统篇、四个部分组成,根据野火STM32开发板旧版教程升级而来,且经过重新深入编写,重新排版,更适合初学者,步步为营,从入门到精通,从裸奔到系统,让您零死角玩转STM32。
M3的世界,与野火同行,乐意惬无边。
另外,野火团队历时一年精心打造的《STM32库开发实战指南》将于今年10月份由机械工业出版社出版,该书的排版更适于纸质书本阅读以及更有利于查阅资料。
内容上会给你带来更多的惊喜。
是一本学习STM32必备的工具书。
敬请期待!7、以太网(ENC28J60)7.1 实验描述及工程文件清单实验描述在浏览器上创建一个web服务器,通过web里面的命令来控制开发板上的LED的亮灭。
应用->1:在PC机的DOS界面输入: ping 192.168.1.15 ,看能否ping通。
2:在IE浏览器中输入:http://192.168.1.15/123456 则会出现一个网页,通过网页中的命令可以控制开发板中的LED的亮灭。
硬件连接PE4 :ENC28J60-INTPA6-SPI1-MISO :ENC28J60-SOPA7-SPI1-MOSI :ENC28J60-SIPA5-SPI1-SCK :ENC28J60-SCKPA4-SPI1-NSS :ENC28J60-CSPE1 :ENC28J60-RST用到的库文件startup/start_stm32f10x_hd.cCMSIS/core_cm3.cCMSIS/system_stm32f10x.cFWlib/stm32f10x_gpio.cFWlib/stm32f10x_rcc.cFWlib/stm32f10x_usart.cFWlib/stm32f10x_spi.c用户编写的文件USER/main.cUSER/stm32f10x_it.cUSER/led.cUSER/usart.cUSER/spi_enc28j60.cUSER/enc28j60.cUSER/ip_arp_udp_tcp.cUSER/web_server.c野火STM32开发板中10M以太网ENC28J60的硬件原理图7.2 ENC28J60简介ENC28J60是带有行业标准串行外设接口(SerialPeripheral Interface,SPI)的独立以太网控制器。
它可作为任何配备有 SPI 的控制器的以太网接口。
ENC28J60 符合 IEEE 802.3 的全部规范,采用了一系列包过滤机制以对传入数据包进行限制。
它还提供了一个内部 DMA 模块,以实现快速数据吞吐和硬件支持的IP校验和计算。
与主控制器的通信通过两个中断引脚和SPI 实现,数据传输速率高达 10 Mb/s。
两个专用的引脚用于连接 LED,进行网络活动状态指示。
下图所示为ENC28J60的简化框图。
图 1-2所示为使用该器件的典型应用电路。
要将单片机连接到速率为10 Mbps 的以太网,只需 ENC28J60、两个脉冲变压器和一些无源元件即可。
本开发板中用的网络变压器的型号为911105A。
ENC28J60由七个主要功能模块组成:1. SPI 接口——充当主控制器和ENC28J60 之间通信通道。
2. 控制寄存器——用于控制和监视 ENC28J60。
3. 双端口RAM缓冲器——用于接收和发送数据包。
4. 判优器——当DMA、发送和接收模块发出请求时对 RAM 缓冲器的访问进行控制。
5. 总线接口——对通过SPI 接收的数据和命令进行解析。
6. MAC (Medium Access Control)模块——实现符合 IEEE 802.3 标准的 MAC 逻辑。
7. PHY(物理层)模块——对双绞线上的模拟数据进行编码和译码。
该器件还包括其他支持模块,诸如振荡器、片内稳压器、电平变换器(提供可以接受 5V 电压的 I/O 引脚)和系统控制逻辑。
7.3 实验讲解建议阅读程序的顺序为:spi_enc28j60.c -> enc28j60.c ->ip_arp_udp_tcp.c ->web_server.c 。
spi_enc28j60.c :ENC28J60(以太网芯片) SPI接口应用函数库。
enc28j60.c : Microchip ENC28J60 Ethernet Interface Driver。
ip_arp_udp_tcp.c:IP, Arp, UDP and TCP functions(这部分野火仍在学习)。
web_server.c:web服务程序应用函数库。
其中enc28j60.c 、ip_arp_udp_tcp.c web_server.c是从国外的一个开源项目里面移植过来的,源文件基本上没有做修改。
spi_enc28j60.c是由我们用户实现的底层函数接口,还有我们修改了web_server.c这个文件中网页命令控制部分的服务程序。
在配置好需要用的库文件之后,下面我们从main函数开始讲解,有关库函数是如何添加的情参考前面的教程,这里不再赘述。
1./*2. * 函数名:main3. * 描述:主函数4. * 输入:无5. * 输出:无6. */7.int main (void)8.{9./* 配置系统时钟为72M */10. SystemInit();11.12./* 配置 LED */13. LED_GPIO_Config();14.15./* ENC28J60 SPI 接口初始化 */16. SPI_Enc28j60_Init();17.18./* ENC28J60 WEB 服务程序 */19. Web_Server();20.21.//return 0;22.}在进入main函数代码段后,我们首先调用系统库函数SystemInit();将我们的系统时钟配置为72MHZ,如果用的是3.5.0版本的库则不需要,因为已在启动文件里面调用了。
LED_GPIO_Config();用于初始化LED,因为我们我们在我们的web服务器中要控制的就是LED,所以在这里要先把LED配置好,好让它接下来能工作。
SPI_Enc28j60_Init();用于配置以太网芯片ENC28J60所用到的数据通信口SPI2和其他控制I/O。
这是我们用户在spi_enc28j60.c中实现的底层程序。
1./*2. * 函数名:SPI1_Init3. * 描述:ENC28J60 SPI 接口初始化4. * 输入:无5. * 输出:无6. * 返回:无7. */8.void SPI_Enc28j60_Init(void)9.{10. GPIO_InitTypeDef GPIO_InitStructure;11. SPI_InitTypeDef SPI_InitStructure;12.13./* 使能 SPI1 时钟 */14. RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_SPI1,ENABLE);15.16./*17. * PA5-SPI1-SCK :ENC28J60_SCK18. * PA6-SPI1-MISO:ENC28J60_SO19. * PA7-SPI1-MOSI:ENC28J60_SI20. */21. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7;22. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;23. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; // 复用输出24. GPIO_Init(GPIOA, &GPIO_InitStructure);25.26./* PA4-SPI1-NSS:ENC28J60_CS */// 片选27.28. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;29. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;30. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; // 推免输出31. GPIO_Init(GPIOA, &GPIO_InitStructure);32. GPIO_SetBits(GPIOA, GPIO_Pin_4);33.34./* PB13:ENC28J60_INT */// 中断引脚没用到35./* PE1:ENC28J60_RST*/// 复位似乎不用也可以36.37.38./* SPI1 配置 */39. SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;40. SPI_InitStructure.SPI_Mode = SPI_Mode_Master;41. SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;42. SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;43. SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge;44. SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;45. SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_8;46. SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;47. SPI_InitStructure.SPI_CRCPolynomial = 7;48. SPI_Init(SPI1, &SPI_InitStructure);49.50./* 使能 SPI1 */51. SPI_Cmd(SPI1, ENABLE);52.}在这个函数中不知大家有没注意到没有这两条注释:1./* PB13:ENC28J60_INT */// 中断引脚没用到2.3./* PE1:ENC28J60_RST*/// 复位似乎不用也可以enc28j60的中断引脚没用到很正常,但是复位引脚也没用到,这我就很纳闷了。
我想原因可能是enc28j60有个上电自动复位的功能,这里它的复位引脚只能暂时没有用到而已,也或许是我们的开发板中引脚PE1(接enc28j60的复位脚)收到什么信号的干扰,产生了类似复位的信号。