快讯
HOME
快讯
正文内容
stm32f407 nand flash 基于STM32F407的图像采集与传输系统的设计与实现
发布时间 : 2025-03-15
作者 : 小编
访问数量 : 23
扫码分享至微信

基于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;...假如你要读取的地...

 子宫肌腺瘤  大前锋小前锋 
王经理: 180-0000-0000(微信同号)
10086@qq.com
北京海淀区西三旗街道国际大厦08A座
©2025  上海羊羽卓进出口贸易有限公司  版权所有.All Rights Reserved.  |  程序由Z-BlogPHP强力驱动
网站首页
电话咨询
微信号

QQ

在线咨询真诚为您提供专业解答服务

热线

188-0000-0000
专属服务热线

微信

二维码扫一扫微信交流
顶部