历史上的今天
今天是:2025年02月04日(星期二)
2018年02月04日 | 基于Cortex-M3的嵌入式以太网门禁系统设计
2018-02-04 来源:eefocus
内容摘要:阐述了采用Cortex—M3內核的STM32为主控芯片、射频芯片PN532、以太网控制器ENC28J60的硬件电路和软件设计框架,同时对以太网协议LwIP进行了详细的分析。本门禁系统传输距离远,超低功耗,性能优异且稳定,完全适用于校园以及公司的门禁系统。
引 言
当前,有很多的企业是采用佩戴工作证来完成门禁管理,而且还是采用传统的人工方式完成,不仅容易被人混入,且没有记录,存在各种人为的失误。同时,市场上门禁系统存在传输距离受限制、性能不佳等问题。
随着嵌入式技术日新月异的发展,以及以太网技术的普及,使得基于以太网的嵌入式产品越来越多,发展也越来越快。本文研究的就是采用以太网传输数据和射频芯片识别智能卡相结合的门禁系统,相对于传统的门禁系统,以太网解决了传输距离上的问题。其次,采用了基于80C51内核的射频芯片PN532,使得性能更加稳定。其工作的基本原理是先将智能卡放在门禁系统上,系统读取数据并传送给主芯片STM32进行处理,主芯片处理后再通过以太网协议LwIP将数据从ENCN8J60传输给服务器。
1 门禁系统硬件组成
门禁系统主要由意法半导体公司的主控芯片STM3H、MICroChip公司的以太网控制器ENC28J60和NXP公司的射频芯片PN532组成。
门禁系统结构组成如图1所示。主芯片STM32通过以太网协议栈LwIP将数据传输到ENC28J60,然后可以通过网线与服务器直接连接进行通信,也可以通过路由器再连接到服务器。在非接触式卡通信方面,STM32通过频率为1MHz的SPI接口与PN532相连。

1.1 STM32外围电路设计
本系统采用意法半导体公司以Cortex—M3为内核的32位微处理器STM32F103为主控芯片,其主频为72 MHz,内部集成存储空间为256K的Flash和64K的SRAM,还包含I2C、SPI、I2S、USART、CAN、ADC、看门狗等。性价比在同类产品中十分突出。硬件连接如图2所示。

在调试时我们采用SWD取代JTAG,因为SWD不仅引脚更少,而且在高速模式下更加可靠。
1.2 射频芯片PN532硬件电路设计
PN532是NXP公司推出的一个高度集成的非接触式读写芯片,它包含80C51微控制器内核,集成了13.56 MHz下的各种主动/被动式非接触通信方法和协议。支持ISO14443A/14443B协议。工作距离超过75 mm。接收来自天线的信号并对该数据按照ISO14443规定的帧格式处理数据。
PN532支持三种通信方式:SPI、I2C、HUS。由于我们采用SPI方式与主控芯片STM32进行通信,所以I0和I1分别设置为0和1。
PN532外围电路结构如图3所示。

1.3 以太网控制器ENC28J60硬件设计
主控芯片ENC28J60是带有行业标准串行外设接口(Serial Peripheral Interface,SPI)的独立以太网控制器。它可作为任何配备有SPI的控制器的以太网接口。ENC28J60符合IEEE802.3的全部规范,采用了一系列包过滤机制以对传入数据包进行限制。它还提供了一个内部DMA模块,以实现快速数据吞吐和硬件支持的IP校验和计算。与主控制器的通信通过两个中断引脚和SPI实现,数据传输速率高达10 Mb/s。
两个专用的引脚用于连接LED,进行网络活动状态指示。
应当注意的是,当从ENC28J60读取多个数据时,即使不需要主控芯片STM32输出的数据,每读取一个数据前也要向SPI发送缓冲器写一个数据用来启动SPI的接口时钟。
ENC28J60典型应用电路如图4所示。

