STM32和OV2640的嵌入式图像采集系统设计

发布者:HarmonyJoy最新更新时间:2021-04-20 来源: eefocus关键字:STM32  OV2640  图像采集系统 手机看文章 扫描二维码
随时随地手机看文章

引言


随着电子产品向低功耗、低价格、智能化的方向发展,利用视频传感器采集图像成为研究热点,如可视门铃、安全监控[1]、赛车自动循迹[23]、烟叶图像采集[4]、草本叶子图像采集[5]等。本文根据在线采集、分析、存储图像的需求,设计了嵌入式图像采集系统,运用嵌入式芯片STM32对图像信息进行采集、显示和存储。


1 系统结构与功能


图像采集系统以基于ARM公司的CortexM3内核的STM32F103RBT6(以下简称STM32)处理器为核心,配合OV2640摄像头和TFT液晶显示器,是一款采集像素多、实时性好且成本低廉的图像采集系统。


系统的硬件结构框图如图1所示,系统通过JLink口实现程序在STM32上的仿真、在线调试,利用JLINK仿真编程器将编译之后的二进制文件烧写到Flash中,系统每次上电时便可从Flash启动文件系统,图像采集系统采用OV2640摄像头模块,输出显示采用2.4英寸TFT液晶显示屏,可将采集到的数据保存在SD卡中。当存储按键按下时,系统接收中断,同时将从OV2640摄像头采集到的数据显示在液晶显示屏上。

图1 系统硬件结构框图


2 硬件设计


2.1 CPU处理器


本系统用的是32位的CortexM3内核的STM32芯片STM32F103RBT6,支持Thumb2指令集,STM32F103RBT6内部的Flash有128K,SRAM大小为20 K,有64个增强I/O口、2个USART、2个12位的A/D转换器[6]。它的供电电压为2.0~3.6 V,拥有省电模式,可以保证低功耗需求。CPU主频最高可以达到72 MHz。


2.2 OV2640摄像头


OV2640具有体积小、工作电压低、兼容I2C总线接口等特点。通过SCCB总线控制,支持RawRGB、RGB(GRB4:2:2、RGB565/555/444)、YUV(4:2:2)和YCbCr(4:2:2)输出格式,可以输出整帧、二次转换分辨率、取特定区域等方式的各种分辨率的8位或10位的图像帧数据,UXGA(1 632×1 232)图像最高达到15 fps。图2OV2640摄像头连接示意图因此,编程者可选择不同图像质量、数据格式,而且,OV2640的高灵敏度适合低照度环境,它的低电压特性适合嵌入式开发应用,摄像头数据口连接CPU的示意图如图2所示。


采用摄像头的8位数据模式,摄像头高8位接CPU的I/O口的低8位,低2位悬空。


2.3 SCCB总线


SCCB(OmniVision Serial Camera Control Bus)与I2C总线协议类似,使用SIO0和SIO1两根数据线进行传输和控制。SIO1是控制线,提供传输过程中的时钟脉冲控制信号,SIO0是串行双向数据传输线,根据控制信号通过串行的方式发送数据。在很多设计中,经常采用I/O口模拟I2C总线的传输,对于SCCB,也可以采用这样的方式。


采用I/O口模拟SCCB总线的要点如下:对于SCL所连接的引脚,在寄存器中设置为输出,而SDA所接的引脚,在数据传送过程中,基于IODIR值的改变,动态改变引脚为输入或输出方式。


2.4 LCD显示模块


本设计所用的为2.4英寸的TFT液晶显示屏,图3系统与ILI9320连接图内部集成有ILI9320 LCD控制芯片,可以直接控制数据的显示。ILI9320可以用来读写寄存器、GRAM,还可显示动态图形的RGB输入接口。显示控制芯片有RGB接口模式与i80系统接口模式,设计选用i80system接口模式。


i80system接口是通过设置IM[3:0]来决定的,同时这几个位也决定了数据传输位数的模式,通过硬件设置IM0位高电平,IM1位高电平,把模式设置为了8位i80system接口传输模式。连接示意图如图3所示。



要写数据到屏上显示,只需要对寄存器0x0022进行写操作即可,当这个寄存器的数据更新时,地址指针(AC)会自动增加或减小,读数据也是同样的道理。


2.5 SD卡接口电路设计


通常而言,SD卡电路设计有两种模式:SPI模式和SD卡模式,由于引脚资源限制,对于连接STM32的方式,采用第一种设计电路,通过STM32上面的SPI接口来和SD卡进行数据通信[8],引脚如图4所示。



