关于【野火】OV7725例程移植【OV7670】总结
OV7670调试的问题
2012-03-24 20:42OV7670调试的问题拿出来请大家共同解决硬件:STM32+OV7670+AL422B (电路参照zidong404的)软件思路也是参考zidong404的,现在图像显示基本出来了,但是效果很不好,最关键的是不知道从哪修改。
液晶ssd1289显示的图片如下:输出格式:QVGA RGB565 320*240出现的问题:1、图像分块,而且三块显示的是同一幅图片,不知道是缓存指针读写复位不正常的是不,程序和zidong404的一样的?2、图像重叠,一次显示不是全屏,只是半屏?好像写入的数据不够?我现在很模糊的几个问题是:1、配置QVGA RGB565格式写入缓存AL422的数据是不是320*240*2个字节?如果是,那为何一次显示只有半屏呢?2、还有窗口设置我不是太懂OV7660_config_window(272,16,320,240);// set 240*320 ,谁能帮忙解释一下,272和16这几个数据是怎么得到的?3、还有__nop();这条指令的运用,是直接用吗?需要包含什么文件吗? 51里面用它不是包含一个文件才能使用它吗?弄了半天终于弄出来了!在这里要感谢zidong404的指点。
现在分享一下我的调试结果:1、上面第一和第二个问题出现的原因很简单,摄像头配置出来的图片数据是横屏格式240行,每行320个点,每个像素2个字节,而我的液晶屏配置是竖屏显示的,所以图像分块。
这一点虽然没问题了,但我感觉这样的话图像分块应该是不规则的,而结果是三块一样的图像。
2、还有读写指针复位,如果写指针复位延时不够也会图像分块。
3、还有XCLK时钟我的是8M,这个我试了36M的影响不大,但是不能超过50M,STM32系统时钟72M直接加上也能显示图像,但是有一层绿色的背景色。
4、还有PLL倍频选择旁路PLL图像也会分块,图像发生畸变,大于输入时钟*4就OK了。
5、显示的时候有时液晶背景颜色会是淡黄的不知为何?图像显示正常。
OV7670 视频显示系统整体架构
OV7670 视频显示系统整体架构v sdram_ov7670_yuv 模型解析顶层模块主要可以划分为4 个模块,完成了整个电路的设计,如下所示。
序号模块功能介绍1 System_ctrl 异步复位,PLL 等的同步处理,模块2 Sdram_vga_top 基于SDRAM 的显示控制器3 I2C_AV_Controller CMOS 摄像头I2C 初始化模块4 CMOS_Cputure CMOS 摄像头数据采集模块整个系统的数据流,就是在CMOS 摄像头初始化完成以后,通过CMOS_Capter 模块捕获CMOS 输出的图像数据,写入到sdram_vga_top 模块。
Sdram_vga_top 模块通过相关存储以及处理,最后实时输出于VGA 显示器上。
,sdram 显示控制器从接口上主要完成了异步数据的处理,sdram存储器的控制,以及VGA 显示器的显示Sdram_vga_top 内部相关模块以及功能如下表所示序号模块功能1 sdram_2fifo_top sdram 控制器的异步缓存顶层模块。
2 sdbank_switch 单片sdram 的内部乒乓实现。
3 video_image_processing 视频图像处理单元,完成YUV 的解码4 lcd_display Lcd 显示图像控制模块5 lcd_top Lcd 接口时序控制电路1) lcd_top:作为VGA 显示器的时序电路,主要完成VGA 的驱动。
module lcd_top(//global clockinput clk, //system clockinput rst_n, //sync reset//lcd interfaceoutput lcd_dclk, //lcd pixel clockoutput lcd_blank, //lcd blankoutput lcd_sync, //lcd syncoutput lcd_hs, //lcd horizontal syncoutput lcd_vs, //lcd vertical syncoutput lcd_en, //lcd display enableoutput [15:0] lcd_rgb, //lcd display data//user interfaceoutput lcd_request, //lcd data requestoutput lcd_framesync, //lcd frame syncoutput [10:0] lcd_xpos, //lcd horizontal coordinateoutput [10:0] lcd_ypos, //lcd vertical coordinateinput [15:0] lcd_data //lcd data);//-------------------------------------lcd_driver u_lcd_driver(//global clock.clk (clk),.rst_n (rst_n),//lcd interface.lcd_dclk (lcd_dclk),.lcd_blank (lcd_blank),.lcd_sync (lcd_sync),.lcd_hs (lcd_hs),.lcd_vs (lcd_vs),.lcd_en (lcd_en),.lcd_rgb (lcd_rgb),//user interface.lcd_request (lcd_request),.lcd_framesync (lcd_framesync),.lcd_data (lcd_data),.lcd_xpos (lcd_xpos),.lcd_ypos (lcd_ypos));endmodule2) lcd_display:作为VGA 显示控制电路,主要完成数据流的选择,同时可以在该模块完成字幕,半透明等操作。
ov7725数字摄像头编程基本知识笔记
PCLKHREFHSYNC 像素值ov7725数字摄像头编程基本知识笔记这里以ov7725为例,对数字摄像头的时序进行分析。
其他数字摄像头的时序也大同小异。
像素输出顺序数字摄像头输出图像时,一般都是从左到右,有上到下逐个输出(部分芯片可配置输出顺序):有些摄像头有奇偶场,是采用隔行扫描方法,把一帧图象分为奇数场和偶数场两场。
(ov7725没有奇偶场之分)行中断时序0 第一个输出像素最后一个输出像素 最后一个像素 消隐区,如果不按照时序来采集,就有可能采集到消隐区,值为0,即黑色。
行与行之间,场与场之间都一行图像数据 第一个 像素 PCLK 上升沿时,MCU 采集图像;下降沿时,摄像头输出图像。
HREF 和HSYNC 都用于行中断信号,但时序有点区别。
HREF 上升沿就马上输出图像数据,而HSYNC 会等待一段时间再输出图像数据,如果行中断里需要处理事情再开始采集,则显然用HREF 的上升沿是很容易来不两个都是行中断信号,共用同一个管脚,由寄存器配置选择哪个信号输出。
场中断时序采集图像思路①使用for 循环延时采集1. 需要采集图像时,开场中断2. 场中断来了就开启行中断,关闭场中断3. 行中断里用for 循环延时采集像素,可以在行中断里添加标志位,部分行不采集,即可跨行采集。
4. 行中断次数等于图像行数时即可关闭行中断,标志图像采集完毕。
②使用场中断和行中断,DMA 传输1. 需要采集图像时,开场中断2. 场中断来了,开行中断和初始化DMA 传输3. 行中断来了就设置DMA 地址,启动DMA 传输。
如果先过滤部分行不采集,则设置一个静态变量,每次行中断来了都自加1,根据值来选择采集或不采集某些行。
4. 每个PCLK 上升沿来了都触发DMA 传输,把摄像头输出的值读取到内存数组里。
当触发n 次(n=图像列数目)后就停止DMA 传输。
5. 行中断次数等于一幅图像的行数,或者等待下一个场中断来临 就结束图像采集,关闭行中断和场中断。
OV7670带FIFO的CMOS摄像头使用说明
OV7670带FIFO的CMOS摄像头使用说明OV7670是一款带有FIFO的CMOS摄像头芯片,广泛应用于各种嵌入式系统中。
它具有低功耗、高灵敏度和高图像质量等特点,适合于图像采集和处理应用。
以下是OV7670带FIFO的CMOS摄像头的使用说明。
一、硬件连接1.连接供电:将模块的VCC引脚连接到3.3V的电源,GND引脚连接到地。
2.数据传输:-使用I2C协议进行配置:将模块的SDA引脚连接到主控芯片的SDA 引脚,SCL引脚连接到主控芯片的SCL引脚。
-使用FIFO模式进行数据传输:将模块的FIFO_WR引脚连接到主控芯片的写使能引脚,FIFO_RD引脚连接到主控芯片的读使能引脚,FIFO_WE 引脚连接到主控芯片的写时钟引脚,FIFO_OE引脚连接到主控芯片的读时钟引脚,FIFO_RST引脚连接到主控芯片的复位引脚,DATA引脚连接到主控芯片的数据引脚。
二、软件配置1.I2C配置:通过I2C协议对OV7670进行配置。
首先初始化I2C总线,然后发送配置指令给OV7670的I2C地址,通过写入特定的寄存器来配置图像参数,如分辨率、亮度、对比度等。
2.FIFO配置:通过FIFO模式进行数据传输。
首先对OV7670进行FIFO模式的配置,设置FIFO的像素格式、帧率等参数。
然后初始化主控芯片的访问FIFO的接口,设置读写使能信号并根据需要配置写时钟和读时钟。
最后,在读取FIFO数据之前,先进行FIFO的复位以确保数据的正确读取。
三、数据采集和处理1.数据采集:通过FIFO模式进行数据采集,将摄像头拍摄到的图像数据存储到FIFO缓存中。
2. 数据处理:从FIFO缓存中读取图像数据,并进行相关的图像处理操作,如图像解码、颜色空间转换、图像滤波等。
可以使用各种图像处理算法和库来实现不同的功能,如OpenCV等。
四、常见问题和解决方案1.图像质量问题:如果发现图像质量差,可以尝试调整摄像头的参数,如增加亮度、对比度等,或者使用图像后处理算法进行图像增强。
sensor调试小总结
1、2、3、4、5、6、7、8、9、10、目前,包括移动设备在内的很多多媒体设备上都使用了摄像头,而且还在以很快的速度更新换代。
目前使用的摄像头分为两种:CCD(Charge Couple Device电荷偶合器件)和CMOS(Complementary Metal Oxide Semiconductor互补金属氧化物半导体)。
这两种各有优劣:目前CCD主要使用高质量的DC、DV和高档手机上,其图像质量较好,但是整个驱动模组相对比较复杂,而且目前只有曰本一些企业掌握其生产技术,对于选用的厂商来说成本会比较高昂,而且一些设备对与图像质量没有很苛刻的要求,对体积要求会高一些;而CMOS正好满足这样的要求,CMOS模组则比较简单,目前很多厂商已经把驱动和信号处理的ISP(Image Signal Processor)集成在模组内部,这样体积就更小,而且其生产技术要求相对简单、工艺比较成熟、成本较低、外围电路简单、图像质量也可以满足一般的要求,所以在嵌入式市场中占有很大份额,目前一些高端的CMOS Sensor 的质量已经可以和CCD的质量相媲美。
我这里要介绍的就是CMOS摄像头的一些调试经验。
首先,要认识CMOS摄像头的结构。
我们通常拿到的是集成封装好的模组,一般由三个部分组成:镜头、感应器和图像信号处理器构成。
一般情况下,集成好的模组我们只看到外面的镜头、接口和封装壳,这种一般是固定焦距的。
有些厂商只提供芯片,需要自己安装镜头,镜头要选择合适大小的镜头,如果没有夜视要求的话,最好选择带有红外滤光的镜头,因为一般的sensor都能感应到红外光线,如果不滤掉,会对图像色彩产生影响,另外要注意在PCB设计时要保证镜头的聚焦中心点要设计在sensor的感光矩阵中心上。
除了这点CMOS Sensor硬件上就和普通的IC差不多了,注意不要弄脏或者磨花表面的玻璃。
其次,CMOS模组输出信号可以是模拟信号输出和数字信号输出。
OV7670调试
OV7670 的SCCB (I2C)调试1.几个基本概念A)在数据传输阶段,SDA的变化只能在SCK为低电平的时候,如果在SCK高电平的时候有SDA的变化,则可能表示的是I2C的Start或者StopB)Start:当SCK为高时,SDA从高跳变到低表示I2C总线的StartC)Stop:当SCK为高时,SDA从低跳变到高表示总线的StopD)ACK:每次传输8个bit以后,接收方都会有一个回应,如果为低表示ACK,表示OK,如果为高表示NACK,但不表示就有问题,比如Master接收Slave的数据的过程中不想接收了,就可以发送NACKE)地址 Address:在寻址段,在7位格式的地址中,发送的8位数据前七位为地址,如下图中的0x42, 最后一位表示此次发起的是读还是写,读为高电平,写为低电平。
F)子地址 SubAddress:这个东东在I2C的规范里面其实是没有的,不过很多厂家都喜欢整这个,其实就是地址段后面的一个或者两个自己的数据(一般使用写入R/W=0)。
比如俺们以前的BB没有这个概率,现在新的BB有了这个概念,还支持8位和16位。
1.一个写时序下面是一个写的地址段,加两个数据段的波形,先发送芯片ID,0x42和R/W=0, 然后发送两个写入的数据:0x32,0xb6。
1.一个写加一个读先写一个地址段,0x42,然后写入(RW=0)subaddress 0x0B。
然后重新启动一次传输,发送地址段,0x42, 读取之前写入的subaddress里面的值,读出的值为0x76,因为Master此时为receiver,要终止传输了,所以Master给Salve的回应为NACK。
也就是SCCB规范里面的一个2-phase write加一个2-phase read.4.最后来一个总线上没有设备的波形,上拉很弱。
新版FPC摄像头测评OV7725OV7670OV9650OV9655OV5640OV564。。。
新版 FPC摄像头测评 OV7725OV7670Oห้องสมุดไป่ตู้9650OV9655OV5640OV564。 。 。
最新制样新版FPC摄像头板卡,先看看结构尺寸
再瞧瞧接口(支持市面最通用的接口:2.54mm间距排针,支持5v或3.3v供电)
支持的柴草旗下将近十余款fpc标准摄像头(如OV7725 OV7670 OV9650 OV9655 OV5640 OV5642 OV2640 OV3640 MT9D112 ),涵盖 30w至500w像素 支持raw、yuv、rgb格式输出。 再看看板卡资源实物(丰富的电源系统:3.3v、2.8v、1.8v。电源完整性设计和布线,高速传输下使得摄像头图像噪声降低到了极限)
实物展示
配合iSensor测试底板,可以很方便pc采集视频,保存原始图像,bmp图片。参数调整
拍照效果测试 链接摄像头和usb底板,通过pc下载ov7725配置参数,选择图像格式:raw,点击开始
OV7670照相模组硬件应用指南1.01 OVT
O
V
Co
修改日期:2007-12-12 版本: 1.06
nf
OmniVision 公司机密
id e
nt
ia l
OV7670 照相模组硬件应用指南
Table of Contents
1. OV7670 模组参考设计................................................................................................................... 3 注:...................................................................................................................................................... 3 1.PWDN 和 RESET 不用时,应接地.................................................................................................3 2. OV7670 模组接口参考设计........................................................................................................... 4 2.1 引脚定义...............................................................................................................................
OV7670摄像头彻底解读
4 / 23
2013‐2‐21
[艾曼电子技术文档 HTTP:// ]
二、 OV7670 摄像头怎么用
1. 摄像头硬件电路
13
Y7
Output
14 DOVDD
Power
功能定义 Output bit[0] - LSB for 10-bit RGB only
Output bit[1] - for 10-bit RGB only Output bit[4] Output bit[3] Output bit[5]
Output bit[2] - LSB for 8-bit YUV Output bit[6]
END <= 0;
end
//Start
6'd1 : begin
SCLK <= 1;
I2C_BIT <= 1;
ACKW1 <= 1; ACKW2 <= 1; ACKW3 <= 1;
END <= 0;
end
6'd2 : I2C_BIT <= 0;
//I2C_SDAT = 0
6'd3 : SCLK <= 0;
6'd8 : I2C_BIT <= I2C_WDATA[19]; //Bit4
6'd9 : I2C_BIT <= I2C_WDATA[18]; //Bit3
6'd10 : I2C_BIT <= I2C_WDATA[17]; //Bit2
6'd11 : I2C_BIT <= I2C_WDATA[16]; //Bit1
ov7670在it液晶屏上的程序
用STM32F207 的DCMI接口驱动OV7670摄像头,目前我已经获取了摄像头图像,速度也很不错,图像也清晰,但是不知道为什么我的图像会一直走动,如图(原文件名:Catch(09-09-14-49-12).jpg)整个屏幕的图像会一直往下走,如此循环反复。
但是图像又是动态的,比如手在摄像头前晃动,图像里面的手也会动的,只是图像没有固定住,一直走动,请问下高手,这是什么原因啊?LCD驱动是ST官方的ili9320,摄像头的是在官方的9655驱动上改动初始化代码的。
DCMI 接口代码如下:/******************************************************************************** @函数名称DCMI_Config* @函数说明DCMI接口配置* @输入参数无* @输出参数无* @返回参数无*******************************************************************************/ void DCMI_Config(void){DCMI_InitTypeDef DCMI_InitStructure;GPIO_InitTypeDef GPIO_InitStructure;DMA_InitTypeDef DMA_InitStructure;//使能DAMI 的GPIO时钟RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOB | RCC_AHB1Periph_GPIOC, ENABLE);//使能DCMI时钟RCC_AHB2PeriphClockCmd(RCC_AHB2Periph_DCMI, ENABLE);//连接DCMI管脚到AF13功能GPIO_PinAFConfig(GPIOA, GPIO_PinSource4, GPIO_AF_DCMI);GPIO_PinAFConfig(GPIOA, GPIO_PinSource6, GPIO_AF_DCMI);GPIO_PinAFConfig(GPIOB, GPIO_PinSource6, GPIO_AF_DCMI);GPIO_PinAFConfig(GPIOB, GPIO_PinSource7, GPIO_AF_DCMI);GPIO_PinAFConfig(GPIOB, GPIO_PinSource8, GPIO_AF_DCMI);GPIO_PinAFConfig(GPIOB, GPIO_PinSource9, GPIO_AF_DCMI);GPIO_PinAFConfig(GPIOC, GPIO_PinSource6, GPIO_AF_DCMI);GPIO_PinAFConfig(GPIOC, GPIO_PinSource7, GPIO_AF_DCMI);GPIO_PinAFConfig(GPIOC, GPIO_PinSource8, GPIO_AF_DCMI);GPIO_PinAFConfig(GPIOC, GPIO_PinSource9, GPIO_AF_DCMI);GPIO_PinAFConfig(GPIOC, GPIO_PinSource11, GPIO_AF_DCMI);// DCMI GPIO 配置// D0..D4(PC6/7/8/9/11)GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7 |GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_11;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP ;GPIO_Init(GPIOC, &GPIO_InitStructure);// D5..D7(PB6/8/9), VSYNC(PB7)GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9;GPIO_Init(GPIOB, &GPIO_InitStructure);// PCLK(PA6) HSYNC(PA4)GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4 | GPIO_Pin_6;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;GPIO_Init(GPIOA, &GPIO_InitStructure);// DCMI 配置DCMI_InitStructure.DCMI_CaptureMode = DCMI_CaptureMode_Continuous; DCMI_InitStructure.DCMI_SynchroMode = DCMI_SynchroMode_Hardware;DCMI_InitStructure.DCMI_PCKPolarity = DCMI_PCKPolarity_Falling;DCMI_InitStructure.DCMI_VSPolarity = DCMI_VSPolarity_High;DCMI_InitStructure.DCMI_HSPolarity = DCMI_HSPolarity_High;DCMI_InitStructure.DCMI_CaptureRate = DCMI_CaptureRate_All_Frame; DCMI_InitStructure.DCMI_ExtendedDataMode = DCMI_ExtendedDataMode_8b;DCMI_Init(&DCMI_InitStructure);// 配置DMA2 传输数据从DCMI 到LCD// 使能DMA2 时钟RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA2, ENABLE);//DMA2 Stream1 配置DMA_DeInit(DMA2_Stream1);DMA_InitStructure.DMA_Channel = DMA_Channel_1;DMA_InitStructure.DMA_PeripheralBaseAddr = DCMI_DR_ADDRESS;DMA_InitStructure.DMA_Memory0BaseAddr = FSMC_LCD_ADDRESS;DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralToMemory;DMA_InitStructure.DMA_BufferSize = 1;DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Disable;DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Word; DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord; DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;DMA_InitStructure.DMA_Priority = DMA_Priority_High;DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Enable;DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_Full;DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single;DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single;DMA_Init(DMA2_Stream1, &DMA_InitStructure);}摄像头的初始化数组,移植的是网友的,稍微动了以下。
OV7670分辨率设置
0x18 HSTOP 输出格式-行频结束高八位(低三位在HREF[5:3])
0x19 VSTRT 输出格式-场频开始高八位(低二位在VREF[1:0])
0x1A VSTOP 输出格式-场频结束高八位(低二位在 VREF[3:2])
0x03 VREF 位[3:2]VREF 结束的低两位(高八位见VSTOP[7:0]
关于 OV7670 摄像头 的分辨率设置
最近一直在纠结如何把 OV7670 输出的 图片分辨率缩小,以减少数据量来适应数据的传输, 在网上看了好多也没有关于寄存器的具体设置,最终又读了几遍数据手册,加上网友们写的
帖子的启发,总结出如下结论,希望大家批评指正。
Ov7670 的寄存器中跟分辨率有关的寄存器主要是一下几个: 0x17 HSTART 输出格式-行频开始高八位(低三位在HREF[2:0])
u16 endx=(startx+width*2)%784; u16 endy=(starty+height*2); u8 x_reg, y_reg; u8 state,temp;
state = rdOV7670Reg(0x32, &; state = rdOV7670Reg(0x03, &y_reg ); y_reg &= 0xF0;
位[1:0]VREF 开始的低两位(高八位见 VSTOP[7:0]
0x32 HREF 读写HREF控制
位[5:3]:HREF结束的低3位(高8位在HSTOP)
位[2:0]:HREF 结束的低 3 位(高 8 位在 HSTOP)
网上给的一般的设置方式是这样的:QVGA RGB565 320*240
{0x32, 0x80},
再看 VGA 和 QVGA 的区别:
ov7670寄存器配置调试总结
废话后面说,先直接上OV7670寄存器的配置部分const uint8_t OV7670_Reg[][2]={//Frame Rate Adjustment for 24Mhz input clock//30fps PCLK=24MHz{0x11, 0x80},//软件应用手册上设置的是0x80,例程设置的是0x00{0x6b, 0x0a},//PLL控制,软件应用手册上设置的是0x0a,例程设置的是0x40,将PLL调高的话就会产生花屏{0x2a, 0x00},{0x2b, 0x00},{0x92, 0x00},{0x93, 0x00},{0x3b, 0x0a},//Output format{0x12, 0x14},//QVGA(320*240)、RGB//RGB555/565 option(must set COM7[2] = 1 and COM7[0] = 0){0x40, 0x10},//RGB565,effective only when RGB444[1] is low{0x8c, 0x00},//Special effects - 特效//normal{0x3a, 0x04},{0x67, 0xc0},{0x68, 0x80},//Mirror/VFlip Enable - 水平镜像/竖直翻转使能{0x1e, 0x37},//修改配置值将产生图像显示上下或左右颠倒//Banding Filter Setting for 24Mhz Input Clock - 条纹滤波器//30fps for 60Hz light frequency//{0x13, 0xe7},//banding filer enable//{0x9d, 0x98},//50Hz banding filer//{0x9e, 0x7f},//60Hz banding filer//{0xa5, 0x02},//3 step for 50Hz//{0xab, 0x03},//4 step for 60Hz//{0x3b, 0x02},//select 60Hz banding filer//Simple White Balance - 白平衡//{0x13, 0xe7},//AWB、AGC、AGC Enable and ...//{0x6f, 0x9f},//simple AWB//AWBC - 自动白平衡控制(Automatic white balance control)//{0x43, 0x14},//用户手册里这些寄存器的值都是保留(Reserved),不用设置的呀?//{0x44, 0xf0},//{0x45, 0x34},//{0x46, 0x58},//{0x47, 0x28},//{0x48, 0x3a},//AWB Control//{0x59, 0x88},//用户手册连寄存器都是保留,初始值都没提供//{0x5a, 0x88},//{0x5b, 0x44},//{0x5c, 0x67},//{0x5d, 0x49},//{0x5e, 0x0e},//AWB Control//{0x6c, 0x0a},//{0x6d, 0x55},//{0x6e, 0x11},//{0x6f, 0x9f},//AGC/AEC - Automatic Gain Control自动增益补偿/Automatic exposure Control自动曝光控制//{0x00, 0x00},//{0x14, 0x20},//{0x24, 0x75},//{0x25, 0x63},//{0x26, 0xA5},//AEC algorithm selection - AEC公式选择//{0xaa, 0x94},//基于平均值的AEC算法Average-based AEC algorithm/基于直方图的AEC算法Histogram-based AEC algorithm//基于直方图的AGC/AEC的控制//{0x9f, 0x78},//{0xa0, 0x68},//{0xa6, 0xdf},//{0xa7, 0xdf},//{0xa8, 0xf0},//{0xa9, 0x90},//Fix Gain Control - 固定增益控制//{0x69, 0x5d},//Fix gain for Gr channel/for Gb channel/for R channel/for B channel//Color saturation 颜色饱和度+ 0//{0x4f, 0x80},//{0x50, 0x80},//{0x51, 0x00},//{0x52, 0x22},//{0x53, 0x5e},//{0x54, 0x80},//{0x58, 0x9e},//Brightness - 亮度+ 0//{0x55, 0x00},//Contrast - 对比度+ 0//{0x56, 0x40},//Gamma Curve - 伽马曲线//{0x7a, 0x20},//{0x7b, 0x1c},//{0x7c, 0x28},//{0x7d, 0x3c},//{0x7e, 0x55},//{0x7f, 0x68},//{0x80, 0x76},//{0x81, 0x80},//{0x82, 0x88},//{0x83, 0x8f},//{0x84, 0x96},//{0x85, 0xa3},//{0x86, 0xaf},//{0x87, 0xc4},//{0x88, 0xd7},//{0x89, 0xe8},//Matrix Coefficient - 色彩矩阵系数//{0x4f, 0x80},//{0x50, 0x80},//{0x51, 0x00},//{0x52, 0x22},//{0x53, 0x5e},//{0x54, 0x80},//Lens Correction Option - 镜头补偿选项 //{0x62, 0x00},//{0x63, 0x00},//{0x64, 0x04},//{0x65, 0x20},//{0x66, 0x05},//{0x94, 0x04},//effective only when LCC5[2] is high//{0x95, 0x08},//effective only when LCC5[2] is high//注释这些配置的话,就倾斜显示,并显示多块,这到底是控制什么的?跟时序图有关?{0x17, 0x16},//行频Horizontal Frame开始高八位(低三位在HREF[2:0]){0x18, 0x04},//行频Horizontal Frame结束高八位(低三位在HREF[5:3]){0x19, 0x02},//场频Vertical Frame开始高八位(低二位在VREF[1:0]){0x1a, 0x7b},//场频Vertical Frame结束高八位(低二位在VREF[3:2]){0x32, 0x80},//HREF{0x03, 0x06},//VREF//注释这个配置的话,就显示花屏了{0x15, 0x02},//配置PCLK、HREF、VSYNC相关//Automatic black Level Compensation - 自动黑电平校正{0xb0, 0x84},//调试时注释这项配置时,颜色显示不正常了,红色练绿色,绿色变红色,但用户手册对这寄存器是保留RSVD//{0xb1, 0x0c},//{0xb2, 0x0e},//{0xb3, 0x82},//{0xb8, 0x0a},//SCALING_xx寄存器//{0x70, 0x00},//{0x71, 0x00},//{0x72, 0x11},//{0x73, 0x08},//{0x3e, 0x00},//ADC//{0x37, 0x1d},//ADC控制ADC Control//{0x38, 0x71},//ADC和模拟共模控制ADC and Analog Common Mode Control//{0x39, 0x2a},//ADC偏移控制ADC Offset Control//零杂的寄存器//{0x92, 0x00},//空行低八位Dummy Line low 8 bits//{0xa2, 0x02},//像素时钟延时//{0x0c, 0x0c},//{0x10, 0x00},//{0x0d, 0x01},//{0x0f, 0x4b},//{0x3c, 0x78},//{0x74, 0x19},//用户手册里这几个寄存器都是保留RSVD//{0x0e, 0x61},//{0x16, 0x02},//{0x21, 0x02},//{0x22, 0x91},//{0x29, 0x07},//{0x33, 0x0b},//{0x35, 0x0b},//{0x4d, 0x40},//{0x4e, 0x20},//{0x8d, 0x4f},//{0x8e, 0x00},//{0x8f, 0x00},//{0x90, 0x00},//{0x91, 0x00},//{0x96, 0x00},//{0x9a, 0x80},};刚开始学OV7670摄像头,我想大家跟我一样心里很毛躁吧,一个模块需要你配置100多个寄存器,但用户手册对寄存器的介绍却草草的一笔带过,自己无从下手啊,只能看开发板给的例程和上网找一些大虾的帖子了。
stm32和ov7670图像采集串口上位机显示
二:不要指望自己一个一个寄存器去配置,本来资料就简陋,有很多寄存器你看了资料未必能明白啥个意思,在网上找个配置方案(也可以借用我的配置方案)修改一些关键地方就行了。
WrCmos7670(0x84, 0x96);
WrCmos7670(0x85, 0xa3);
WrCmos7670(0x86, 0xaf);
WrCmos7670(0x87, 0xc4);
WrCmos7670(0x88, 0xd7);
WrCmos7670(0x89, 0xe8);
WrCmos7670(0x13, 0xe0);
{0x40, 0xC0},//初始配置,YUV模式,这个寄存器必须设置,否则不好使
为方便调试,都是用固定的U值XX11XXFF,说明配置成功。
要注意的就是{0x40, 0xC0},这个必须设置成初始化值,默认配置便是YUV,不能再用RGB565的配置。顺便说一句,YUV模式为YUV 4:2:2,不是说8位里面4位Y,2位U,2位V的意思,Y/U/V都是8位数据,只是U和V是隔着Y轮流输出的,高字节的是Y,低字节为U或V,做飞思卡尔智能车一般用的OV7620就是这样,一般只用Y的数据,用来判断黑白。
六:分辨率配置(具体配置参考代码)主要有一下几个寄存器
0x 17HSTART
0x 18HSTOP
0x 19VSTRT
0x 1AVSTOP
0x 03VREF
HREF的高电平宽度等于我们所要显示的一行
HREF = WEIGHT*2;乘以二是因为每个像素点是有两个
OV7670图像传感器介绍
OV7670图像传感器介绍OV7670图像传感器简介OV7670是图像传感器,其体积小、工作电压低,能提供单片VGA 摄像头和影像处理器的所有功能。
通过SCCB 总线控制,可以输出整帧、子采样、取窗口等方式的各种分辨率8位影响数据。
该产品VGA图像最高达到30帧/秒。
用户可以完全控制图像质量、数据格式和传输方式。
所有图像处理功能过程包括伽玛曲线、白平衡、饱和度、色度等都可以通过SCCB接口编程。
图像传感器应用独有的传感器技术,通过减少或消除光学或电子缺陷如固定图案噪声、托尾、浮散等,提高图像质量,得到清晰的稳定的彩色图像。
OV7670图像传感器功能1、高灵敏度适合低照度应用。
2、低电压适合嵌入式应用。
3、标准的SCCB接口,兼容I2C接口。
4、RawRGB,RGB(GRB4:2:2,RGB565/555/444),YUV(4:2:2)和YCbCr(4:2:2)输出格式。
5、支持VGA,CIF,和从CIF到40x30的各种尺寸。
6、VarioPixel 子采样方式。
7、自动影响控制功能包括:自动曝光控制、自动增益控制、自动白平衡,自动消除灯光条纹、自动黑电平校准.图像质量控制包括色饱和度、色相、伽玛、锐度和ANTI_BLOOM。
8、ISP具有消除噪声和坏点补偿功能。
9、支持闪光灯:LED灯和氙灯。
10、支持图像缩放。
11、镜头失光补偿。
12、50/60Hz自动检测。
13、饱和度自动调节(UV调整)。
14、边缘增强自动调节。
15、降噪自动调节。
OV7670图像传感器参数OV7670图像传感器管脚图OV7670图像传感器的功能模块1、感光阵列(共有656x488个像素,其中在YUV的模式中,有效像素为640x480个)。
2、模拟信号处理。
3、A/D转换。
4、测试图案发生器。
5、数字信号处理器。
6、图像缩放。
7、时序发生器。
8、数字视频端口。
9、SCCB接口。
10、LED和闪光灯输出控制。
功能框图OV7670图像传感器封装尺寸。
少年说‖元宝(192):ov7670摄像头实验-成功需要“念念不忘”
少年说‖元宝(192):ov7670摄像头实验-成功需要“念念不忘”记得一年前,有一次上网买零件。
我看见了摄像头模块,觉得很有意思,就买了一个。
到货后我便开始做各个模块的实验,基本上都成功了,除了这个ov7670摄像头。
于是我下决心一定要搞定它。
ov7670摄像头模块为了这个目标,我千方百计的搜索资料。
全百度关于ov7670这个关键词的结果我基本都看遍了,周末又去问了科技馆的老师,老师也没办法,只告诉我Arduino的芯片太慢,想做摄像头实验就买Arm 板吧。
我看了看Arm板的编程难度,只好把那摄像头封存在了原件盒里,后来又因为研发“超声波测距报警器”,而忽略了它一年多。
前几天我在收拾工作台时,找到了摄像头模块,并想起当时下定决心要搞定他。
我又上百度搜索,看见了一个在2019年5月份才发布的帖子,是用Arduino把图像显示在1.8寸tft彩屏的教程。
我十分高兴,当即买了1.8寸tft彩屏,并补充了因为报警器研发制作而消耗的电线。
一切准备就绪,我按照接线图一根根的接好线,接完后机器看似凌乱不堪。
我从网上下载了测试程序,上传到了单片机,期待着成功。
可就在这时编译器却报错了。
我看了看,发现忘了放入一个必要的文件,就马上找到那个文件拷了进去。
我再次上传,看见进程条走到了头,我十分高兴,感觉已经胜利在望。
随着Arduino板上的两个串口灯的飞快闪烁,终于“上传成功”出现在了电脑上,空白的tft屏先变绿,然后黑屏了。
难道是失败了?这时我才突然发现自己没有取下镜头的保护盖。
我笑了一下,取下了保护盖,图像模糊的不像样子。
我调了一下镜头焦距,只见凌乱的工作台出现在tft屏上,我开心的跳了起来。
接线完成成功后,我想到连老师都不知道,肯定还有很多的单片机爱好者为摄像头模块的示例程序而发愁。
于是我把这个教程发到了Arduino 中文社区上。
这样就有更多的电子爱好者都能看到了。
这次成功的实验让我懂得了成功需要有目标,并且不能忘记,如果我当时没有想到一定要把这个摄像头的实验完成,那最后也就不会有这成功的一刻了。
OV7670带FIFO的CMOS摄像头使用说明
OV7670-CMOS摄像头使用说 明2014.2.10 参赛平台1.OV7670带FIFO 模块1.简介:OV7670带FIFO 模块,是针对慢速的MCU 能够实现图像采集控制推出的带有缓冲存储空间的一种模块。
这种模块增加了一个FIFO (先进先出)存储芯片,同样包含30w 像素的CMOS 图像感光芯片,3.6mm 焦距的镜头和镜头座,板载CMOS 芯片所需要的各种不同电源(电源要求详见芯片的数据文件),板子同时引出控制管脚和数据管脚,方便操作和使用。
图1.OV7670带FIFO模块 2.管脚定义:参赛平台如图,控制传感器所需的管脚定义如下:3V3-----输入电源电压(推荐使用3.3,5V 也可,但不推荐)GDN-----接地点SIO_C---SCCB 接口的控制时钟(注意:部分低级单片机需要上拉控制,和I2C 接口类似)SIO_D---SCCB 接口的串行数据输入(出)端(注意:部分低级单片机需要上拉控制,和I2C 接口类似) VSYNC---帧同步信号(输出信号)HREF----行同步信号(输出信号)PCLK----像素时钟(输出信号)XCLCK---时钟信号(输入信号)D0-D7---数据端口(输出信号)RESTE---复位端口(正常使用拉高)PWDN----功耗选择模式(正常使用拉低)STROBE—拍照闪光控制端口(正常使用可以不需要)FIFO_RCK---FIFO 内存读取时钟控制端FIFO_WR_CTR----FIFO 写控制端(1为允许CMOS 写入到FIFO,0为禁止) FIFO_OE----FIFO 关断控制FIFO_WRST—FIFO 写指针服务端FIFO_RRST—FIFO 读指针复位端 参赛平台图7.FIFO摄像头接口定义3.控制方式说明由于采用了FIFO 做为数据缓冲,数据采集大大简便,用户只需要关心是如何读取即可,不需要关心具体数据是如何采集到的,这样可减小甚至不用关心CMOS 的控制以及时序关系,就能够实现图像的采集。
ov7670寄存器配置调试总结
废话后面说,先直接上OV7670寄存器的配置部分const uint8_t OV7670_Reg[][2]={//Frame Rate Adjustment for 24Mhz input clock//30fps PCLK=24MHz{0x11, 0x80},//软件应用手册上设置的是0x80,例程设置的是0x00{0x6b, 0x0a},//PLL控制,软件应用手册上设置的是0x0a,例程设置的是0x40,将PLL调高的话就会产生花屏{0x2a, 0x00},{0x2b, 0x00},{0x92, 0x00},{0x93, 0x00},{0x3b, 0x0a},//Output format{0x12, 0x14},//QVGA(320*240)、RGB//RGB555/565 option(must set COM7[2] = 1 and COM7[0] = 0){0x40, 0x10},//RGB565,effective only when RGB444[1] is low{0x8c, 0x00},//Special effects - 特效//normal{0x3a, 0x04},{0x67, 0xc0},{0x68, 0x80},//Mirror/VFlip Enable - 水平镜像/竖直翻转使能{0x1e, 0x37},//修改配置值将产生图像显示上下或左右颠倒//Banding Filter Setting for 24Mhz Input Clock - 条纹滤波器//30fps for 60Hz light frequency//{0x13, 0xe7},//banding filer enable//{0x9d, 0x98},//50Hz banding filer//{0x9e, 0x7f},//60Hz banding filer//{0xa5, 0x02},//3 step for 50Hz//{0xab, 0x03},//4 step for 60Hz//{0x3b, 0x02},//select 60Hz banding filer//Simple White Balance - 白平衡//{0x13, 0xe7},//AWB、AGC、AGC Enable and ...//{0x6f, 0x9f},//simple AWB//AWBC - 自动白平衡控制(Automatic white balance control)//{0x43, 0x14},//用户手册里这些寄存器的值都是保留(Reserved),不用设置的呀?//{0x44, 0xf0},//{0x45, 0x34},//{0x46, 0x58},//{0x47, 0x28},//{0x48, 0x3a},//AWB Control//{0x59, 0x88},//用户手册连寄存器都是保留,初始值都没提供//{0x5a, 0x88},//{0x5b, 0x44},//{0x5c, 0x67},//{0x5d, 0x49},//{0x5e, 0x0e},//AWB Control//{0x6c, 0x0a},//{0x6d, 0x55},//{0x6e, 0x11},//{0x6f, 0x9f},//AGC/AEC - Automatic Gain Control自动增益补偿/Automatic exposure Control自动曝光控制//{0x00, 0x00},//{0x14, 0x20},//{0x24, 0x75},//{0x25, 0x63},//{0x26, 0xA5},//AEC algorithm selection - AEC公式选择//{0xaa, 0x94},//基于平均值的AEC算法Average-based AEC algorithm/基于直方图的AEC算法Histogram-based AEC algorithm//基于直方图的AGC/AEC的控制//{0x9f, 0x78},//{0xa0, 0x68},//{0xa6, 0xdf},//{0xa7, 0xdf},//{0xa8, 0xf0},//{0xa9, 0x90},//Fix Gain Control - 固定增益控制//{0x69, 0x5d},//Fix gain for Gr channel/for Gb channel/for R channel/for B channel//Color saturation 颜色饱和度+ 0//{0x4f, 0x80},//{0x50, 0x80},//{0x51, 0x00},//{0x52, 0x22},//{0x53, 0x5e},//{0x54, 0x80},//{0x58, 0x9e},//Brightness - 亮度+ 0//{0x55, 0x00},//Contrast - 对比度+ 0//{0x56, 0x40},//Gamma Curve - 伽马曲线//{0x7a, 0x20},//{0x7b, 0x1c},//{0x7c, 0x28},//{0x7d, 0x3c},//{0x7e, 0x55},//{0x7f, 0x68},//{0x80, 0x76},//{0x81, 0x80},//{0x82, 0x88},//{0x83, 0x8f},//{0x84, 0x96},//{0x85, 0xa3},//{0x86, 0xaf},//{0x87, 0xc4},//{0x88, 0xd7},//{0x89, 0xe8},//Matrix Coefficient - 色彩矩阵系数//{0x4f, 0x80},//{0x50, 0x80},//{0x51, 0x00},//{0x52, 0x22},//{0x53, 0x5e},//{0x54, 0x80},//Lens Correction Option - 镜头补偿选项 //{0x62, 0x00},//{0x63, 0x00},//{0x64, 0x04},//{0x65, 0x20},//{0x66, 0x05},//{0x94, 0x04},//effective only when LCC5[2] is high//{0x95, 0x08},//effective only when LCC5[2] is high//注释这些配置的话,就倾斜显示,并显示多块,这到底是控制什么的?跟时序图有关?{0x17, 0x16},//行频Horizontal Frame开始高八位(低三位在HREF[2:0]){0x18, 0x04},//行频Horizontal Frame结束高八位(低三位在HREF[5:3]){0x19, 0x02},//场频Vertical Frame开始高八位(低二位在VREF[1:0]){0x1a, 0x7b},//场频Vertical Frame结束高八位(低二位在VREF[3:2]){0x32, 0x80},//HREF{0x03, 0x06},//VREF//注释这个配置的话,就显示花屏了{0x15, 0x02},//配置PCLK、HREF、VSYNC相关//Automatic black Level Compensation - 自动黑电平校正{0xb0, 0x84},//调试时注释这项配置时,颜色显示不正常了,红色练绿色,绿色变红色,但用户手册对这寄存器是保留RSVD//{0xb1, 0x0c},//{0xb2, 0x0e},//{0xb3, 0x82},//{0xb8, 0x0a},//SCALING_xx寄存器//{0x70, 0x00},//{0x71, 0x00},//{0x72, 0x11},//{0x73, 0x08},//{0x3e, 0x00},//ADC//{0x37, 0x1d},//ADC控制ADC Control//{0x38, 0x71},//ADC和模拟共模控制ADC and Analog Common Mode Control//{0x39, 0x2a},//ADC偏移控制ADC Offset Control//零杂的寄存器//{0x92, 0x00},//空行低八位Dummy Line low 8 bits//{0xa2, 0x02},//像素时钟延时//{0x0c, 0x0c},//{0x10, 0x00},//{0x0d, 0x01},//{0x0f, 0x4b},//{0x3c, 0x78},//{0x74, 0x19},//用户手册里这几个寄存器都是保留RSVD//{0x0e, 0x61},//{0x16, 0x02},//{0x21, 0x02},//{0x22, 0x91},//{0x29, 0x07},//{0x33, 0x0b},//{0x35, 0x0b},//{0x4d, 0x40},//{0x4e, 0x20},//{0x8d, 0x4f},//{0x8e, 0x00},//{0x8f, 0x00},//{0x90, 0x00},//{0x91, 0x00},//{0x96, 0x00},//{0x9a, 0x80},};刚开始学OV7670摄像头,我想大家跟我一样心里很毛躁吧,一个模块需要你配置100多个寄存器,但用户手册对寄存器的介绍却草草的一笔带过,自己无从下手啊,只能看开发板给的例程和上网找一些大虾的帖子了。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
关于OV7725程序移植OV7670总结用了三天的时间,终于搞定了程序的移植。
也是第一次移植stm32程序。
最终的移植成功版本,改了SCCB通信、FIFO读写时序、寄存器配置、引脚修改的一些地方。
一、移植过程中SCCB通信遇到的问题1.由于野火的OV7725摄像头内置上拉电阻,所以在配置时SDA和SDL都被设置成了Mode_OD (开漏模式),但是战舰带的OV7670摄像头并没有内置上拉电阻,所以不能用开漏模式,否则不能正常输出高电平,SDA线也不会被主机拉高。
于是参考了战舰的例程。
战舰对SCL线设置为了PP(推挽输出模式),SDA线的输出则需要切换。
如下:在战舰的例程上进行修改时,由于需要修改一些IO口,所以需要把这句改掉。
我尝试用这样的手法修改:发现并不可行。
查询网络,原因可能是在运行中途修改管脚模式时,由于32的LCKK:锁密钥,并不能直接修改管脚工作模式。
我们选择对底层寄存器进行操作。
于是乎这样改:*注:SDA为PC7口。
2. 还有需要修改的地方就是:在需要读取SDA电平状态的时候,要用SCCB_SDA_IN 这个语句把替换掉SDA_H,而不是先SDA_H 然后再SCCB_SDA_IN 。
否则不能正确读取到SDA线的电平。
3.最后一步,器件ID:在这一段代码用到:二、FIFO读数据时序的修改1.由于每个人选择的数据口可能不同,有的是0-7位,有的是8-15位,所以我这里给出了两种不同的读取时序。
H_MY_READ_FIFO_PIXEL(YUV)是当数据位选择的是8-15位时候用的;L_MY_READ_FIFO_PIXEL(YUV)是当数据位选择的是0-7位时候用的。
*注:因为我要的二值化的图像,所以只读取了YUV 分量中的Y分量。
下面这段代码是读取RGB565的:三、寄存器的配置1. 我用的YUV,没有给每位寄存器重定义。
所以要结合Datasheet自行查看。
/*以下为 YUV参数设置*/{0x12, 0x10},{0x3a, 0x14},{0x3d, 0x80},//0 0 : Y U Y V (3a:14 3d:80)//0 1 : Y V Y U (3a:14 3d:81)//1 0 : U Y V Y (3a:18 3d:80)//1 1 : V Y U Y (3a:18 3d:81){0x67, 0x11}, //手工设置 U{0x68, 0xFF}, //手工设置 V{0x40, 0xC0}, //YUV输出//输出窗口设置{0x32, 0x80}, //HREF{0x17, 0x16}, //HSTART{0x18, 0x04},//HSTOP{0x19, 0x02},//VSTRT{0x1a, 0x7a},//0x7a, VSTOP{0x03, 0x0a},//0x0a, VREF{0x0c, 0x0c},{0x15, 0x00},{0x3e, 0x00},//10{0x70, 0x00},{0x71, 0x01},{0x72, 0x11},{0x73, 0x09},//{0xa2, 0x02},//15{0x11, 0x00},//时钟分频设置,0,不分频.{0x7a, 0x20},{0x7b, 0x1c},{0x7c, 0x28},{0x7d, 0x3c},//20{0x7e, 0x55},{0x7f, 0x68},{0x80, 0x76},{0x81, 0x80},{0x82, 0x88},{0x83, 0x8f},{0x84, 0x96},{0x85, 0xa3},{0x86, 0xaf},{0x87, 0xc4},//30{0x88, 0xd7},{0x89, 0xe8},{0x13, 0xe0},{0x00, 0x00},//AGC{0x10, 0x00},{0x0d, 0x00},{0x14, 0x20},//0x38, limit the max gain {0xa5, 0x05},{0xab, 0x07},{0x24, 0x75},//40{0x25, 0x63},{0x26, 0xA5},{0x9f, 0x78},{0xa0, 0x68},{0xa1, 0x03},//0x0b,{0xa6, 0xdf},//0xd8,{0xa7, 0xdf},//0xd8,{0xa8, 0xf0},{0xa9, 0x90},{0xaa, 0x94},//50{0x13, 0xe5},{0x0e, 0x61},{0x0f, 0x4b},{0x16, 0x02},{0x1e, 0x27},//图像输出镜像控制.0x07, {0x21, 0x02},{0x22, 0x91},{0x29, 0x07},{0x33, 0x0b},{0x35, 0x0b},//60{0x37, 0x1d},{0x38, 0x71},{0x39, 0x2a},{0x3c, 0x78},{0x4d, 0x40},{0x4e, 0x20},{0x69, 0x5d},{0x6b, 0x40},//PLL*4=48Mhz{0x74, 0x19},{0x8d, 0x4f},{0x8e, 0x00},//70{0x8f, 0x00},{0x90, 0x00},{0x91, 0x00},{0x92, 0x00},//0x19,//0x66{0x96, 0x00},{0x9a, 0x80},{0xb0, 0x84},{0xb1, 0x0c},{0xb2, 0x0e},{0xb3, 0x82},//80{0xb8, 0x0a},{0x43, 0x14},{0x44, 0xf0},{0x45, 0x34},{0x46, 0x58},{0x47, 0x28},{0x48, 0x3a},{0x59, 0x88},{0x5a, 0x88},{0x5b, 0x44},//90{0x5c, 0x67},{0x5d, 0x49},{0x5e, 0x0e},{0x64, 0x04},{0x65, 0x20},{0x66, 0x05},{0x94, 0x04},{0x95, 0x08},{0x6c, 0x0a},{0x6d, 0x55},{0x4f, 0x80},{0x50, 0x80},{0x51, 0x00},{0x52, 0x22},{0x53, 0x5e},{0x54, 0x80},//{0x54, 0x40},//110{0x09, 0x03},//驱动能力最大{0x6e, 0x11},//100{0x6f, 0x9f},//0x9e for advance AWB {0x55, 0x00},//亮度{0x56, 0x40},//对比度{0x57, 0x80},//0x402.RGB565的配置:/*以下为OV7670 QVGA RGB565参数 */ {0x3a, 0x04},//{0x40, 0x10},{0x12, 0x14},{0x32, 0x80},{0x17, 0x16},{0x18, 0x04},//5{0x19, 0x02},{0x1a, 0x7b},//0x7a,{0x03, 0x06},//0x0a,{0x0c, 0x0c},{0x15, 0x02},{0x3e, 0x00},//10{0x70, 0x00},{0x71, 0x01},{0x72, 0x11},{0x73, 0x09},//{0xa2, 0x02},//15{0x11, 0x00},{0x7a, 0x20},{0x7b, 0x1c},{0x7c, 0x28},{0x7d, 0x3c},//20{0x7e, 0x55},{0x7f, 0x68},{0x80, 0x76},{0x81, 0x80},{0x82, 0x88},{0x83, 0x8f},{0x84, 0x96},{0x85, 0xa3},{0x86, 0xaf},{0x87, 0xc4},//30{0x88, 0xd7},{0x89, 0xe8},{0x13, 0xe0},{0x00, 0x00},//AGC{0x10, 0x00},{0x0d, 0x00},{0x14, 0x30},//0x38, limit the max gain {0xa5, 0x05},{0xab, 0x07},{0x24, 0x75},//40{0x25, 0x63},{0x26, 0xA5},{0x9f, 0x78},{0xa0, 0x68},{0xa1, 0x03},//0x0b,{0xa6, 0xdf},//0xd8,{0xa7, 0xdf},//0xd8,{0xa8, 0xf0},{0xa9, 0x90},{0xaa, 0x94},//50{0x13, 0xf5},{0x0e, 0x61},{0x0f, 0x4b},{0x16, 0x02},{0x1e, 0x07},//0x07,{0x21, 0x02},{0x22, 0x91},{0x29, 0x07},{0x33, 0x0b},{0x35, 0x0b},//60{0x37, 0x1d},{0x38, 0x71},{0x39, 0x2a},{0x3c, 0x78},{0x4d, 0x40},{0x4e, 0x20},{0x69, 0x5d},{0x6b, 0x40},//PLL{0x74, 0x19},{0x8d, 0x4f},{0x8e, 0x00},//70{0x8f, 0x00},{0x90, 0x00},{0x91, 0x00},{0x92, 0x00},//0x19,//0x66{0x96, 0x00},{0x9a, 0x80},{0xb0, 0x84},{0xb1, 0x0c},{0xb2, 0x0e},{0xb3, 0x82},//80{0xb8, 0x0a},{0x43, 0x14},{0x44, 0xf0},{0x45, 0x34},{0x46, 0x58},{0x47, 0x28},{0x48, 0x3a},{0x59, 0x88},{0x5a, 0x88},{0x5b, 0x44},//90{0x5c, 0x67},{0x5d, 0x49},{0x5e, 0x0e},{0x64, 0x04},{0x65, 0x20},{0x66, 0x05},{0x94, 0x04},{0x95, 0x08},{0x6c, 0x0a},{0x6d, 0x55},{0x4f, 0x80},{0x50, 0x80},{0x51, 0x00},{0x52, 0x22},{0x53, 0x5e},{0x54, 0x80},//{0x54, 0x40},//110{0x6e, 0x11},//100{0x6f, 0x9f},//0x9e for advance AWB {0x55, 0x00},//亮度{0x56, 0x45},//对比度{0x57, 0x80},//0x40四、移植过程中引脚的修改1.外部中断的修改我需要修改的引脚有FIFO-OE / FIFO-RCLK / FIIFO-RRST / SCL / SDA / VSYNC / WRST其他的不用多说,VSYNC需要修改的地方还是蛮多的~(我用的外部中断口是PB13)其中需要注意的是:macOV7670_VSYNC_EXTI_IRQ这个,Pin13口需要用这个,具体用哪个要查书。