零死角玩转stm高级篇7以太网ENCJ资料下载.pdf
- 文档编号:16119331
- 上传时间:2022-11-20
- 格式:PDF
- 页数:15
- 大小:988.95KB
零死角玩转stm高级篇7以太网ENCJ资料下载.pdf
《零死角玩转stm高级篇7以太网ENCJ资料下载.pdf》由会员分享,可在线阅读,更多相关《零死角玩转stm高级篇7以太网ENCJ资料下载.pdf(15页珍藏版)》请在冰豆网上搜索。
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.c-第4页-USER/led.cUSER/usart.cUSER/spi_enc28j60.cUSER/enc28j60.cUSER/ip_arp_udp_tcp.cUSER/web_server.c野火STM32开发板中10M以太网ENC28J60的硬件原理图-第5页-7.2ENC28J60简介简介ENC28J60是带有行业标准串行外设接口(SerialPeripheralInterface,SPI)的独立以太网控制器。
它可作为任何配备有SPI的控制器的以太网接口。
ENC28J60符合IEEE802.3的全部规范,采用了一系列包过滤机制以对传入数据包进行限制。
它还提供了一个内部DMA模块,以实现快速数据吞吐和硬件支持的IP校验和计算。
与主控制器的通信通过两个中断引脚和SPI实现,数据传输速率高达10Mb/s。
两个专用的引脚用于连接LED,进行网络活动状态指示。
下图所示为ENC28J60的简化框图。
图1-2所示为使用该器件的典型应用电路。
要将单片机连接到速率为10Mbps的以太网,只需ENC28J60、两个脉冲变压器和一些无源元件即可。
本开发板中用的网络变压器的型号为911105A。
-第6页-ENC28J60由七个主要功能模块组成:
1.SPI接口充当主控制器和ENC28J60之间通信通道。
2.控制寄存器用于控制和监视ENC28J60。
3.双端口RAM缓冲器用于接收和发送数据包。
4.判优器当DMA、发送和接收模块发出请求时对RAM缓冲器的访问进行控制。
5.总线接口对通过SPI接收的数据和命令进行解析。
6.MAC(MediumAccessControl)模块实现符合IEEE802.3标准的MAC逻辑。
7.PHY(物理层)模块对双绞线上的模拟数据进行编码和译码。
该器件还包括其他支持模块,诸如振荡器、片内稳压器、电平变换器(提供可以接受5V电压的I/O引脚)和系统控制逻辑。
-第7页-7.3实验讲解实验讲解建议阅读程序的顺序为:
spi_enc28j60.c-enc28j60.c-ip_arp_udp_tcp.c-web_server.c。
spi_enc28j60.c:
ENC28J60(以太网芯片)SPI接口应用函数库。
enc28j60.c:
MicrochipENC28J60EthernetInterfaceDriver。
ip_arp_udp_tcp.c:
IP,Arp,UDPandTCPfunctions(这部分野火仍在学习)。
web_server.c:
web服务程序应用函数库。
其中enc28j60.c、ip_arp_udp_tcp.cweb_server.c是从国外的一个开源项目里面移植过来的,源文件基本上没有做修改。
spi_enc28j60.c是由我们用户实现的底层函数接口,还有我们修改了web_server.c这个文件中网页命令控制部分的服务程序。
在配置好需要用的库文件之后,下面我们从main函数开始讲解,有关库函数是如何添加的情参考前面的教程,这里不再赘述。
1./*2.*函数名:
main3.*描述:
主函数4.*输入:
无5.*输出:
无6.*/7.intmain(void)8.9./*配置系统时钟为72M*/10.SystemInit();
11.12./*配置LED*/13.LED_GPIO_Config();
14.15./*ENC28J60SPI接口初始化*/16.SPI_Enc28j60_Init();
17.18./*ENC28J60WEB服务程序*/19.Web_Server();
20.21./return0;
22.在进入main函数代码段后,我们首先调用系统库函数SystemInit();
将我们的系统时钟配置为72MHZ,如果用的是3.5.0版本的库则不需要,因为已在启动文件里面调用了。
-第8页-LED_GPIO_Config();
用于初始化LED,因为我们我们在我们的web服务器中要控制的就是LED,所以在这里要先把LED配置好,好让它接下来能工作。
SPI_Enc28j60_Init();
用于配置以太网芯片ENC28J60所用到的数据通信口SPI2和其他控制I/O。
这是我们用户在spi_enc28j60.c中实现的底层程序。
SPI1_Init3.*描述:
ENC28J60SPI接口初始化4.*输入:
无6.*返回:
无7.*/8.voidSPI_Enc28j60_Init(void)9.10.GPIO_InitTypeDefGPIO_InitStructure;
11.SPI_InitTypeDefSPI_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,&
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*/-第9页-51.SPI_Cmd(SPI1,ENABLE);
52.在这个函数中不知大家有没注意到没有这两条注释:
1./*PB13:
ENC28J60_INT*/中断引脚没用到2.3./*PE1:
ENC28J60_RST*/复位似乎不用也可以enc28j60的中断引脚没用到很正常,但是复位引脚也没用到,这我就很纳闷了。
我想原因可能是enc28j60有个上电自动复位的功能,这里它的复位引脚只能暂时没有用到而已,也或许是我们的开发板中引脚PE1(接enc28j60的复位脚)收到什么信号的干扰,产生了类似复位的信号。
这里我们先把这问题搁一边先,毕竟程序还是工作了。
至于具体的原因我以后有时间再深究下。
Web_Server();
函数实现的功能是创建一个网页服务器,在这个网页服务器上我可以点击我们设定好的命令按钮来控制我们开发板上LED的亮灭。
其实,从这里面我们就可以看到有点智能家居的味道了,所谓智能家居就是通过网络来控制我们家电的状态,如开和断。
举个例子:
我们可以在遥远的地方可以通过网络来控制家里的电视、电冰箱等,是不是很神奇哩?
只要你学会了这个实验,再经过自己的再深入学习,这些都是小菜一碟。
_,本实验旨在引导大家入门。
在web_server.c中实现。
在web_server.c的开头包含了头文件:
1.#includeenc28j60.h2.#includeip_arp_udp_tcp.h3.#includenet.henc28j60.h:
MicrochipENC28J60EthernetInterfaceDriverHeaderfileip_arp_udp_tcp.h:
IP,Arp,UDPand
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 死角 stm 高级 以太网 ENCJ