APP下载

基于STM32的WI-FI视频采集与传输系统设计

2022-02-21林开司

吉林化工学院学报 2022年1期
关键词:中断串口路由器

林开司,张 露

(铜陵职业技术学院 电气工程系,安徽 铜陵 244000)

视频信息的特点是形象直观、信息量大且是动态画面.目前对视频信息采集与传输的应用涉及范围非常广泛,比如交通监控、医疗、安防、航空航天等诸多领域[1].因为具有低功耗、小体积等特点,基于嵌入式的视频采集受到重视.目前,使用无线通信技术实现对信息的传输变得方便.无线通信中的WI-FI技术具有传输速度快等特点,非常适合视频图像传输.结合嵌入式和WI-FI的特点,基于嵌入式的WI-FI视频采集与传输目前已得到广泛应用.STM32单片机资源丰富且功能强大,随着价格的降低更受到使用者的青睐[2].所以本设计采用STM32为主控制器,处理采集的视频图像,然后将处理的视频经WI-FI传输给上位机或移动终端.为了实现远程监控,将采集的视频数据上传到阿里云,然后可以通过访问阿里云获得视频图像.为提高系统的实时性和稳定性,还移植了UCOS-Ⅲ操作系统.视频系统设计结构简单,可移植性强,很容易移植到与视频监控有关的物联网等应用中.

1 系统总统设计

系统采用具有Cortex-M4内核的STM32F407作为主控芯片,因为视频图像数据较大,这里选择芯片Flash较大的STM32F407VGT6.摄像头OV2640模块用于采集图像,使用MARVELL 88W8801芯片设计WI-FI模块.为了方便系统调试还设计了串口,串口使用CH340实现USB与串口的转换.系统框图如图1所示.

图1 系统框图

2 系统硬件设计

图2为具体的STM32F407控制电路,电路中包括时钟电路和复位电路,以及有关的接口电路.由于篇幅原因,这里只给出了与系统有关的STM32F407的部分引脚及功能.

图2 STM32F407控制电路

2.1 摄像头接口电路

摄像头使用OV公司生产的OV2640,它是一款CMOS类型的数字摄像头,支持输出200万像素的图像(1600×1 200).由于其自动压缩功能,在保证图像质量的情况下可将采集的图像压缩为JPEG图像后输出,以此使图像数据减小,提高传输效率[3-4].接口电路如图3所示.

图3 OV2640接口电路

2.2 WI-FI接口与串口通信

WI-FI模块的控制芯片采用Marvell 88W8801,该芯片是高度集成的单频段(2.4 GHz)片上系统(SoC),专门设计用于支持下一代WLAN产品的高吞吐量数据速率.广泛应用于成像平台、消费类电子设备、物联网、移动路由器、智能能源系统等.它有两个主机接口,一个USB2.0接口和一个SDIO接口,外设总线接口包括串口、GPIO口等.这里88W8801与STM32之间的连接使用SDIO接口,且它们之间的数据传输采用4位数据模式.该模式下,数据在所有4个数据管脚D0~D3上传输,中断管脚不可独占使用,因为它被用作数据传输线.如果需要中断功能,则需要一个特殊的定时来提供中断.WI-FI模块与STM32连接电路如图4所示.

图4 WI-FI接口电路

为便于系统调试,还设计了串口通信.使用CH340实现USB和串口间的通信转换,实现系统与上位机通信.USB转换电路如图5所示.

图5 USB转串口电路

3 移植UCOS-Ⅲ操作系统

由于实时操作系统要求严格的及时事件响应,并且还具有非常好的稳定性能,所以系统中移植了UCOS-Ⅲ实时操作系统.首先建立工程,工程建立后新建不同名称的文件夹用于存放不同类型的文件,比如建立BSP文件夹存放外设硬件驱动程序;App文件夹存放应用软件任务;uCOS-Ⅲ文件夹存放UCOS-Ⅲ相关代码等.然后把UCOS-Ⅲ的源代码按照分类复制到上述新建的不同文件中[5].

3.1 修改os_cpu.h和os_cpu_c.c文件

使用STM32中的SysTick提供周期时钟中断,实现UCOS-Ⅲ系统对任务延时的计算和任务调度.

系统中的OS_CPU_SysTickHandle()中断处理函数与STM32库中stm32f4xx_it.c文件中的SysTick_Handle()函数功能一样,都是用于处理中断.为了便于理解,这里采用SysTick_Handle()函数,注释掉os_cpu.h文件中的OS_CPU_SysTickHandler()和OS_CPU_SysTickInit()函数声明,对应的把OS_CPU_c.c中上述定义的两个函数定义也注释掉.

3.2 修改os_cpu_a.asm和cpu_a.asm文件

由于下载的UCOS-Ⅲ移植工程是官方在IAR编译环境下建立的,IAR汇编的语法方面与MDK编译器有点区别,所以要修改汇编文件的部分指令.这里将os_cpu_a.asm和cpu_a.asm文件中的PULIC指令都修改成EXPORT.

