基于STM32的嵌入式以太网门禁系统设计

发布者:玉立风华最新更新时间:2014-12-05 来源: eepw关键字:STM32  以太网  门禁系统 手机看文章 扫描二维码
随时随地手机看文章

  引言

  当前,有很多的企业是采用佩戴工作证来完成门禁管理,而且还是采用传统的人工方式完成,不仅容易被人混入,且没有记录,存在各种人为的失误。同时,市场上门禁系统存在传输距离受限制、性能不佳等问题。

  随着嵌入式技术日新月异的发展,以及以太网技术的普及,使得基于以太网的嵌入式产品越来越多,发展也越来越快。本文研究的就是采用以太网传输数据和射频芯片识别智能卡相结合的门禁系统,相对于传统的门禁系统,以太网解决了传输距离上的问题。其次,采用了基于80C51内核的射频芯片PN532,使得性能更加稳定。其工作的基本原理是先将智能卡放在门禁系统上,系统读取数据并传送给主芯片STM32进行处理,主芯片处理后再通过以太网协议LwIP将数据从ENCN8J60传输给服务器。

  1 门禁系统硬件组成

  门禁系统主要由意法半导体公司的主控芯片STM3H、Microchip公司的以太网控制器ENC28J60和NXP公司的射频芯片PN532组成。

  门禁系统结构组成如图1所示。主芯片STM32通过以太网协议栈LwIP将数据传输到ENC28J60,然后可以通过网线与服务器直接连接进行通信,也可以通过路由器再连接到服务器。在非接触式卡通信方面,STM32通过频率为1MHz的SPI接口与PN532相连。

基于STM32的嵌入式以太网门禁系统设计

 

  1.1 STM32外围电路设计

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

基于STM32的嵌入式以太网门禁系统设计

 

  在调试时我们采用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所示。

基于STM32的嵌入式以太网门禁系统设计

 

  1.3 以太网控制器ENC28J60硬件设计

  主控芯片ENC28J60是带有行业标准串行外设接口(Serial Peripheral Interface,SPI)的独立以太网控制器。它可作为任何配备有SPI的控制器的以太网接口。ENC28J60符合IEEE802.3的全部规范,采用了一系列包过滤机制以对传入数据包进行限制。它还提供了一个内部DMA模块,以实现快速数据吞吐和硬件支持的IP校验和计算。与主控制器的通信通过两个中断引脚和SPI实现,数据传输速率高达10 Mb/s。

  两个专用的引脚用于连接LED,进行网络活动状态指示。

  应当注意的是,当从ENC28J60读取多个数据时,即使不需要主控芯片STM32输出的数据,每读取一个数据前也要向SPI发送缓冲器写一个数据用来启动SPI的接口时钟。[page]

  ENC28J60典型应用电路如图4所示。

基于STM32的嵌入式以太网门禁系统设计

 

  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所示,每次重新启动后,首先初始化相关寄存器,初始化各个模块,确定已经连接服务器,然后进入程序主循环。

基于STM32的嵌入式以太网门禁系统设计

 

  首先监测是否需要调用LwIP内部的快速定时器和慢速定时器。然后监测服务器是否有断开,如果断开则重新连接服务器,没有断开的话则检测是否有智能卡,有的话接收卡中信息进行处理然后发送给服务器。

  结语

  本文对使用STM32为主控芯片的门禁系统的硬件和软件架构进行了相应的描述,对于文中所涉及的芯片和以太网协议的使用具有指导意义,能够较大幅度地降低成本,同时门禁系统的使用会更加稳定,传输距离更长。

关键字:STM32  以太网  门禁系统 引用地址:基于STM32的嵌入式以太网门禁系统设计

上一篇:基于STM32的数字加密录音笔设计
下一篇:采用STM32的心电采集仪设计方案

推荐阅读最新更新时间:2024-03-16 13:47

