OV2640摄像头驱动与应用代码

目录

一、摄像头基础

1.1 OV2640参数

1.2 视场角与镜头

二、OV2640驱动

三、OV2640视频接入

四、OV2640 200W JPG拍照实现

五、总结

一、摄像头基础

1.1 OV2640参数

OV2640摄像头驱动与应用代码_第1张图片

         选型时我们需要关注的通用指标是焦距,视场角,拍摄分辨率等信息。另外还需根据硬件板子情况来综合考虑。一般MCU芯片不支持MIPI接口,只能并口接入视频图像,这种情况就只能选择OV2640这种并口输出的sensor。ARM芯片一般都支持MIPI接口这时可以考虑性能更高的sensor,比如OV5640,OV2710。此外还需根据嵌入式板子的硬件供电情况来综合考虑。如下是OV2710的通用技术指标:

OV2640摄像头驱动与应用代码_第2张图片

1.2 视场角与镜头

OV2640摄像头驱动与应用代码_第3张图片

二、OV2640驱动

如下只是实例代码,完整代码请点此处下载

#include "fsl_ov2640.h"
#include "ov2640cfg.h"
#include "ov2640_jpeg.h"
#include "fsl_common.h"
#include "board.h"

/*******************************************************************************
 * Definitions
 ******************************************************************************/
#define OV2640_SCCB_ADDR (0x60>>1)
#define OV2640_REVISION  0x2642U

status_t OV2640_WriteReg(uint8_t reg, uint8_t val)
{
		uint8_t i = 0;
	  status_t WriteStatus = 0;

		for( i = 0 ;i < 3; i++ )
		{
			WriteStatus = BOARD_Camera_I2C_SendSCCB(OV2640_SCCB_ADDR, reg, kSCCB_RegAddr8Bit, &val, 1);
			if( WriteStatus == kStatus_Success)
				break;
			else
				rt_kprintf("WriteStatus = %d\r\n",WriteStatus);
		}
		return WriteStatus;
}   

status_t OV2640_ReadReg(uint8_t reg, uint8_t *val)
{
    return BOARD_Camera_I2C_ReceiveSCCB(OV2640_SCCB_ADDR, reg, kSCCB_RegAddr8Bit, val, 1);
}                     

typedef struct _ov2640_reg
{
    uint8_t reg;
    uint8_t val;
} ov2640_reg_t;

/*******************************************************************************
 * Prototypes
 ******************************************************************************/

//OV2640切换为JPEG模式
void OV2640_JPEG_Mode( void);
//OV2640切换为RGB565模式
void OV2640_RGB565_Mode( void);
void OV2640_RegSet( uint8_t mode);
/*******************************************************************************
 * Variables
 ******************************************************************************/
static const ov2640_reg_t ov2640_RA_DLMT_Regs[] = {
		{OV2640_DSP_RA_DLMT, 0x01},
		{OV2640_COM7_REG, 0x80}
};

/*******************************************************************************
 * Code
 ******************************************************************************/
static void OV2640_DelayMs(uint32_t ms)
{
    VIDEO_DelayMs(ms);
}

static status_t OV2640_WriteRegs(const ov2640_reg_t regs[], uint32_t num)
{
    status_t status = kStatus_Success;

    for (uint32_t i = 0; i < num; i++)
    {
        status &

你可能感兴趣的:(嵌入式开发,MCU,arm开发,单片机,计算机视觉)