基于STM32的ov7670使用框架

本文介绍了如何在STM32F407微控制器上配置和使用OV7670摄像头模块,提供了包含ov7670.h和ov7670.c文件的框架,详细阐述了在嵌入式系统中实现图像采集的关键步骤。
摘要由CSDN通过智能技术生成

如下是ov7670在stm32f407上的使用框架

ov7670.h

#ifndef OV7670_H
#define OV7670_H

#include "stm32f4xx.h"

//===============以下引脚定义需要修改============
#define SCCB_ID 0X42
#define SCCB_SDA GPIOC,GPIO_Pin_1
#define SCCB_SCL GPIOC,GPIO_Pin_0

#define DCMI_HSYNC_PIN			GPIOA,GPIO_Pin_4
#define DCMI_HSYNC_PIN_S		GPIOA,GPIO_PinSource4
#define DCMI_PIXCLK_PIN			GPIOA,GPIO_Pin_6
#define DCMI_PIXCLK_PIN_S		GPIOA,GPIO_PinSource6
#define DCMI_VSYNC_PIN			GPIOB,GPIO_Pin_7
#define DCMI_VSYNC_PIN_S		GPIOB,GPIO_PinSource7

#define DCMI_D0_PIN					GPIOC,GPIO_Pin_6
#define DCMI_D0_PIN_S				GPIOC,GPIO_PinSource6
#define DCMI_D1_PIN					GPIOC,GPIO_Pin_7
#define DCMI_D1_PIN_S				GPIOC,GPIO_PinSource7
#define DCMI_D2_PIN					GPIOE,GPIO_Pin_0
#define DCMI_D2_PIN_S				GPIOE,GPIO_PinSource0
#define DCMI_D3_PIN					GPIOE,GPIO_Pin_1
#define DCMI_D3_PIN_S				GPIOE,GPIO_PinSource1
#define DCMI_D4_PIN					GPIOE,GPIO_Pin_4
#define DCMI_D4_PIN_S				GPIOE,GPIO_PinSource4
#define DCMI_D5_PIN					GPIOB,GPIO_Pin_6
#define DCMI_D5_PIN_S				GPIOB,GPIO_PinSource6
#define DCMI_D6_PIN					GPIOB,GPIO_Pin_8
#define DCMI_D6_PIN_S				GPIOB,GPIO_PinSource8
#define DCMI_D7_PIN					GPIOB,GPIO_Pin_9
#define DCMI_D7_PIN_S				GPIOB,GPIO_PinSource9
//================================================

#define QVGA_LINE_PIX 160	//QVGA一行多少字

#define NOW_USE_FRAME (!CamNowFrame)		//获取存放好数据的帧

extern int ov_frame;
extern int ov_line;				//引用不安全
extern unsigned short OV7670_Frame[2][120][160];		//75KB
extern unsigned int OV7670_LineBuf[QVGA_LINE_PIX];
extern int CamNowFrame;		//引用不安全


void Ov7670_SysClock_Init(void);
int check_camera(void);
void OV7670_Reg_Init(void);
void OV7670_DCMI_Init(uint16_t DCMI_CaptureMode,int PrePriority,int SubPriority);
void OV7670_DMA_LineCircular(int PrePriority,int SubPriority);
void DCMI_Start(void);		//DCMI启动传输
void DCMI_Stop(void);			//DCMI关闭传输
void CameraStart(void);		//开始采集一帧
int IsCameraReady(void);	//一帧是否已经完成

/*双缓冲图像处理方法
while(!check_camera());
OV7670_Reg_Init();
OV7670_DCMI_Init(DCMI_CaptureMode_Continuous,0,1);
OV7670_DMA_LineCircular(0,0);
DCMI_Start();
CameraStart();
while(1)
{
	if(IsCameraReady())
	{
		CameraStart();
		//TODO:
		//Image Process,50ms/20fps
		for(i=0;i<120;i++)
			for(j=0;j<160;j++)
				LCD_Fast_DrawPoint(j,i,OV7670_Frame[NOW_USE_FRAME][i][j]);
	}
}
*/

#define CAMST_WaitStart	0
#define CAMST_Start			1
#define CAMST_WaitImg		2
#define CAMST_ImgReady	3
#define CAMST_ImgError	4	//图像出错状态

extern int CamState;	//引用不安全

#endif


ov7670.c

/*
注意:PWND接地,RESET上拉到VDD
驱动平台:STM32F407
*/
#include "ov7670.h"
#include "cfg_func_f407.h"

#define SCCB_READ_SDA GPIO_ReadInputDataBit(SCCB_SDA)

int ov_frame=0;
int ov_line=0;

unsigned int OV7670_LineBuf[QVGA_LINE_PIX];
__align(4) unsigned short OV7670_Frame[2][120][160];

void Ov7670_SysClock_Init(void)
{
	GPIO_Init_AF(GPIOA,GPIO_Pin_8);
	/* HSE clock selected to ou
  • 13
    点赞
  • 62
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值