【STM32】OV2640摄像头学习笔记

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/qq_39492932/article/details/88087010

一、OV2640 Camera

  • OV2640是OmniVision公司生产的一颗1/4寸的CMOS UXGA(1632*1232)图像传感器;
  • 支持自动曝光控制、自动增益控制、自动白平衡、自动消除灯光条纹等自动控制功能。
  • UXGA最高15帧/秒,SVGA可达30帧,CIF可达60帧;
  • 支持图像压缩,即可输出JPEG图像数据.
基本概念:
  • UXGA,即分辨率位16001200的输出格式,SXGA(12801024)、XVGA(1280960)、WXGA(1280800)、XGA(1024768)、SVGA(800600)、VGA(640480)、CIF(352288)和QQVGA(160*120);
  • VSYNC,即帧同步信号;
  • HREF /HSYNC,即行同步信号;
  • PCLK,即像素时钟,一个PCLK时钟,输出一个(或半个)像素.
  • PCLK高达36MHz
    在这里插入图片描述
  • 图像数据在HREF为高的时候输出,
  • 当HREF变高后,每一个PCLK时钟,输出一个字节数据。
比如我们采用UXGA时序,RGB565格式输出,每2个字节组成一个像素的颜色(低字节在前,高字节在后)
这样每行输出总共有1600*2个PCLK周期,输出1600*2个字节

二、读取OV2640模块图像数据过程:

  • 低字节在前,高字节在后
Created with Raphaël 2.2.0 开始 等待帧同步信号(VSYNC) HREF是否为高电平 等待第一个PCLK上升沿 读取第一个像素低字节 等待第二个PCLK上升沿 读取第一个像素高字节 等待第三个PCLK上升沿 读取第二个像素低字节 以此循环读取............... 结束 yes

三、DCMI(Digital camera interface)接口

  • DCMI是STM32F4芯片自带的一个数字摄像头接口,该接口是一个同步并行接口
  • 支持8位、10位、12位或 14位 CMOS 摄像头模块发出的高速数据流;
  • 可支持不同的数据格式:YCbCr4:2:2/RGB565逐行视频和压缩数据 (JPEG);
  • 可接收高速(可达 54 MB/s)数据流.

在这里插入图片描述

DCMI接口简介- 初始化流程:

①配置相关引脚的复用功能,使能DCMI时钟
  • 使能DCMI的时钟,其次要设置DCMI的相关引脚为复用
②设置DCMI工作模式及PCLK/HSYNC/VSYNC
  • DCMI接口,使用8位接口,连续模式,设置:PCLK为上升沿有效, HSYNC和VSYNC为低电平有效,设置帧中断(jpeg数据采集用)等参数。
③设置DMA
  • 采用DMA来搬运,设置好DCMI相关参数后,还需要设置DMA,以便采集数据。
④启动DCMI传输
  • 设置DCMI->CR的最低位为1,即可启动DCMI捕获图像数据

四、SCCB协议

  • SCCB(Serial Camera Control Bus) 串行摄像机控制总线协议
  • 一个基本传输单元称作一个相
    一个相包含总共9比特,前8比特为数据,第9比特为 Don’t-Care bit 不关心比特,该第9比特的数据取决于
    传输任务是读还是写(0代表写,1代表读)(可以类比I2C通信协议)
  • 一个传输任务的最大相个数是3

在这里插入图片描述

1.起始信号

在这里插入图片描述

//SCCB起始信号
//当时钟为高的时候,数据线的高到低,为SCCB起始信号
//在激活状态下,SDA和SCL均为低电平
void SCCB_Start(void)
{
    SCCB_SDA=1;     //数据线高电平	   
    SCCB_SCL=1;	    //在时钟线高的时候数据线由高至低
    rt_hw_us_delay(50);  
    SCCB_SDA=0;
    rt_hw_us_delay(50);	 
    SCCB_SCL=0;	    //数据线恢复低电平,单操作函数必要	  
}

2.停止信号

在这里插入图片描述

//SCCB停止信号
//当时钟为高的时候,数据线的低到高,为SCCB停止信号
//空闲状况下,SDA,SCL均为高电平
void SCCB_Stop(void)
{
    SCCB_SDA=0;
    rt_hw_us_delay(50);	 
    SCCB_SCL=1;	
    rt_hw_us_delay(50); 
    SCCB_SDA=1;	
    rt_hw_us_delay(50);
} 

五、OV_Camera 配置

1.复位摄像头

OV2640_PWDN=0;	//POWER ON
rt_hw_ms_delay(1);
OV2640_RST=0;	//复位OV2640
rt_hw_ms_delay(1);
OV2640_RST=1;	//结束复位 
SCCB_Init();        		//初始化SCCB 的IO口	 
SCCB_WR_Reg(OV2640_DSP_RA_DLMT, 0x01);	//操作sensor寄存器
SCCB_WR_Reg(OV2640_SENSOR_COM7, 0x80);	//软复位OV2640

2.读取摄像头ID

reg=SCCB_RD_Reg(OV2640_SENSOR_MIDH);	//读取厂家ID 高八位
reg<<=8;
reg|=SCCB_RD_Reg(OV2640_SENSOR_MIDL);	//读取厂家ID 低八位
res = reg;
if(reg!=OV2640_MID)
{
		rt_kprintf("MID:%d\r\n",reg);
		return 1;
}
reg=SCCB_RD_Reg(OV2640_SENSOR_PIDH);	//读取厂家ID 高八位
reg<<=8;
reg|=SCCB_RD_Reg(OV2640_SENSOR_PIDL);	//读取厂家ID 低八位
if(reg!=OV2640_PID)
{
		rt_kprintf("HID:%d\r\n",reg);
		return 2;
}  
log_i("OV2640 Camera ID:%x %x ",reg,res);

3.配置帧率

  • UXGA最高15帧/秒,SVGA可达30帧,CIF可达60帧;
//这里采用SVGA
//初始化 OV2640,采用SVGA分辨率(800*600)  fps:30
for(i = 0;i < sizeof(ov2640_sxga_init_reg_tbl)/2;i++)
{
		SCCB_WR_Reg(ov2640_svga_init_reg_tbl[i][0],ov2640_svga_init_reg_tbl[i][1]);
} 

猜你喜欢

转载自blog.csdn.net/qq_39492932/article/details/88087010