在SPI模式中,数据通过STM32的MOSI与MISO进行传送,SCK信号线用来提供工作时钟,当SD 卡收到复位命令(CMD0)时,SD卡立即进入SPI模式。要注意的是,在发送CMD0 之前须发送大于74个的时钟周期;另外,在SD卡初始化时,CLK时钟频率最大不能超过400 kHz。


3软件设计


3.1 系统初始化


系统初始化主要是对CPU时钟进行初始化,以及设置外围电路的时钟分频比,设置中断。其流程可描述如下:


SystemInit();


if (HSEStartUpStatus == SUCCESS){


//如果HSE晶振稳定且就绪


RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9); //PLL设置


RCC_CLKConfig();//设置外部总线时钟


GPIO_PinRemapConfig();//改变指定引脚的映射


NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);


//设置中断


}


3.2 摄像头初始化


首先,通过SCCB总线设置OV2640的寄存器数据,主要是配置摄像头输出数据格式类型和输出图像数据大小,达到初始化OV2640的目的。OV2640初始化流程较为简单,伪代码如下:


unsigned char OV2640_init(void){


unsigned char temp;


unsigned inti=0;


OV2640_GPIO_Init();


SCCB_GPIO_Config();//摄像头I/O口初始化


CLK_init_ON();//开摄像头时钟


temp=0x80;


//初始化并判断是否成功


if(0==wrOV2640Reg(0x12, temp))


return 0;


for(i=0;i

if( 0==wrOV2640Reg(change_reg[i][0],change_reg[i][1]))


return 0;


}


return 0x01; //不成功则返回1


}


3.3 LCD显示模块


通过对ILI9320的读写操作时序控制进行仔细的分析后,初始化TFT屏幕,其实质就是对寄存器的设置。程序中对LCD控制器操作的函数接口主要有以下3个:


LCD_WR_REG16()//写寄存器命令


LCD_WR_DATA16()//写寄存器数据


LCD_RD_DATA16()//读寄存器数据


3.4 主程序流程与系统实现


程序运行流程如图5所示,系统启动之后,先按照程序初始化设备,并打开外部中断,如果检测到门铃有按键输入,则启动摄像头与CPU之间的数据传输,启动TFT液晶显示器与CPU之间的数据传输,在液晶显示器上实时显示摄像头所拍摄到的画面,并鸣响蜂鸣器。


如果用户需要,还可以启动拍照,并将照片保存为Bmp的格式文件在SD卡上。同时,在延时一段时间之后,如果没有任何中断触发,则系统运行至低功耗状态,关液晶屏。



实验效果图如图6所示。



从图6中可以看出,STM32加OV2640方案的效果比较令人满意,摄像头的清晰度较高,实时性较好,2.4英寸的显示屏能满足图像显示的需求。


结语


本文基于STM32处理器和OV2640摄像头加2.4英寸TFT液晶显示屏的设计方案不仅成本低廉,而且功能齐全,整体效果较好,硬件平台设备较为成熟。


在软件方面,程序流程严谨,逻辑严密,而且驱动程序较为完善,各个模块之间不存在耦合性,系统运行稳定、可靠。


关键字:STM32  OV2640  图像采集系统 引用地址:STM32和OV2640的嵌入式图像采集系统设计

上一篇:STM32定时器的应用
下一篇:什么是STM32以及怎样学习?

推荐阅读最新更新时间:2024-11-12 13:35

STM32系列第14篇--TFTLCD驱动原理
ALINETEK2.8寸 TFTLCD模块特点 240*320分辨率 16位真彩显示(65536色) 自带电阻触摸屏 自带背光电路 注意:模块是3.3V供电的,不支持5V电压的MCU,如果是5VMCU,必须在信号线串接120R电阻使用。 ALINETEK2.8寸 TFTLCD接口说明(16位80并口) LCD_CS:LCD片选信号 LCD_WR:LCD写信号 LCD_RD:LCD读信号 DB :16位双向数据线。 LCD_RST:硬复位LCD信号 LCD_RS:命令/数据标志(0:命令,1:数据) BL_CTR:背光控制信号 T_MISO/T_MOSI/T_PEN/T_CS/T_CLK,触摸屏接口信号
[单片机]
<font color='red'>STM32</font>系列第14篇--TFTLCD驱动原理
关于STM32的基本知识
STM32简介 STM32是“意法半导体”生产的基于“ARM公司Cortex-M3内核”的32位高性能MCU。 ST——芯片制造商意法半导体,SOC厂商 ARM——IP厂商,负责芯片内核设计的公司 M——Microelectronics的缩写,指微控制器 32——指它是一个32位的微控制器 注意:51单片机是5V工作电压,而STM32是3.3V工作电压。STM32芯片结构,如下图所示。 STM32和ARM7的关系 ARM7和STM32的内核都是由ARM公司设计的。ARM7内核采用的是冯诺依曼结构(也就是计算机CPU采用的结构)而STM32采用的是哈佛结构。STM32是ARM公司设计出来取代ARM7的,所以它的性能优于ARM7。
[单片机]
关于<font color='red'>STM32</font>的基本知识
关于ST-Link下载STM32程序的使用
ST-Link非常好用,既可以像JLINK那样在软件中直接下载,,也可以下载Hex文件, 自己买的这种,,,, 其实就是SWD下载模式 安装驱动 所有用到的 链接:http://pan.baidu.com/s/1c10Twsg 密码:m4dx 先安装好驱动现在用软件下载 现在用这个软件下载Hex文件,,,安装步骤可以百度下 ST-Link可以软件下载,也可以下载Hex文件,,关键是比串口下载快,,省时
[单片机]
关于ST-Link下载<font color='red'>STM32</font>程序的使用
STM32(五)IIC通信原理及IO口软件模拟编程
一、IIC概述 I2C(IIC,Inter-Integrated Circuit),两线式串行总线,由PHILIPS公司开发用于连接微控制器及其外围设备。 它是由数据线SDA和时钟SCL构成的串行总线,可发送和接收数据。在CPU与被控IC之间、IC与IC之间进行双向传送,高速IIC总线一般可达400kbps以上。 IIC是半双工通信方式。 多主机I2C总线系统结构: 二、I2C协议 1、空闲状态 I2C总线的SDA和SCL两条信号线同时处于高电平时,规定为总线的空闲状态。此时各个器件的输出级场效应管均处在截止状态,即释放总线,由两条信号线各自的上拉电阻把电平拉高。 2、开始信号
[单片机]
<font color='red'>STM32</font>(五)IIC通信原理及IO口软件模拟编程
基于STM32单片机的雷管电子保险装置设计
雷管使用中如果引爆系统屏蔽不够完善,使雷管中流过泄漏电流和电容电流达到一定的数值和作用时间,电流转化成足够的热能达到雷管炸药点燃温度(约180℃)时即可引爆,电雷管耐静电压为(1~3)×104V,超过(1~3)×104V 的静电压,从而引爆电雷管,造成爆破材料发生意外爆炸事故。本课题是在参阅了国内外关于雷管安全保险发展技术资料的基础上进行的国内雷管防护措施开发和研制的一次有益的尝试和探索,简要介绍了STM32F103RBT6 的主要功能和性能,完成了系统整体设计。 1.STM32F103RBT6简介 STM32F103RBT6 是一种高性能32 位微控制器(MICrocontrollerUnit),是意法半导体公司
[单片机]
基于<font color='red'>STM32</font>单片机的雷管电子保险装置设计
STM32STM32之flash
一、简介 本文介绍STM32系列如何将flash的一部分当做eeprom来存储数据。 注:本驱动特点是可自定义数据存储空间、限制写入地址避免误写至代码段、支持跨页读写、允许保存非半字倍数的字节。 二、实验平台 库版本:STM32F10x_StdPeriph_Lib_V3.5.0 编译软件:MDK4.53 硬件平台:STM32开发板(主芯片stm32f103c8t6) 仿真器:JLINK 三、版权声明 博主:甜甜的大香瓜 声明:喝水不忘挖井人,转载请注明出处。 原文地址:http://blog.csdn.NET/feilusia 联系方式:897503845@qq.com 香瓜BL
[单片机]
【<font color='red'>STM32</font>】<font color='red'>STM32</font>之flash
一个基于无操作系统的STM32单片机的单片机内存管理器
本代码基于无操作系统的STM32单片机开发,功能强大,可申请到地址空间连续的不同大小的内存空间,且用户接口简单,使用方便。直接贴代码: memory.h: memory.c:
[单片机]
一个基于无操作系统的<font color='red'>STM32</font>单片机的单片机内存管理器
STM32启动过程全解
本文主要阐述了STM32启动过程全面解析,包括启动过程的介绍、启动代码的陈列以及深入解析。   相对于ARM上一代的主流ARM7/ARM9内核架构,新一代Cortex内核架构的启动方式有了比较大的变化。ARM7/ARM9内核的控制器在复位后,CPU会从存储空间的绝对地址0x000000取出第一条指令执行复位中断服务程序的方式启动,即固定了复位后的起始地址为0x000000(PC = 0x000000)同时中断向量表的位置并不是固定的。而Cortex-M3内核则正好相反,有3种情况:   1、 通过boot引脚设置可以将中断向量表定位于SRAM区,即起始地址为0x2000000,同时复位后PC指针位于0x2000000处;  
[模拟电子]
<font color='red'>STM32</font>启动过程全解
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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