2 系统软件设计
2.1 以太网协议LwIP
LwIP是瑞士计算机科学院开发的小型开源的TCP/IP协议栈。由于它只需要十几K的RAM和40K左右的ROM就可以运行,所以很适合在硬件资源并不充裕的嵌入式系统中使用。
LwIP属于比较松散的通信机制,通过共享内存的方式实现应用层与底层协议之间的通信。它提供了三种API:①RAM API,②LwIP API,③BSD API。
其中的RAM API其缺点就是代码不易于理解,开发难度大,其优点是相对于其他两种方式占用的资源少,效率更加高,更适合于对于资源相对少的嵌入式使用,所以我们采用RAM API方式进行编写。
在TCP/IP传输层中有TCP和UDP两种协议,TCP提供IP环境下数据的可靠传输,UDP提供的是不可靠传输,由于门禁系统中必须要求传输数据的正确,所以采用TCP。图5是LwIP下的TCP处理流程框图。
RAM API把协议栈和应用程序放在一个进程里,该函数基于函数回调技术,下面是LwIP的部分关键配置和代码。
(1)LwIP配置
在LwIP的配置文件lwipopts.h中修改如下地方。
是否使用操作系统,我们不用,所以填写为1:
#define NO_SYS 1
配置heap的大小:
#define MEM_SIZE
配置pool的大小
#define PBUF_POOL_SIZE
#define PBUF_POOL_BUFSIZE
以上三个配置占据了LwIP协议栈大部分的内存,需要根据自己的需要修改成合适的值。
(2)LwIP代码
①分别设置IP地址,子网掩码和网关:
IP4_ADDR(&ipaddr,192,168,2,28);
IP4_ADDR(&netmask,255,255,255,0);
IP4_ADDR(&gw,192,168,2,254);
②初始化底层函数,也就是配置MAC地址,初始化ENC28J60,配置最大输出单元等:
low_level_init(netif);
③连接远程主机,当连接建立,就会调用第4个参数Conn_Back:
tcp_connect(TCP_PCB,&ipaddr,1026,Conn_back);
④当有新的数据接收到时调用的回调函数:
tcp_recv(TCP_pcb.tcp_recv_callback);
⑤服务器成功接收到数据后调用的回调函数:
tcp_sent(TCP_pcb,tcp_sent_callback);
⑥处理错误的回调函数:
tcp_err(pcb,CMD_conn_err);
⑦是否接收到数据:
ethernetif_input(&enc28j60);
通信一旦结束或者出现异常状况后,一定要使用pbuf_free()函数释放pbuf,避免内存的浪费。还有一点要注意的是,系统在正常运行的过程中,定时器函数tcp_fasttmr()和tcp_slowtmr()函数必须以固定的时间间隔被规律地调用。
2.2 门禁系统软件架构与设计
门禁系统的主要流程如图6所示,每次重新启动后,首先初始化相关寄存器,初始化各个模块,确定已经连接服务器,然后进入程序主循环。

首先监测是否需要调用LwIP内部的快速定时器和慢速定时器。然后监测服务器是否有断开,如果断开则重新连接服务器,没有断开的话则检测是否有智能卡,有的话接收卡中信息进行处理然后发送给服务器。
结语
本文对使用STM32为主控芯片的门禁系统的硬件和软件架构进行了相应的描述,对于文中所涉及的芯片和以太网协议的使用具有指导意义,能够较大幅度地降低成本,同时门禁系统的使用会更加稳定,传输距离更长。
史海拾趣
|
各位大侠 最近在学习ad6,但是发现在查找元件时有些就是找不到。 例如:ATMEL的单片机等等; 常用的电阻,电容,找不到; 知道的可否指点一下。 另外,我在看资料时,发现可将99的封装改变过来。 这样好用吗?… 查看全部问答> |
|
程序最后收尾工作,,修改参数不按SET也可以保存到EEPROM中..着急的很 现在问题和缺点是如果修改了参数不按SET如果突然断电参数就保存不到EEPROM中去,,要修改为只要修改了就存到EEPROM中,,高人指点下 … 查看全部问答> |
|
最近发现很多收手为C语音模块化程序的设计苦恼,本人写个简单的教程希望对新人有用。为了使C的结构清晰并于维护,一定要注意,一个C文件一定要对应一个H文件,一一对应,如: main.c -- config.h iic.c -- iic.h ...… 查看全部问答> |
|
我添加了如下组件 MSPY 3.0 for windows ce 1.7 MB -standard database double spelling soft keyboard Multilingual User Interface(MUI)。 但进入系统后,用double spelling soft keyb ...… 查看全部问答> |
|
dell的本子重装了系统,拔USB没死,装好了所有的开发软件再试,死了。琢磨了一下,卸载BusHound,ok了。没重装之前也死,看来就是BusHound的作用。奇怪的是,拔读卡器、u盘这样的storage设备就死,即使安全弹出了设备,但拔activesync、串口、仿真 ...… 查看全部问答> |
|
最近在调英倍特板子的stm32中的can程序例子是自收自发模式,我修改为普通模式,但是在应用中,发送接收的时候就出问题了比如:can发送邮箱3个都是满的,可是就是发不出去信号,按照datasheet一步步来写程序还是不成。单步调过了,实在看不出什 ...… 查看全部问答> |
|
两个CAN通讯,故意手动模CAN通讯线(线皮去掉),CAN总线会死掉,我仿真时候,在看寄存器,发现,有时候是离线错误,看了几种错误情况都有? 如果仿真,让CPU重新复位,发现CA还不能正常通讯,我复位CPU,整个CAN寄存器都复位了,为什么总线 ...… 查看全部问答> |
|
STM8S103K3 其中用到定时器2, 1、TIME2_CH2 做PWM输出; 2、TIME2_CH3 做脉冲输入捕获; 不知道这样做有没有问题??? 请兄弟们指点一二。。。。。… 查看全部问答> |




