STM32F407VET6之OV2640———— OV2640

一、OV2640简介

使用的摄像头是ATK-OV2640 摄像头模块

 特点:  

  1. 标准的 SCCB 接口,兼容 IIC 接口
  2. 支持 RawRGB、 RGB(RGB565/RGB555)、 GRB422、 YUV(422/420)和 YCbCr(422)输出格式
  3. 支持 UXGA、 SXGA、 SVGA 以及按比例缩小到从 SXGA 到 40*30 的任何尺寸
  4. 支持自动曝光控制、自动增益控制、自动白平衡、自动消除灯光条纹、自动黑电平
  5. 校准等自动控制功能。同时支持色饱和度、色相、伽马、锐度等设置。
  6. 支持图像缩放、平移和窗口设置
  7. 支持图像压缩,即可输出 JPEG 图像数据
  8. 自带嵌入式微处理器
  9. 集成有源晶振,无需外部提供时钟
  10. 集成 LDO,仅需提供 3.3V 电源即可正常工作

参数如表

STM32F407VET6之OV2640———— OV2640_第1张图片

外接引脚

GND 地线
2 VCC3.3 3.3V 电源输入脚
3 OV_SCL SCCB 时钟线(IN1)
4 OV_VSYNC 帧同步信号(OUT2)
5 OV_SDA SCCB 数据线(IN/OUT)
6 OV_HREF 行参考信号(OUT)
7,9~14,16 OV_D0~D7 数据线(OUT)
8 OV_RESET 复位信号(低电平有效) (IN)
15 OV_PCLK 像素时钟(OUT)
17 OV_PWDN 掉电模式使能(高电平有效) (IN)

时序介绍

  行像素输出时序

STM32F407VET6之OV2640———— OV2640_第2张图片

  • 当HREF为高电平时,数据有效,没来一个PCLK, 输出8/10位数据。数据在PCLK下降沿更新,则MCU在PCLK上升沿是读取数据。
  • Tp表示像素周期, 在 RGB/YUV 输出格式下,每个 tp=2 个 Tpclk,如果是 Raw RGB 格式,则一个 tp=1 个 Tpclk,
  • 其中: Tpclk 即 PCLK 信号的周期。

帧输出时序
    STM32F407VET6之OV2640———— OV2640_第3张图片 

  • Tline即行输出时间, Tp则是像素周期。 VSYNC 是帧同步信号,每一个脉冲,表示一个新帧的开始,而整个帧周期内,有 1200 次行像素(Row)输出,每一行为 1600 个像素,这样得到的输出数据,刚好是 1600*1200 的分辨率,即 UXGA 的分辨率。

二、STM32F4---OV2640DCMI配置

   DCMI配置

使用STM32DCMI(数字摄像头接口) ,来对OV2640进行配置,且使用DCMI--DMA直接将摄像头帧数据传送到LCD显示。

  • 首先对DCMI对应IO进行初始化,DCMI_HSYNC、DCMI_PCLK  、DCMI_VSYNC 、DCMI_D0~D7, 且复用IO。
  • 对DCMI配置需要注意的是 :数据位8位、HREF低电平有效、PCLK上升沿有效、VSYNC低电平有效。
DCMI_InitStructure.DCMI_CaptureMode = DCMI_CaptureMode_Continuous;	// 连续模式
DCMI_InitStructure.DCMI_CaptureRate = DCMI_CaptureRate_All_Frame;	// 全帧捕获
DCMI_InitStructure.DCMI_ExtendedDataMode = DCMI_ExtendedDataMode_8b;	//8位数据格式  
DCMI_InitStructure.DCMI_HSPolarity = DCMI_HSPolarity_Low;	        //HSYNC 低电平有效
DCMI_InitStructure.DCMI_PCKPolarity = DCMI_PCKPolarity_Rising;		//PCLK 上升沿有效
DCMI_InitStructure.DCMI_SynchroMode = DCMI_SynchroMode_Hardware;	//硬件同步HSYNC,VSYNC
DCMI_InitStructure.DCMI_VSPolarity = DCMI_VSPolarity_Low;		//VSYNC 低电平有效

DCMI_ITConfig(DCMI_IT_FRAME, ENABLE);//开启帧中断 
DCMI_Cmd(ENABLE);	//DCMI使能
  • 配置DCMI_DMA:  DMA外设为DCMI->DR数据寄存器,目的地址为LCD(LCD当做存储器)存储器地址。具体配置:
      /* 配置 DMA Stream */
    DMA_InitStructure.DMA_Channel = DMA_Channel_1;  //通道1 DCMI通道 
    DMA_InitStructure.DMA_PeripheralBaseAddr = (u32)&DCMI->DR;	//外设地址为:DCMI->DR  (DCMI获得数据)
    DMA_InitStructure.DMA_Memory0BaseAddr = DMA_Memory0BaseAddr;//DMA 存储器0地址   (LCD模拟SRAM存储器)
    DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralToMemory;		//外设到存储器模式
    DMA_InitStructure.DMA_BufferSize = DMA_BufferSize;	      //数据传输量  ( 1 )
    DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;	//外设非增量模式
    DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc;		//存储器非增量模式
    DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Word;	//外设数据长度:32位
    DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize;	//存储器数据长度  半字 16位
    DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;  // 使用循环模式 
    DMA_InitStructure.DMA_Priority = DMA_Priority_High;  //高优先级
    DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Enable;   //FIFO模式        
    DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_Full;  //使用全FIFO 
    DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single;  //外设突发单次传输
    DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single;  //存储器突发单次传输
    DMA_Init(DMA2_Stream1, &DMA_InitStructure);//初始化DMA Stream

    其他配置完成后,若使能DCMI帧中断,程序会在图像每一帧中断一次,进入DCMI中断服务程序,可用来计数计算帧率

       

注意:

DCMI--DMA会在DCMI->DR装满32位数据时自动将数据传送至LCD;

我使用的是3.2寸 320X240 LCD,  开始配置都正确完成配置, 可是LCD却无法正确显示,而是在顶部依次显示三个同样非正常图像,后来发现对于使用不同的LCD, 需要对OV2640 PCLK\CLK进行分频匹配,可以通过设置 OV2640 的寄存器(0XD3 和 0X11),设置 PCLK 和时钟的分频来降低 PCLK 速度,从而使得低速 MCU 也可以读取 OV2640 的数据。不过这样会降低帧率。

//OV2640速度控制
//根据LCD分辨率的不同,设置不同的参数
void ov2640_speed_ctrl(void)
{
	u8 clkdiv,pclkdiv;			//时钟分频系数和PCLK分频系数
	if(lcddev.width==240)		//2.8寸LCD
	{
		clkdiv=1;
		pclkdiv=28;
	}else if(lcddev.width==320)	//3.5寸LCD
	{
		clkdiv=3;
		pclkdiv=15;
	}else						//4.3/7寸LCD
	{
		clkdiv=15;
		pclkdiv=4;
	} 
	SCCB_WR_Reg(0XFF,0X00);		
	SCCB_WR_Reg(0XD3,pclkdiv);	//设置PCLK分频
	SCCB_WR_Reg(0XFF,0X01);
	SCCB_WR_Reg(0X11,clkdiv);	  //设置CLK分频	
}

 

 

以上根据学习资料记录,仅用于学习

你可能感兴趣的:(STM32学习,OV2640)