3.3 修改启动文件

在CM3内核中,有一个中断异常PendSV,专门用于解决因SysTick中断在任务调度时,因其抢占其他中断而不能进行任务上下文切换所带来的任务调度延时问题.使用PendSV时,可在 stm32f14xx_it.c文件的PendSV_Handler函数中编写任务的上下文切换操作,但必须要求使用汇编编写,难度较大,所以使用os_cpu_a.asm文件中OS_CPU_PendSVHandler函数.当产生PendSV异常时,使程序跳转到OS_CPU_PendSVHandler这段代码中进行上下文切换.但产生中断异常都要跳转到stm32f4xx_it.c文件中相应的中断服务函数,所以只要修改启动文件中定义的中断向量表即可.使PendSV异常的中断向量由原来的PendSV_Handler改为指向OS_CPU_PendSVHandle即可.然后把stm32f4xx_it.c文件中原有的PendSV_Handler空函数注释掉,编写SysTick中断服务函数.代码如下:

void SysTick_Handler(void)

{

OS_IntEnter();

OS_TimeTick();OS_IntExit();

}

至此完成了系统移植,剩下就是编写用户文件.

4 软件设计

系统移植完成后,要进行用户文件的编写.LwIP是适用于嵌入式领域的轻量级TCP/IP协议栈.由于其开源,占用的RAM和ROM较少,支持较完整的TCP/IP协议[7],且便于剪裁和调试,广泛应用在中低端的32位控制平台.为了实现WI-FI无线视频传输,这里通过移植LwIP协议栈来实现TCP/IP协议.LwIP协议移植的重点根据不同的硬件驱动,编写函数以实现硬件驱动层.移植时由3个函数与硬件密切相关,主要完成对实际硬件初始化的low_level_init()函数;用于发送数据的low_level_output()函数;用于接收数据的low_level_input()函数,将DMA缓冲区的数据拷贝到Pbuf结构体[3,6].

除LwIP移植外,本系统中的关键代码为视频图像采集与传输,程序流程图如图6所示.

图6 图像采集与传输任务流程图

系统启动后,LwIP初始化,uCOS初始化并创建任务,这里创建两个任务,一是DHCP协议处理任务;二是图像采集与传输任务.对于DHCP处理任务,开启DHCP服务后等待IP获取是否成功,如果获取失败则使用静态IP,然后将任务交给任务管理器.任务管理器由此可实现不同任务间来回调度[7].DHCP服务任务流程图如图7所示.

图7 DHCP服务程序流程图

使用Android开发终端App,这里只实现了针对手机的App.App界面如图8所示,输入连接IP和端口号,点击建立连接,然后点击进入视频接口即可看到摄像头采集传输过来的视频图像.另外还使用VC++ 6.0软件开发了上位机程序,用于上位机接收采集的视频图像.

图8 手机App界面

5 系统测试

在代码中将WI-FI模块配置成STA模式,使得WI-FI模块与路由器连接,而路由器与外网连接,由此可实现远程的视频监测.调试过程中可以通过串口,打印WI-FI模块与路由器连接时的信息,包括连接路由器的名称和密码、模式等.视频采集系统连接到路由器后,此时采集系统相当于一台服务器,可以通过www.ip.138.com查询连接到外网的本地IP地址,在手机App上输入查询的IP地址实现与视频采集系统的连接.本次测试时视频采集系统与路由器处于同一网段,路由器自动分配的IP地址为192.168.1.102.系统中设置的采集图像为320×240.打开上位机应用程序,输入IP地址和端口号,点击连接即可观看到采集的实时视频图像,如图9所示.同样打开手机App输入IP地址和端口号后连接成功,采集的视频如图10所示.另外采集到的视频数据也可以发送到云平台,本系统是将视频数据发送到阿里云.经过实测,采集的视频图像传输稳定、流畅.

图9 上位机接收的实时视频

图10 手机接收的上位机视频

6 结 论

由于基于嵌入式的视频采集与传输系统具有成本低、低功耗和体积小等优点越来越受到重视,在很多领域都有应用.本文设计了一套以STM32F407控制核心的WI-FI视频传输系统,该系统以中端WI-FI芯片MARVELL 8W8801作为WI-FI模块控制器.为了增强实时性,对STM32还移植了UCOS-Ⅲ实时操作系统,同时还开发了针对Android系统的手机App和上位机应用程序,实现手机终端和上位机对采集视频的实时观测.另外为了实现远程,系统将数据发送到阿里云平台,通过实际测试,系统稳定,视频传输流畅,具有一定的应用价值.

猜你喜欢

中断串口路由器
买千兆路由器看接口参数
维持生命
基于NPORT的地面综合气象观测系统通信测试方法及故障处理
路由器每天都要关
路由器每天都要关
浅谈AB PLC串口跟RFID传感器的通讯应用
基于EM9000工控板高性能双串口通信模型设计与实现
“单片机中断概述”微课教学设计
一种考虑GPS信号中断的导航滤波算法
Linux中断线程化分析及中断延时测试