基于STM32的校园能耗监控系统的以太网接口设计*
2015-10-15王晓丽
王晓丽 姜 川 于 跃
(吉林建筑大学电气与电子信息学院,长春 130118)
以太网(Ethernet)是互联网技术的一种.以太网是指遵守IEEE 802.3标准组成的局域网,由IEEE802.3标准规定的主要是位于参考模型的物理层(PHY)和数据链路层中的媒体介入控制子层(MAC)[1].以太网渗透到工业控制、环境监测、智能家居的嵌入式设备产生了接入互联网的需求,利用以太网技术,嵌入式设备可以非常容易地接入到现有计算机网络中.高校是能源消耗较大的社区,对信息的准确性、实时性的要求也较严格.笔者设计使用高性能微处理器STM32F103VET6作为主控芯片,采用STM32外接常用的嵌入式以太网控制器ENC28J60接入网络,并选择移植LwIP协议栈的方式.以太网接口代替传统串行接口,加快了数据传输速率,同时可以实行远程控制,具有抗干扰能力强、实时性高及数据处理能力强等优势,并且移植协议栈方便了不同系统、不同设备之间的通信.
1 芯片介绍
1.1 STM32F103VET6 芯片
STM32F103VET6是基于ARM Cortex-M3核的32位处理器芯片,该芯片具有体积小、耗能低以及性能高等优势.其最高工作频率为72MHz;内置高速存储器(512KB Flash,64KB RAM);2个基本定时器;4个通用定时器;2个高级定时器;3个SPI;2个IIC;5个串口;1个USB;1个CAN;3个12位ADC;1个12位DAC;1个SDIO接口;1个FSMC接口以及80个通用IO口.
1.2 ENC28J60 芯片
ENC28J60是带有行业标准串行外设接口(Serial Peripheral Interface,SPI)的独立以太网控制器,它可作为任何配备有SPI的控制器的以太网接口.ENC28J60符合IEEE 802.3的全部规范,采用了一系列包过滤机制以对传入数据包进行限制,提供了一个内部DMA模块,以实现快速数据吞吐和硬件支持的IP校验和计算.与主控制器的通信通过两个中断引脚和SPI实现,数据传输速率高达10Mb/s.图1为使用ENC28J60的典型应用电路.要将单片机连接到速率为10Mbps的以太网,只需ENC28J60,2个脉冲变压器和一些无源元件即可.
图1 ENC28J60典型应用电路
2 硬件电路设计
ENC28J60的主要功能模块SPI接口充当主控器与ENC28J60之间的通信信道.STM32F103VET6具有3个SPI接口,可以直接地与ENC28J60连接.图2为10M以太网ENC28J60的硬件原理图.
图2 10M以太网ENC28J60的硬件原理
本次设计中,STM32单片机的PA4-SPI1-NSS引脚与ENC28J60-CS连接,完成片选.当多个SPI设备与MCU相连时,每个设备的这个片选信号线是与MCU单独的引脚相连的;当SS信号线为低电平时,片选有效,开始SPI通信.STM32单片机的PA5-SPI1-SCK与ENC28J60-SCK引脚连接,时钟信号由主通信设备产生,不同的设备支持的时钟频率不一样,STM32的SPI时钟频率最大为fPCLK/2;STM32单片机的PA6-SPI1-MISO,PA7-SPI1-MISI分别与ENC28J60-SO,ENC28J60-SI引脚连接,完成数据的传输与接收.由于ENC28J60内部稳压器无法驱动外部负载,所以电源引脚必须与同一个3.3V电源相连,并且在每个电源引脚与地之间都应连接一个0.1μF的电容.
在ENC28J60芯片的OSC2和OSC1引脚之间连接25MHz晶振以及2个20pF的接地电容,能够为ENC28J60提供较精确的时钟信号,同时也可节省PHY的晶振.以太网变压器在实现以太网接口操作时是不可缺少的,本设计中,在差分发送引脚(TPOUT+/TPOUT-)上,需要外接一个带有中心抽头的1∶1脉冲变压器[2].本设计中采用的是集成以太网隔离变压器RJ45插座HR91105A.
3 软件设计
本接口设计选用开发环境MDK,在MDK环境下可以使用C/C++方便地开发Cortex-M3的应用程序.与其他开发程序相比,MDK具有入门容易、使用方便,并在调试程序、软件仿真方面也有很强大的功能.
以太网收发数据程序流程如图3所示.主程序通过查询的方式发送数据,采取通过判断函数返回值方式是否接收到数据,若接收到数据,通过指针把数据包传递给上层的LwIP协议栈进行处理,完成数据包的收取.收发数据主程序主要包括系统及外设的初始化、以太网控制器的初始化、发送数据、接收数据和应用处理等部分.
图3 以太网收发数据程序流程
3.1 STM32 库
STM32库是由ST公司针对STM32提供的函数接口,即API(Application Program Interface),开发者可以调用这些库函数接口来配置STM32的寄存器,使开发人员得以脱离最底层的寄存器操作,有开发速度快、易于阅读、维护成本低等优点.实际上,库是架设在寄存器与用户驱动层之间的代码,向下处理与寄存器直接相关配置,向上为用户提供平配置寄存器的接口[3].本设计采用最新的STM32的3.5版库文件,相对于以往版本的库文件兼容性更好.
3.2 LwIP 协议栈
要实现TCP/IP协议栈,代码可以自行编写,但一般都会移植更加稳定优良的代码.LwIP是Light Weight Internet Protocol的缩写,是由瑞士计算机科学院Adam Dunkels等开发的适用于嵌入式领域的轻量级TCP/IP协议栈,它可以移植到含有操作系统的平台中,也可以在无操作系统的平台下运行.由于其开源,占用的RAM和ROM比较少,支持较为完整的TCP/IP协议,且十分便于剪裁、调试,被广泛地应用于中、低端的32位操作平台[4].该协议栈提供了一组API函数应用程序调用,编程方便[5].
LwIP通过pbuf建立了与底层硬件收发数据包的数据结构,可以实现数据的管理;netif结构体则保存了网卡地址、IP地址、网关等设置的这些信息.下面例举部分LwIP_Init()函数,其主要功能是初始化LwIP协议栈,主要是把ENC28J60与LwIP连接起来,包括IP,MAC地址,接口函数.代码如下:
4 仿真与应用
MDK仿真工具强大,本设计软件调试部分利用MDK软件针对STM32进行仿真,执行工程中的代码.仿真结果如下图4所示.
图4 仿真逻辑仪结果
图5 Web服务器运行结果
构成网络应用的软件有不同的结构,有B/S结构(浏览器/服务器)和C/S(客户端/服务器).本网络接口设计中HTTP服务器其是基于B/S结构的,用户运行应用程序时通过访问Web调用服务器的应用程序,并通过浏览器把结果显示给用户.该以太网接口应用于校园能耗监控系统中,所以设计出一款可以远程控制LED灯亮灭的简单应用,其运行结果如图5所示.
5 结语
以STM32作为主控芯片结合以太网控制器设计的10M以太网接口,具有电路连接简单、通信距离远、可实现网络传输功能等优点.在校园能耗监控系统中,将传感器采集的数据编写成MAC数据包格式通过该接口发送给上位机,现场控制器也可通过该接口接收上位机发送的命令,进而实现了监控系统的管理控制一体化,而且使用该以太网接口既保证了数据传输的可靠性,又能最大程度的减少对现有建筑物的改造和破坏,所以,在当今社会节约能源的强烈需求下,该设计具有更广阔的应用前景.
[1]王延尧.以太网技术与应用[M].北京:人民邮电出版社,2005:2-3.
[2]陈 磊.以太网在工业应用中的实时特性研究[J].浙江大学学报(工学版),2004,38(6):29-31.
[3]李 宁.基于MDK的STM32处理器开发应用[M].北京:北京航空航天大学出版社,2008:5-7.
[4]孔 栋.嵌入式TCPIP协议栈LWIP在ARM平台上的移植与应用[J].通信技术,2008,41(6):38-40.
[5]王桂云.基于ARM7的以太网接口的设计与实现[J].微计算机信息,2009,25(2):124-125.