STM32F4 驱动OV2640摄像头

时间:2024-02-18 19:28:50

STM32F4 驱动OV2640摄像头

因为最近需要做与摄像头有关的项目,所以先学习一下最基本的摄像头驱动,本次测试使用了野火家的32F407开发板(霸天虎V1),和OV2640摄像头模块。(注意啊,这里不是做广告,只是有什么用什么而已~~)

image-20200417165904914

因为手头也没别的硬件了,买开发板的时候也忘了买屏幕。。。 想要测试摄像头只能把图像数据传到电脑上再做解析了。所以这次实验的方案如下:

  1. 使用ov2640摄像头连接开发板
  2. 使用usart1 向电脑端发送JPEG图像数据
  3. 电脑端使用上位机进行图像数据解码并显示

下面对需要用到的知识点分别介绍~~

OV2640摄像头

OV2640摄像头是一款有200W像素的摄像头,它可以以原始数据或者JPEG格式输出图像数据,它的硬件架构如下:

image-20200417171103768

其中SCCB接口在协议上是IIC协议的简化版。所以把它连接到单片机的IIC接口就可以,单片机通过SCCB接口配置摄像头的寄存器来控制摄像头的行为。

右侧的Y信号是输出图像数据的引脚,为10位,它可以配置成10bit输出或者8bit输出。

图中左下角部分的引脚有必要说明一下:

引脚名 功能
XVCLK 摄像头时钟源
PCLK 像素时钟输出,Y每输出一个8位数据,PCLK跳变一次
VSYNC 垂直同步信号,摄像头发完一帧数据,VSYNC跳变一次
HSYNC 水平同步信号,摄像头每发完一行数据,HSYNC跳变一次

在传输原始图像时VSYNC和HSYNC时都要连接到单片机的, 如果传输JPEG数据就只需要VSYNC就可以了,因为传输JEPG数据流时,JPEG数据大小是不定的,所以传输jpeg数据时,HSYNC信号是不用的,传输完一帧JPEG数据时HSYNC会跳变一次,表明一帧图像信息已传输完成。

关于寄存器配置

摄像头的寄存器配置较为复杂,而且官方给出的数据手册描述也较为模糊,所以自己手写配置信息有一定的困难。不过官方给出了配置寄存器的示例(名字如图),直接拿来改改就可以用了