STM32】通用定时器的基本原理(实例:定时器中断)
STM32F1xx官方资料: 《STM32中文参考手册V10》-第14章通用定时器 STM32的定时器 STM32F103ZET6一共有8个定时器,其中分别为: 高级定时器(TIM1、TIM8);通用定时器(TIM2、TIM3、TIM4、TIM5);基本定时器(TIM6、TIM7)。 他们之间的区别情况见下表: STM32定时器的区别 定时器种类 位数 计数器模式 发出DMA请求 捕获/比较通道个数 互补输出 特殊应用场景 高级定时器 16 向上、向下、向上/下 可以 4 有 带死区控制盒紧急刹车,可应用于PW M电机控制 通用定时器 16 向上、向下、向上/下 可以 4 无 通用。定时计数,PWM
[单片机]
【<font color='red'>STM32</font>】通用定时器的基本原理(实例:定时器中断)
STM32时钟详解
1.概述 时钟是单片机的脉搏,是单片机的驱动源,使用任何一个外设都必须打开相应的时钟。这样的好处是,如果不使用一个外设的时候,就把它的时钟关掉,从而可以降低系统的功耗,达到节能,实现低功耗的效果。每个时钟tick,系统都会处理一步数据,这样才能让工作不出现紊乱。 2.原理 首先,任何外设都需要时钟,51单片机,STM32,430等等,因为寄存器是由D触发器组成的,往触发器里面写东西,前提条件是有时钟输入。 51单片机不需要配置时钟,是因为一个时钟开了之后所有的功能都可以用了,而这个时钟是默认开启的,比如有一个水库,水库有很多个门,这些门默认是开启的,所以每个门都会出水,我们需要哪个门的水的时候可以直接用,但是也存在一个问题,
[单片机]
<font color='red'>STM32</font>时钟详解
38. ADC实验
一。ADC通道与引脚的对应关系 二。常用库函数 三。ADC初始化函数 ADC_Init(ADC_TypeDef* ADCx, ADC_InitTypeDef* ADC_InitStruct); 例: 四。ADC使能函数,ADC使能软件转换函数 不使用外部触发,使用软件触发,所以调用使能软件转换函数。 五。实验步骤 void Adc_Init(void); // 完成步骤1--4 //初始化ADC //这里我们仅以规则通道为例 //我们默认将开启通道0~3 void Adc_Init(void) { ADC_InitTypeDef ADC_InitStructure; GPIO_In
[单片机]
38. ADC实验
整车厂如何快速实现测试设备CANFD升级?
一、新一代智能网联车 CANFD 的应用 传统的汽车网络架构主要是由 CAN 总线组成,车内分布式电控单元 ECU 按照功能划分为动力总成、车身控制、辅助驾驶等总线区域;车窗、车灯、天窗等则通过 LIN 总线接入 CAN 网络。 在新一代智能网联车的浪潮下,随着车载 ECU 的与日倍增以及处理器运算能力和硬件的高速发展,连接 ECU 的网络需要更大的带宽,这一需求远超 CAN 等传统车载网络的容量极限。 因此,比较明确的趋势是向 CAN FD 过渡,CAN FD 提供了 64 字节的数据吞吐量以及最高 5Mbps 的传输速率。由于车载 以太网 具有高带宽、低延迟、低成本的特性,在新一代整车架构中将替代 CAN 总线成
[汽车电子]
整车厂如何快速实现测试设备CANFD升级?
STM32-printf重定向到USART
在使用STM32的过程中,尤其是刚开始学习使用的时候,由于不知道自己的程序写的对不对,就经常需要一点验证的方法,点亮一个LED灯就是最简单的验证方法,但是有的时候还经常需要串口的输出来验证自己的程序是否正确,但是官方提供的函数库中用于串口发送的好像就一个USART_SendData(),通过外设USARTx发送单个数据,对于熟悉C语言的同学来说,这个函数还没有格式输出,当想要输出一个数字,或者字符串的时候,使用起来可能有点麻烦,现在有一个很好的方法就可以使用C语言中的printf()函数,而且使用方法是一样的。如何使用,很简单,我们只需要重新定向printf就可以,将它的数据用STM32的串口进行发送出去就可以了。 首先添加pr
[单片机]
如何利用VSCode 搭建STM32开发环境
众所周知,Keil是一款收费软件,虽然可以Po解使用,但很多公司还是有点害怕,想必有不少读者都收到过**函。 之前,开发单片机项目,可以说 Keil 是最佳选择之一,但VSCode横空问世之后,这种格局被打破。 因为 VSCode 免费且好用,可以安装各种插件,很多工程师逐渐从Keil 转向了 VSCode。而且,VSCode还能实现 Keil 不能实现的一些功能。 下面就给大家分享一下 VSCode 搭建 STM32 开发环境的一些常规且使用的功能。 一、需要的软件和工具 下载最新版VS Code: 安装好插件,具有良好的代码补全与调试功能。 VS Code下载地址:https://code.visualstud
[单片机]
如何利用VSCode 搭建<font color='red'>STM32</font>开发环境
STM32使用SWD连接报错总结
使用SWD通过J-Flash烧写STM32时,会出现各式各样的错误; 总结下原因: 1、复位脚被拉低了,这次我遇到的就是复位引脚的电容焊反了(钽电容),可以正常连接,但是烧写程序时会出现如下报错 – - Erasing affected sectors … - ERROR: RAM check failed @ address 0x20000000. - ERROR: Write: 0x03020100 07060504 - ERROR: Read: 0x00000000 00000000 - ERROR: (0 bytes of RAM have been checked successfully) - ERROR: Fail
[单片机]
STM32单片机中断详解
中断,在单片机中占有非常重要的地位。代码默认地从上向下执行,遇到条件或者其他语句,会按照指定的地方跳转。而在单片机执行代码的过程中,难免会有一些突发的情况需要处理,这样就会打断当前的代码,待处理完突发情况之后,程序会回到被打断的地方继续执行。 1 EXTI控制器 外部中断/事件控制器(EXTI)管理了控制器的 23 个中断/事件线。每个中断/事件线都对应有一个边沿检测器,可以实现输入信号的上升沿检测和下降沿的检测。EXTI 可以实现对每个中断/事件线进行单独配置,可以单独配置为中断或者事件,以及触发事件的属性。 外部信号进入经过1的边沿检测电路,检测是否符合(有2和3的上升沿和下降沿选择寄存器决定),产生信号,然后和4软件
[单片机]
<font color='red'>STM32</font>单片机中断详解
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved