本文阐述一种基于STM32F407的图像远程采集终端,分别从终端采集硬件设计和终端采集软件设计两方面进行论述,并借助实验验证该采集终端的有效性和合理性。
1、终端采集硬件设计系统的主体框图如图1所示,它主要由STM32F407芯片、OV7670CMOS图像传感器和上位机软件等几个重要部分组成。STM32F407是整个远程采集终端的核心,起到了承上启下的关键作用,一方面它将完成底层信号的获取和预处理,另一方面它将通过网络将采集到的彩色图像数据实时传送到上位机,本文将重点介绍这两部分的内容。
图1 系统主体框图
1.1、STM32F407与OV7670的硬件连接在图2中,利用STM32F407的PH9~PH12、PH14,PI4、PI6、PI7接口接收OV7670经DCMI接口输出的8位图像数据。OV7670的SIO_C和SIO_D接口分别与STM32F407PF8、PF9引脚相连,通过该接口实现对摄像头的初始化配置。OV7670CMOS摄像头配置COM7寄存器实现采集到的是RGB565的16位图像数据,通过DMA将数据传输到图像数据缓冲区,当垂直同步中断到来时表示缓冲区中已存满一帧图像数据,控制器取出图像数据缓冲去的数据进行后续的处理,然后传输到上位机。摄像头与STM32F407的连接图如图2所示:
图2 OV7670与STM32F407连接电路图
1.2、STM32F407以太网通信接口电路以太网通信接口模块是由CPU所内置的以太网MAC、专用10/100MPHYLAN8720A、HR11105A以及RJ45网口组成。以太网物理层器件LAN8720A作为TCP/IP协议的物理层器件。HR911105A为RJ45网络接口器件。当上位机PC有数据要求时,数据请求指令首先通过双绞线、HR911105A和STM32F407的以太网模块进入控制器,指令数据在其内部进行格式转换至SPI格式,然后通过SPI总线送至STM32F407,在STM32F407内实现SPI格式数据到以太网数据的转换。完成IP封装后的数据经过STM32F407的以太网模块、LAN8720A及HR911105A接口和双绞线传送至上位机。芯片引脚连接图如图3。
图3 LAN8720A与STM32F407硬件连接电路示意图
2、终端采集软件设计软件设计主要包括在STM32F407上实现TCP/IP协议并与上位机通信,控制OV7670CMOS图像传感器实现图像数据的采集和传输等工作。STM32F407程序设计在KeiluVision4环境下实现,主要包括以下两部分:一是OV7670完成模拟信号的采集;二是远程传输数据的实现。本文主要介绍STM32F407程序的实现方法。
2.1、OV7670完成模拟信号的采集在图像采集软件设计中,对系统各个部分的初始化是最为关键的一步,只有对各部分初始化成功以后,才能实现图像采集功能。图像采集初始化程序主要包括对系统时钟、SCCB接口、DMA、DCMI接口、OV7670摄像头等的初始化。在系统初始化设置成功以后,微控制器不断监测VSYNC信号电平变化,根据VSYNC产生的中断情况,控制对数据的读取。终端图像采集程序流程图如图4所示:
图4 图像采集程序流程图
(1)设置SCCB的相关参数
由于对摄像头工作参数的配置主要通过SCCB来实现,因此,在系统进行软件设计时,首先设计SCCB相关程序,进而通过SCCB设置摄像头的相关参数。SCCB设计的重要函数如下。
voidsccb_bus_init(void)
{
GPIO_InitTypeDefGPIO_InitStructure;//结构体初始化
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF,ENABLE);//使能GPIOF时钟
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_8|GPIO_Pin_9;//SCCB_SIC:PE2、SCCB_SID:PE3
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_OUT;//设置为输出
GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;//设置为推免模式
GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_UP;//悬浮模式
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;//50MHz时钟频率
GPIO_Init(GPIOF,&GPIO_InitStructure);}
(2)OV7670的寄存器的配置
在完成SCCB初始化、起始与停止等相关程序后,配置OV7670寄存器完成工作参数的设置,包括显示模式、输出格式、增益控制等。OV7670的寄存器配置如下:
constuint8_tOV7670_reg[OV7670_REG_NUM][2]={
{0x12,0x14};//设为VGA显示模式
{0x40,0xd0};//RGB565输出格式
{0x3e,0x00};//PCLK不分频
{0x71,0x00};//非测试模式
/*图像分辨率的配置*/
{0x32,0x80},
{0x17,0x16},
{0x18,0x04},
{0x19,0x02},
{0x1a,0x7a},
{0x03,0x03},......}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)