基于STM32F407的图像采集与传输系统的设计与实现
摘 要: 系统以基于Cortex-M4内核的STM32F407作为控制核心,使用OV9655图像传感器采集图像,并利用TFT屏动态显示。图像传输模块基于LwIP协议实现向PC传输图像,最后PC接收并保存图像数据,利用MATLAB编程恢复图像,将其与TFT显示的图像对比。实验结果表明,图像传输稳定可靠,图像清晰,满足机器人通过图像识别目标的要求。
0 引言
图像是人类获取信息的主要来源,也是智能机器人感知环境和识别目标的重要信息源之一[1]。因此,如何通过相机传感器高速、有效地获取和传输图像信息,成为智能机器人利用图像正确感知环境和识别目标的前提。本文介绍了一种基于STM32F407芯片,利用LwIP协议的图像采集与传输系统。
1 系统的总体设计方案
本系统的总体设计思路为:以STM32F407为主控核心,通过DCMI接口接收图像传感器OV9655采集的图像,利用DMA方式将图像发送到外部SRAM,同时通过FSMC接口将此数据发送到TFT屏显示,然后将外部SRAM上的图像通过网络传输并保存到PC,最后,利用MATLAB软件将接收的图像数据进行恢复显示,并验证其正确性。系统总体结构如图1所示。
2 系统的硬件构成
本系统的硬件电路主要包括:微处理器、摄像头、以太网模块、SRAM、TFT、RJ45接口、JTAG接口、复位电路、电源等。
本系统的微处理器为ST公司的STM32F407IGT6[2],其主频达168 MHz,具有1 MB Flash,196 KB SRAM,专有DMA的10/100 Ethernet MAC,14 bit并行相机高速接口,为图像数据的采集提供了高速的传输速率。
摄像头采用Omni Vision 公司的OV9655[3],这是一款用于移动设备的130万像素CMOS图像传感器,具有照相和图像处理的多种功能(曝光控制、灰度调节、自动白平衡、色彩饱调节和噪声消除等)。其采用的Omni Pixel技术平台,独特的像素架构增加了信噪比,使传感器在低光照的条件下仍能良好工作。OV9655支持的图像格式包括:RGB(GRB 4:2:2,RGB 5:6:5/5:5:5)、YUV(4:2:2)和YCbCr(4:2:2),输出的图像尺寸包括SXGA、VGA、CIF和小于CIF至40×30的任何尺寸,本文设置图像输出格式为RGB 5:6:5,分辨率为320×240。
以太网模块的收发芯片为National公司的10/100 M以太网物理层收发芯片DP83848C,该芯片遵循Ethernet II和IEEE802.3u标准,支持MII、RMII、SNI三种数据连接方式,本文采用了RMII模式,见图1。对外采用RJ45接口连接,支持平行交叉网线自适应(Auto-MDIX),内部还集成了数据收发及滤波功能。在全双工模式下,可以同时实现发送和接收,理论上最高速度能达到100 Mb/s,本文对其配置为100 Mb/s。
3 系统的软件设计
系统软件的实现包括:图像数据采集、网络传输、图像数据存储与恢复显示。本文将重点介绍图像采集和网络传输的实现。
系统软件结构采用C/S(Client/Server)模式[4],在服务器端主要实现图像的采集和发送,在客户端实现图像的接收、保存与恢复显示。
3.1 图像采集
通过STM32F407IG控制DCMI接收OV9655采集的图像,再由DMA将图像发送到外部SRAM,并将其复制到TFT屏上显示,如图2所示。
图像采集流程具体为:
(1)图像采集模块初始化,包括TFT彩屏初始化、SRAM初始化、DMA初始化和DCMI接口初始化。初始化配置后,实现摄像头的DCMI接口和SRAM关联,即可通过DMA将DCMI接口的图像传输到SRAM。
(2)DCMI接口配置为帧中断。当获得的一帧图像数据后,产生中断,进入DCMI的中断服务函数,实现将SRAM中的图像复制到TFT屏进行显示的功能。
(3)使能DCMI接口捕获图像,并产生DCMI中断。
(4)使能DMA,将DCMI接口的数据复制到SRAM。
3.2 图像传输
本文利用LwIP(Light weight IP)实现图像到PC的传输。LwIP是瑞士计算机科学院的DUNKELS A等人开发的一套用于嵌入式系统旳开源代码TCP/IP协议栈,其在保持TCP/IP协议栈完整性的基础上,减少了RAM和ROM的占用,使LwIP适合在嵌入式系统中应用[5]。
嵌入式TCP/IP协议栈通常有以下两种实现方式:一种是将协议簇中的每个协议作为一个单独的进程,并指定进程之间的通信点。其优点在于结构清晰,代码易懂,占用系统资源较少,且方便调试;另一种方式是将协议栈驻留在操作系统内核中,应用程序通过系统调用与协议栈通信。该方式对系统RAM、ROM资源占用较高,且不能很好地支持MDK[5]环境下的断点调试,故本文选择第一种实现方式。
本文采用C/S模式来实现图像数据的发送和接收。其中,嵌入式系统作为服务器,PC作为客户端。服务器首先创建一个Socket,等待与客户端的连接,连接成功后发送图像。
服务器图像发送程序的基本步骤为:
(1)创建Socket,并指定SOCK_STREAM为TCP的Socket;
(2)初始化服务器端口和地址,并绑定Socket到服务器地址;
(3)监听Socket;
(4)接受客户端连接Socket的请求,并返回连接成功的Socket和客户端的地址;
(5)处理客户端连接,将图像采集模块存储到SRAM的图像数据,发送到客户端;
(6)关闭Socket,退出服务。
客户端首先通过网络助手设置其地址和端口:(1)协议类型为:TCP Client;(2)IP地址为:192.168.1.30;(3)端口为:5000。然后,客户端调用Connect函数与服务器建立连接,连接成功后,通过网络助手接收并保存从服务器发送的图像数据(如图3所示),最后关闭Socket。
通过网络助手接收的图像数据是将图像中所有像素的RGB值逐行以每像素16 bit的十六进制数进行保存的。为了验证接收到的图像数据的有效性和准确性,本文通过MATLAB软件编程,恢复并显示图像,如图4所示,与图2中TFT屏显示的图像相比,经网络传输到PC的图像无失真。实验结果表明,图像经网络传输有效而准确。
4 结论
图像是机器人智能识别目标的重要信源之一。本文介绍了一种基于STM32F407的图像采集和传输系统的设计与实现,利用轻量的TCP/IP协议进行Socket编程,实现将服务器端采集的图像数据网络传输到PC客户端。测试结果表明,其图像传输效果高速而有效,可满足客户端对图像采集与传输的需求,并且该系统的架构容易升级到无线网络进行远程的图像、视频和语音传输。
参考文献
[1] 马燕.图像目标跟踪算法研究[D].西安:西安电子科技大学,2011.
[2] STMicroelectronics. STM32F407xx datasheet[N]. STMicroelectronics Group of Companies, 2013-03.
[3] OmniVision. OV9655 datasheet v1.3[N]. OmniVision Technologies, Inc., 2005-11-15.
[4] 王永虹,徐炜,郝立平.STM32系列ARM Cortex-M3微控制器原理与实践[M].北京:北京航空航天大学出版社,2008.
[5] 胡亦万,基于Cortex-M3的LwIP移植以及嵌入式WEB的应用研究[D].南昌:南昌大学,2013.
stm32f407系列单片机基础知识
参考stc公司标准开发手册 STM32F4xx中文参考手册1.pdf
本文是基于stm32f407zgt6单片机做出介绍
stm32系列单片机是stc公司开发并设计出的一类高速低功耗芯片,其具有众多可用内部资源,在下文将一一介绍
1:本芯片共有144引脚其中有大部分IO口都耐 5V (模拟通道除外)
2:支持调试: SWD和JTAG,SWD只要2根数据线
3:大部分IO口有第二,或第三功能功能较多
特性:
1、内核:带有 FPU 的 ARM® 32 位 Cortex®-M4CPU、在 Flash 存储器中实现零等待状态运行性能的自适应实时加速器 (ART 加速器 ™)、主频高达 168MHz, MPU,能够实现高达210 DMIPS/1.25DMIPS/MHz (Dhrystone 2.1)的性能,具有 DSP 指令集。,高达1 MB的闪存(Flash),增加了以太网MAC和照相机接口
2:多达 140 个具有中断功能的 I/O 端口
– 高达 136 个快速 I/O,最高 84 MHz
– 高达 138 个可耐 5 V 的 I/O
3:存储器
– 高达1 MB Flash
– 高达 192+4 KB的SRAM, 包括64-KB的CCM(内核耦合存储器)数据 RAM
– 具有高达 32 位数据总线的灵活外部存储控制器: SRAM、 PSRAM、 NOR/NAND存储器
4:时钟、复位和电源管理
(1)1.8~3.6V电源和IO电压
(2)上电复位,掉电复位和可编程的电压监控
(3)强大的时钟系统
- 4~26M的外部高速晶振
- 内部16MHz的高速RC振荡器
- 内部锁相环(PLL,倍频),一般系统时钟都是外部或者是内部高速时钟经过PLL倍频后得到
- 外部低速32.768K的晶振,主要做RTC时钟源
5:多种工作模式可供选择
(1)睡眠、停止和待机三种低功耗模式
(2)可用电池为RTC和备份寄存器供电
6:AD通道
(1)3 个 12 位、 2.4 MSPS ADC:多达 24 通道,三重交叉模式下的性能高达 7.2 MSPS
(2)内部通道可以用于内部温度测量
7:DA
2个12位DA转换器
8:通用DMA:具有FIFO和突发支持的16路DMA控制器
9:多达17个定时器: 12个16位定时器,和2个频率高达 168 MHz 的 32 位定时器,每个定时器都带有 4 个输入捕获 / 输出比较 /PWM,或脉冲计数器与正交 ( 增量 ) 编码器输入
10:通信接口:多达 15 个通信接口
– 多达 3 个 I2C 接口 (SMBus/PMBus)
– 高达 4 个 USART/4 个 UART( 10.5 Mbit/s、ISO7816接口、 LIN、 IrDA、 调制解调器控制)
– 高达 3 个 SPI ( 42 Mbits/s), 2 个具有复用的全双工 I2S, 通过内部音频 PLL 或外部时钟达到 音频级精度
– 2 个 CAN ( 2.0B 主动)以及 SDIO 接口
– 2个USB OTG
11:内置看门狗系统,分为独立看们狗和窗口看门狗
12:程序下载支持J-Link和串口下载器
当使用串口下载器是系统运行模式BOOT0与BOOT1要做出相应修改
13:系统架构
主系统由 32 位多层 AHB 总线矩阵构成,可实现以下部分的互连:
● 八条主控总线:
— Cortex™-M4F 内核 I 总线、D 总线和 S 总线
— DMA1 存储器总线
— DMA2 存储器总线
— DMA2 外设总线
— 以太网 DMA 总线
— USB OTG HS DMA 总线
● 七条被控总线:
— 内部 Flash ICode 总线
— 内部 Flash DCode 总线
— 主要内部 SRAM1 (112 KB)
— 辅助内部 SRAM2 (16 KB)
— 辅助内部 SRAM3 (64 KB)(仅适用于 STM32F42xxx 和 STM32F43xxx 器件)
— AHB1 外设(包括 AHB-APB 总线桥和 APB 外设)
— AHB2 外设
— FSMC
借助总线矩阵,可以实现主控总线到被控总线的访问,这样即使在多个高速外设同时运行期间,系统也可以实现并发访问和高效运行
内部资源对应图
引脚对应
相关问答
浩瀚m6kit版本是啥?浩瀚m6kit版本是一款基于ARMCortex-M系列处理器的嵌入式开发板,具有高性能、低功耗、可靠性强等特点。它采用了STM32F407VG芯片,拥有512KBFlash和192KBSRAM....
stm32 内部读写 flash ,为什么读写会不一样?这明显是上传后就丢的数据。存片内flash,也是先存到sram中,后再写入flash。直接开个数组,存sram里就行。前提是你MCU速度跟的上,得一次采集存sram,再到...
stm32f 103的闪存大小区别?1、f407整体性能要好103很多倍,也加入了更高级的内核,比如dsp。可以更快的跑系统。2、内核:STM32F103系列是Cortex_M3最高72M主频。3、STM32F407是Cortex....
stm32f 100与103区别?1、f407整体性能要好103很多倍,也加入了更高级的内核,比如dsp。可以更快的跑系统。2、内核:STM32F103系列是Cortex_M3最高72M主频。3、STM32F407是Cortex....
stm32 中 Flash 和sram的区别?这个4G指stm32最大寻址空间,包括所有能加入的有的没的设备。把内部flash,sram,所有外设都加满,外部的4块sram,4块norflash,4块nand等等都加满是可以4G全...
stm32F 103如何将存储在外部 flash 中的程序移到sram中运行?如果是要去读外部ADC芯片数据的话,很快的方法就是使用STM32CubeMX软件,选择对应的芯片,将你的ADC芯片的引脚连接到芯片上对应的硬件协议上,如IIC、SPI等,然...
nandflash 最快读写速度?NAND闪存的最快读写速度取决于具体的技术和规格。目前,高性能NAND闪存的读取速度可以达到几百兆字节每秒(MB/s),而写入速度通常在几十到一百多兆字节每秒之间...
JLink连接 stm32 出现cannotfindanyflashdevice该怎么办?硬件问题或连接问题,检查以下几点看是否正常。STM32是否供电正常jlink驱动是否正常,jlink本身固件是否正常连接方式和设置的是否一致(SWD或jtag)芯片选择...
怎么将数据写入 stm32 内部 flash 中?stm32有写flash函数调用相应的库函数,可以写一个字半个字还可以擦除把adc读回的值用写flash函数写到未使用的地址就可以了需要提前查看地址使用量,ide都支...
怎样读 STM32 内部 flash 数据?假如你要读取的地址是ADDRESS,赋给变量a,那么读取8位数据(1字节)为a=*(uint8_t*)ADDRESS;16位a=*(uint16_t*)ADDRESS;...假如你要读取的地...