目录
一. 设计目的
为保证武警执勤的信息化和联动化,设计了一款基于STM32处理器的武警报警信息系统终端,该终端支持基于以太网的有线通信和基于WiFi的无线通信两种通信模式,一处报警,处处联动;支持语音、LCD、LED等多种同时报警;支持按键、触摸屏两种方式触发报警;
二. 拟解决问题
(1)本终端可支持多种类型的警情事件:
报警、命令、查询、请求等,每种事件类型又有多种不同信息内容和处理方式,因此,需准确有效的对不同事件进行判断并作出相应动作,且处理速度快。
(2)为保证各终端传输判断警情事件的准确和快速,需制定一套通信协议,该通信协议应具有以下特点:内容覆盖全面,可包括所有警情信息的数据;精简,保证传输、处理快速;具有可扩展性;包含起始码与结束码;包含源终端地址与目的终端地址。
(3)警情事件触发时,为能准确快速定位所需的报警信息文件,需为报警文件制定统一的命名规则,且命名规则需与通信协议相对应。
三. 系统方案
为满足移动哨位执勤的需求,本终端需支持有线通信和无线通信两种通信模式,一处报警,处处联动响应;为实现报警全方位多样化,本终端扩展多个模块,可支持语音、LCD、LED等多种方式同时报警,报警内容用户可自行定制;支持按键、触摸屏两种输入方式触发报警;同时,本终端可将武警部队已有的多种设备如电网、摄像头、红外线等多种设备融为一体。
四. 整体设计
下图为整个系统的结构设计示意图:
下图为系统设计框图:
本终端主要由以下模块构成:STM32处理器模块、供电模块、MP3语音解码模块、LCD触摸屏模块、LED模块、SD卡模块、按键模块、继电器模块、和通信模块。通信模块包括以太网和WiFi两个子模块,由C8051F340处理器控制实现,并通过UART与STM32处理器传输通信数据。当有报警事件触发时,STM32处理器判断事件作出响应的同时生成通信协议,并通过UART将数据包发送给C8051F340处理器,C8051F340通过以太网或WIFI将报警数据广播给网络中的其他终端;当以太网或WIFI接受到报警信息时,C8051F340处理器将报警数据放入缓存区并通过UART发送给STM32处理器进行处理。
五. 系统各模块设计介绍
1. 供电模块:
为方便连接武警部队外部设备,终端采用12V直流电源供电,12V直流通过稳压芯片LM2575将电压稳压得到固定的5V为LCD触摸屏控制器、C801F340单片机等元器件供电,输出1A电流供整个终端使用。5V电流通过低压降稳压器得到3.3V和2.5V电压。在电源部分和各芯片输入电压接口,需进行滤波,以得到比较稳定的直流电流。
2. MP3语音解码模块:
该模块负责解码MP3语音文件,有报警触发时,可实现终端的语音报警。终端选用VS1003作为终端的语音解码芯片,该芯片供电电压为3.3V模拟正电源、2.5V数字正电源及3.3VI/O正电源,通过SPI接口与STM32处理器进行通信。
3. LCD触摸屏模块:
该模块为本终端的显示模块,LCD体积小、功耗低、承载的信息量大,可实现移动哨位终端的触摸按键报警和报警信息显示。本终端中STM32处理器通过SPI接口与LCD的触摸屏控制器通信,FSMC接口模仿8080时序与LCD的显示屏控制器通信。
4. SD卡模块:
终端的存储模块,负责存储语音和显示的报警文件,当有报警触发时,STM32处理器从SD卡中读取出相应的报警文件,并将数据发送到各报警模块进行MP3语音报警和LCD、LED显示报警。终端采用Micro SD卡作为数据存储设备。
5. LED屏模块:
采用灵信LS-T的LED屏,STM32处理器通过UART对其进行控制。
6. 按键模块:
基于STM32处理器I/O口扩展按键,用户可通过按键输入警情事件,实现终端报警。
7. 继电器模块:
基于STM32处理器I/O口扩展继电器,继电器连接外部子弹箱、摄像头等设备,处理器可通过继电器改变和查询外部设备的工作状态。
8. 通信模块:
由以太网和WIFI两种通信模块构成,为各终端间广播报警数据,可实现整个警区的联动报警。该通信模块由C8051F340单片机控制,C8051F340通过UART接口与STM32处理器传送通信数据。
六. 通信协议设计
下表为以太网通信报警数据帧格式,为了确保报警数据接收完成且数据有效,在每帧数据的开始和结束分别设置了通信数据的起始字节0x3A和结束字节0x5C;数据格式中第2字节为源终端地址字节,通过其地址可确定该终端的编号,8位数表示源终端编号为2~254之间的地址;第3字节为目的终端编号字节,表示接收数据的终端地址,当目该字节数据为0xff时,表示网络中所有终端全部接收;第4、5字节组合为一个16位的命令状态字,该字中的每一位可代表一种命令事件的状态,本文定义了13种命令位,预留3位;第6、7字节组合为一个16位的报警状态字,该字中的每一位可代表一种报警事件的状态,本文定义了8种命令位,预留8位;第8、9字节组合成一个16位的请求字,该字中的每一位可代表一种请求事件的状态,本文定义了4种请求位,预留12位;第10、11字节组合成一个16位的查询字,该字中的每一位可代表一种查询事件的状态,本文定义了12种查询位,预留6位;第12-16字节为系统功能预留字节,用来以后报警系统升级时扩展功能;第17字节为上报以太网字节,该字节用来表示报警事件触发时,是否需要通过以太网上报给警区其他终端;第18、19字节组合成一个16位的非上报以太网字节,用于控制系统工作于训练或实战模式。
报警数据编号 | 字节定义描述 |
---|---|
第1字节 | 起始码0xA3 |
第2字节 | 源终端地址字节 |
第3字节 | 目的终端地址字节 |
第4~5字节 | 命令字节 |
第6~7字节 | 报警字节 |
第8~9字节 | 请求字节 |
第10~11字节 | 查询字节 |
第12~16字节 | 预留 |
第17字节 | 上报标志字节 |
第18~19字节 | 非上报标志字节 |
第20字节 | 结束码0xC5 |
七. 系统硬件设计
1. 硬件总体设计
下图为原理图的顶层连接图,它直观地反映了处理器与各模块的连接方式,通信方向等信息。
2. 各模块硬件设计介绍
(1)STM32处理器模块电路设计
本终端核心处理器为STM32F103ZET6,该模块电路设计时需注意其硬件特性,如供电、时钟管理、复位控制、启动模式的设置和调试管理等。
本终端采用3.3V电压为STM32供电,为了在VDD关闭时仍能保持备份寄存器的内容,VBAT引脚连接到一个纽扣电池以提供备用电压。同时为了保证STM32处理器输入电源的稳定,芯片的11个VDD电源输入引脚分别连接到100nF的陶瓷电容。复位电路利用电容电压不会突变的性质,开机后电容电压为零,芯片复位,电源通过电阻向电容充电,直至电容电压上升为高电平。本终端将BOOT1引脚接地,BOOT0引脚接开关用来选择闪存存储器或系统存储器作为处理器的启动区。本终端主要使用JTAG方法调试。
(2)电源模块设计
下图为本终端的电源模块电路,本终端使用12V供电,电源可由直流电机提供,经过稳压、降压、滤波得到终端需要的电压。
图中1N5819属于肖基特二极管,与普通二极管相比它具有结电容小、速度快(开关损耗低)、压降低(电压损耗低)、大电流(额定正向电流为1A)等特点,被广泛应用于开关电源中,作大电流整流、保护二极管使用。图中LM2575是1A集成稳压电路,只需极少外围器件便可构成一种高效的稳压电路,可大大减小散热片的体积。本终端通过LM2575芯片将电压稳压到5V,输出1A电流供整个终端使用。5V电压经过ASM1117-3.3和ASM1117-2.5芯片后输出3.3V和2.5V电压。ASM1117是一个正向低压降稳压器,内部集成过热保护和限流保护,固定输出电压为3.3V和2.5V,具有1%的精度。因电源输出电压波形中含有较大的毛刺和波动,为得到比较平滑的直流电压,需要利用具有储能作用的电抗性元件如电容、电阻组成滤波电路来滤除输出电压中的脉动成分,如图所示,本终端滤波主要采用电容滤波电路(如电容C22、C25等)和LC滤波电路(如L1和C27组成的LC滤波器),以保证输出电压的稳定。电容滤波电路中,并联的电容器在电压升高或降低时通过充放电使输出电压得到平滑。
(3)语音报警模块电路设计
本终端语音解码模块采用VS1003解码芯片。下图为本终端语音解码模块原理图。
STM32处理器与VS1003通过SPI接口进行数据传输(SDI)和命令传输(SCI)。本终端采用12.288MHz晶振为VS1003提供时钟。图中DREQ为数据请求总线,当它为高电平时,VS1003能够接受数据,DREQ变低时,必须停止发送新的数据。VS1003芯片采用模拟、数字、I/O单独供电,原理图中IOVDD、CVDD、AVDD等分别为芯片的I/O电源输入引脚、处理器核电源输入引脚、模拟电源输入引脚,在为VS1003电源引脚输入正确的电压的同时并联适当的电容进行滤波以保证输入电压的稳定。
(4)存储模块电路设计
本终端STM32处理器通过SDIO接口与Micro SD进行通信,SDIO通过SD的I/O引脚连接,并且通过SD上的I/O数据位与外围传输数据。Micro SD卡与STM32处理器通过四根数据总线DAT[0-3]交换数据,CMD为命令总线,CLK为时钟总线,用来同步时钟。
(5)LCD模块电路设计
本终端采用FSMC的NOR\PSRAM模式与LCD的显示屏控制芯片ILI9341进行通信,既方便控制和开发,又能保证通信效率。FSMC与8080两种接口只有D/CX(数据/命令选择)信号引脚有所区别,本终端将FSMC的A16地址线作为数据/命令选择线使用,模仿8080通信时序。
终端的触摸屏控制器为TSC2046,STM32通过SPI接口向它写入工作模式配置信息,TSC2046检测到屏幕被触摸后,通过中断引脚触发STM32的外部中断,并将触点电压传输给STM32处理器,通过处理和计算,判断屏幕被触摸的位置。
(6)C8051F340处理器电路设计
C8051F340处理器采用5V供电,通过C2调试接口(该接口包括C2CK时钟信号和C2D双向数据信号)连接JTAG对单片机程序进行烧写和调试。C8051F340通过并行总线(A[0…7],D[0…7],HARD_A[0…7])控制以太网芯片,通过UART控制WIFI模块,同时与STM32处理器通过UART接口通信。
(7) C8051F340处理器电路设计
本终端以太网模块采用8位总线控制的以太网驱动芯片CP2200。下图为以太网控制电路设计原理图,CP2200通过8位的数据总线D[0…7]和8位的地址总线A[0…7]采用非复用并口的方式与C8051F340通信,图中HARD_A[0…7]连接8位拨码开关,表示终端地址的后8位,可实现硬件改变终端地址。
/WR、/RD、/CS引脚为控制引脚,分别代表写选通、读选通、片选信号,“/”代表他们都是低电平有效信号。/INT为芯片的中断服务请求引脚,该引脚连接到C8051F340的外部中断引脚,通过它向主机申请中断。本终端网络变压器选用HR911175A,如图所示,CP2200芯片将收发信号的引脚与HR911175A的收发引脚对应连接,LINK(网络连接LED指示灯接口)与ACT(网络活动状态指示灯接口)也连接到HR911175A为用户指示以太网的连接和通信状态。
(8)WiFi模块电路设计
WIFI通信采用HLK-RM04模块,HLK-RM04是基于通用串行接口的符合网络标准的嵌入式模块,内置TCP/IP协议栈,能够实现用户串口、以太网、无线网3个接口之间的转换。HLK-RM04通过UART接口与C8051F340传送数据。
(9)LED模块接口电路设计
处理器通过串口控制LED屏,终端采用MAX3232芯片实现TTL与RS-232电平的转换,该芯片使用3.3V供电,能实现真正的RS-232性能,器件只需要4个0.1uF的外部小尺寸电荷泵电容。
八. 系统软件设计
1. 软件结构图
下图为软件结构图,列出了软件主要组成部分:
2. 各模块软件设计
(1)STM32处理器主程序流程
下图为STM32处理器主程序流程图,程序在完成各模块的初始化工作后,开始进行按键和触摸按键的循环检测。
当有按键按下时,程序判断按键并确认所触发的事件,并根据通信协议判断是否需要上报以太网。如果事件需要上报以太网,程序将根据所制定的通信协议生成相应的20字节的数据包,并将数据包通过UART接口传送给C8051F340进行以太网广播发送给系统中其他终端。在确认报警数据后,本终端需根据事件作出相应的响应,首先,程序根据事件重新设置继电器的开关状态,控制外部设备如子弹箱、摄像头、警灯等作出与事件相对应的动作,之后程序根据报警文件的命名规则生成相应报警文件名称,并从SD卡中定位文件,将读取的文件数据传送给MP3、LCD、LED等报警模块。
当以太网有数据接收时,C8051F340通过UART将数据传送给STM32,STM32触发UART接收中断。STM32在中断函数中接收20字节的通信数据,并判断接收地址与本终端地址是否匹配,如果匹配则解析数据包,确认数据包中所包含的事件信息,中断根据触发事件作出相应的响应。如果UART接收中断到来时MP3模块正在播放语音报警文件,在中断函数关闭MP3播放标志位SD_FLAG,结束MP3本次播放立刻进入下次数据包解析和报警。
(2) MP3语音子模块软件流程
下图MP3语音子模块软件流程图,进行语音报警时STM32打开SD卡,定位SD卡中与根据命名规则生成的报警文件名相匹配的文件并读取文件内容,将读取的数据通过SPI接口发送给MP3控制芯片VS1003。
数据请求 (DREQ)信号引脚用来告知SCI状态,当DREQ为1时表示SCI配置成功,MP3就绪,可随时向VS1003进行SDI(串行数据接口协议)传输准备播放语音文件。
处理器将从SD卡读取的文件数据以每次32字节(DREQ信号引脚在FIFO能够接受数据的时候输出高电平,VS1003可获得32Byte的SDI数据或一个SCI命令)的结构通过SPI通信传送给VS1003芯片进行语音解码。程序中SD_FLAG为语音播放标志位,当SD_FLAG被清零(比如新的以太网数据到来)时,结束MP3播放。
(3)LCD显示子模块软件流程
终端采用STM32处理器的FSMC接口时序来模拟LCD显示屏的8080接口时序,下面代码为部分模拟方式。
#define LCD_ILI9341_CMD(index) LCD_WR_REG(index)
#define LCD_ILI9341_Parameter(val) LCD_WR_Data(val)
#define Bank1_ D ((u32)0x60020000) //Disp Data ADDR
#define Bank1_ C ((u32)0x60000000) //Disp Reg ADDR
/*选定LCD指定寄存器*/
#define LCD_WR_REG(index) ((*(__IO u16 *) (Bank1_ C)) = ((u16)index))
/*将LCD中的index寄存器设置为val值*/
#define LCD_WR_CMD(index,val) do{(*(__IO u16 *) (Bank1_ C)) = ((u16)index);
(*(__IO u16 *) (Bank1_ D)) = ((u16)(val));}while(0)
/*往LCD GRAM写入数据*/
#define LCD_WR_Data(val) ((*(__IO u16 *) (Bank1_ D)) = ((u16)(val)))
下图为LCD显示子模块软件流程图:
(4)LCD触摸子模块软件流程
当EXTI中断触发时,表示触摸屏控制芯片检测到了屏幕触摸,程序根据转换的逻辑坐标判断触摸点是否在按键区域,如果在按键区域,判断该按键所对应的报警事件,并进行相应的处理和动作。下图为LCD触摸屏子模块流程图。
(5)LED子模块软件流程
LED点阵显示模块通过UART接口实现与STM32的通信,当有报警等事件触发时,程序根据报警事件生成报警信息文件名,操作SD卡打开相应的报警文件,读取文件中的报警数据,存放于缓冲区。报警文件中存放的为字符数据,程序需将字符型数据转换为16进制数据,之后将数据通过UART3接口将数据发送到LED点阵显示模块进行报警信息显示。下图为LED子模块流程图。
处理器与LED通信时,需先发两个0x01以选择屏号,LED模块收到后回复两个01表示准备就绪,此时可向LED发送显示信息。
(6)SD存储子模块软件流程
本终端SD存储模块所使用的文件系统为FatFs,它完全由AISI C语言编写并且完全独立于底层的I/O介质。SDIO与SD卡之间的数据传输采用DMA(直接存储器存取)的传输方式。
SD卡初始化主要从卡上电、卡识别和卡初始化几个方面进行,下图为SD卡初始化流程图。
在调用文件系统操作SD卡时,首先需调用f_mount()接口函数在SD卡中注册工作区才可进行其他操作,注册工作区完成后,程序通过调用文件系统中的接口函数操作SD卡。本终端所进行的操作主要为:调用f_open()函数以只读的方式打开SD卡、调用f_read()函数读取SD卡中的指定文件名的数据内容、调用f_close()函数关闭SD卡。
(7)按键子扫描程序流程
终端按键有三个状态:按键按下状态、按键抬起状态、按下后抬起状态,按键扫描程序需实时检测按键状态,当有按键状态改变时,确定并记录按键触发的哪种状态,下图为按键扫描流程图。
(8)以太网程序流程
下图为以太网程序流程图。
以太网控制芯片CP2200连接到C8051F340的外部中断0引脚,当以太网有数据接收时,CP2200触发单片机的外部中断,单片机接收20字节的UDP数据包,并通过UART0将数据传送给STM32。同时,STM32处理器生成的数据包也是通过UART0与C8051F340进行传输,C8051F340的UART0接收中断触发时,单片机在中断程序中循环接收STM32传送的数据包并存放于缓冲数组中,并将数据发送给以太网中的其他终端。
(9)WiFi程序流程
本终端C8051F340通过UART1接口与WIFI模块进行数据交换,下图为WIFI模块程序流程图。
初始化完毕后程序检测是否有USART中断触发,其中USART1为单片机与STM32处理器通信接口,USART2为单片机与WIFI模块通信接口。USART1接收到数据后,单片机将数据通过USART2接口发送到WIFI模块;USART2接收到数据后,单片机将数据通过USART1接口发送给STM32处理器。
九. 系统创新
该基于STM32处理器的武警报警信息系统终端具有以太网和WiFi两种通信方式,即可用做固定设备又可用作移动报警设备,由于这次设计主要注重了功能,便携性未能得到充分体现,下一版(有时间的话)将在此基础上去掉以太网、按键、继电器等功能,应该能做到手机大小,使用将会很方便,而控制外部设备的功能依然可以通过向固定设备发送报警数据实现。
本终端所有报警内容可由用户自行定制,并非常方便随时添加、修改或删减。