带FIFO的OV7670模块使用手册_第1页
带FIFO的OV7670模块使用手册_第2页
带FIFO的OV7670模块使用手册_第3页
带FIFO的OV7670模块使用手册_第4页
带FIFO的OV7670模块使用手册_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 #第四十STM32开发指南Alj三zr三i # # # #ALIENTEK战舰STM32开发板板载了一个摄像头接I丨(P8),该接1丨可以用來连接ALIENTEKOV7670摄像头模块。本章,我们将使用STM32驱动ALIENTEKOV7670摄像头模块,实现摄像头功能。本章分为如下几个部分:41.1OV7670简介41.2硬件设计41.3软件设计41.4下载验证STM32开发指南AlSTM32开发指南Al # 41.1OV7670简介OV7670是OV(OmniVision)公司生产的一颗1/6寸的CMOSVGA图像传感器。该传感器体积小、工作电压低,提供单片VGA摄像头和影像处理器的所有

2、功能。通过SCCB总线控制,可以输出整帧、子采样、取窗II等方式的各种分辨率8位影像数据。该产品VGA图像最高达到30帧/秒。用户叫以完全控制图像质最、数据格式和传输方式。所有图像处理功能过程包括伽玛曲线、白平衡、度、色度等都可以通过SCCB接LI编程。OmmiVision图像传感器应用独有的传感器技术,通过减少或消除光学或电子缺陷如固定图案噪声、托尾、浮散等,提高图像质量,得到清晰的稳定的彩色图像。OV7670的特点有:高灵敏度、低电压适合嵌入式应用标准的SCCB接II,兼容IIC接II支持RawRGB、RGB(GBR422,RGB565/RGB555/RGB444),YUV(422)和YC

3、bCr(4:2:2)输出格式支持VGA、CIF,和从CIF到40*30的各种尺寸输出支持自动曝光控制、自动增益控制、自动白平衡、自动消除灯光条纹、自动黑电平校准等自动控制功能。同时支持色饱和度、色相、伽马、锐度等设置。支持闪光灯支持图像缩放OV7670的功能框图图如图41.1.1所示:1感光整列(ImageArrayOV7670总共有656*488个像素,其中640*480个有效(即有效像素为30W)。时序发生器(VideoTimingGenerator)时序发生器具有的功能包括:整列控制和帧率发生(7种不同格式输出)、内部信号发生器 STM32开发指南AL_ENrH和分布、帧率时序、自动曝光

4、控制、输出外部时序(VSYNC、HREF/HSYNC和PCLK)。模拟信号处理(AnalogProcessing)模拟信号处理所有模拟功能,并包括:自动增益(AGC)和自动白平衡(AWB)。A/D转换(A/D)原始的信号经过模拟处理器模块Z后,分G和BR两路进入一个10位的A/D转换器,A/D转换器工作在频率,与像素频率完全同步(转换的频率和帧率有关)。除A/D转换器外,该模块还有以下三个功能:黑电平校正(BLC)U/V通道延迟A7D范围控制A/D范Fl;l乘积和A/D的范围控制共同设置AZD的范围和最人值,允许用户根据应用调整图片的亮度。测试图案发生器(TestPatternGenerato

5、r)测试图案发生器功能包括:八色彩色条图案、渐变至黑白彩色条图案和输出脚移位“1”。6数字处理器(DSP)这个部分控制由原始信号插值到RGB信号的过程,并控制一些图像质帚:边缘锐化(二维高通滤波器)颜色空间转换(原始信号到RGB或者YUV/YCbYCr)RGB色彩矩阵以消除串扰色相和饱和度的控制黑/白点补偿降噪镜头补偿可编程的伽吗十位到八位数据转换7.缩放功能(ImageScaler)这个模块按照预先设置的要求输出数据格式,能将YUVZRGB信号从VGA缩小到CIF以下的任何尺寸。8数字视频接口(DigitalVideoPort)通过寄存器COM21:0,调节IOL/IOH的驱动电流,以适应用

6、户的负载。9.SCCB接口(SCCBInterface)SCCB接II控制图像传感器芯片的运行,详细使用方法参照光盘的0mniVisionTechnologiesSeiilCameraContiolBus(SCCB)Specification这个文档10.LED和闪光灯的输出控制(LEDandStorbeFlashControlOutput)OV7670有闪光灯模式,可以控制外接闪光灯或闪光LED的工作。OV7670的寄存器通过SCCB时序访问并设置,SCCB时序和UC时序十分类似,在本章我们不做介绍,请大家参考光盘的相关文档。接下來我们介绍一下OV7670的图像数据输出格式。首先我们简单介绍

7、几个定义:VGA,即分辨率为640*480的输出模式;QVGA,即分辨率为320*240的输出格式,也就是本章我们需要用到的格式;QQVGA,即分辨率为160*120的输岀格式;PCLK,即像素时钟,一个PCLK时钟,输出一个像素(或半个像素)。VSYNC,即帧同步信号。STM32开发指南Al_ENTS:HHREF/HSYNC,即行同步信号。OV7670的图像数据输出(通过D70)就是在PCLK,VSYNC和HREF/HSYNC的控制卜进行的。首先看看行输出时序,如图41.1.2所示: # #图41.1.2OV7670行输出时序从上图可以看出,图像数据在HREF为高的时候输岀,当HREF变高后

8、,每一个PCLK时钟,输出一个字节数据。比如我们采用VGA时序,RGB565格式输出,每2个字节组成一个像素的颜色(高字节在前,低字节在后),这样每行输出总共有640七个PCLK周期,输出640*2个字节。再來看看帧时序(VGA模式),如图411.3所示:VSYNCHREFHSYNC3xtLlNE480XGe十Vine=784K(*_144tp-n_rr-uj80tp十Lir肌uI51XtLINEK19LD7:0_InvalidData|卜彳|INTIIII卜Til_:II卜Til_InvalidDataP0-P639Row0Row1Row2Row479NOTE:ForRawdata.=tpC

9、LKForYUV/RGB.tp=2xtpCLK图41.1.3OV7670帧时序上图清楚的表示了OV7670在VGA模式卜的数据输出,注意,图中的HSYNC和HREF其实是同一个引脚产生的信号,只是在不同场合卜而,使用不同的信号方式,我们本章用到的是HREF.因为OV7670的像素时钟(PCLK)最高可达24Mhz,我们用STM32F103ZET6的IOII直接抓取,是非常困难的,也十分占耗CPU(可以通过降低PCLK输出频率,來实现IOII抓取,7101718 #7101718 STM32开发指南i_EZri但是不推荐)。所以,本章我们并不是采取直接抓取來自OV7670的数据,而是通过FIFO

10、读取,ALIENTEKOV7670摄像头模块自带了一个FIFO芯片,用于暂存图像数据,冇了这个芯片,我们就可以很方便的获取图像数据了,而不再需耍单片机具有高速IO,也不会耗费多少CPU,可以说,只要是个单片机,都可以通过ALIENTEKOV7670摄像头模块实现拍照的功能。接卜來我们介绍一下ALIENTEKOV7670摄像头模块。该模块的外观如图41.1.4:7101718 #7101718 #图4114ALIENTEKOV7670摄像头模块外观图模块原理图如图41.1.5所示:1104IC2IU4GNDVCC3.3DOVDDAVDDSIODDOVDDSIOCDVDDXCLKAGNDVSYNC

11、DOGNDPCLKHREFPWDNDOSTROBEDID2D3VREF1D4VREF2D5D6RESETD7OV1B3F3F20V7670BlE2ClB2WDDAlT04-!DOVDDFl55b1A2OVSDAA3OVSCLE3OVXCLKDIOVVSYNCElOVPC1KD2OVHREFB4OVDOA4OVDIB5OVD2A5OVD3F5OVD4E5OVD5F4OVD6E4OVD?GNDGNDutVCC3.3DIODllDI2DI3wrGNDTSTWRSTWCLKVDDD14DI5DI6DI7AL422B-fepVINVOUTGNDENBYPPAN13101DAB2SDOVDDAVDD15G

12、NDzl2.0(X)MhzGNDVCC333OVXCLKNCVCCGNDOUT叫溜矍電一韻DECDO4DO5霭FlfODO?7FTFODIFIFOD225FlfOD3WT52FTFOOE21FIFORRST20tlfORCLK.1918FIFO17FlfODr,10FlfODOTmFoTT-HVCCJ3GNDGNDPlGND-|VCC3.3orOVSCLOVSDAnJCFIFODJPIFOD4HFOJmo_RCLK1113156S16FIFOUTISTrirorktHfO匹FIFO5TFIFOD3ri:门OVPSYNC7101718 7101718 #GNDHeader9X2图41.1.5AL

13、IENTEKOV7670摄像头模块原理图 # STM32开发指南ALEZTEI从上图可以看出,ALIENTEKOV7670摄像头模块自带了有源晶振,用丁产生12M时钟作为OV7670的XCLK输入。同时自带了稳压芯片,用于提供OV7670稳定的2.8V工作电压,并带有一个HFO芯片(AL4HB),该FIFO芯片的容杲是384K字节,足够存储2帧QVGA的图像数据。模块通过一个2*9的双排排针(P1)与外部通信,与外部的通信信号如表411.1所示:信号作用描述信号作用描述VCC3.3模块供电脚,接3.3V电源FIFOWENFIFO写使能GND模块地线FIFOWRSTFIFO写指针复位OVSCLS

14、CCB通信时钟信号FIFORRSTFIFO读指针复位OVSDASCCB通信数据信号FIFOOEFIFO输出使能(片选)FIF0D7:0FIFO输出数据(8位)OVVSYNC0V7670帧同步信号FIFORCLK读FIFO时钟表411.1OV7670模块信号及其作用描述卜面我们來看看如何使用ALIENTEKOV7670摄像头模块(以QVGA模式,RGB565格式为例)。对于该模块,我们只关心两点:1,如何存储图像数据;2,如何读取图像数据。首先,我们来看如何存储图像数据。ALIENTEKOV7670摄像头模块存储图像数据的过程为:等待OV7670同步信号TFIFO写指针复位TFIFO写使能T等待

15、第二个OV7670同步信号TFIFO写禁止。通过以上5个步骤,我们就完成了1帧图像数据的存储。接下来,我们来看看如何读取图像数据。在存储完一帧图像以后,我们就可以开始读取图像数据了。读取过程为:FIFO读指针复位T给FIFO读时钟(FIFO_RCLK)T读取第一个像素高字节T给FIFO读时钟T读取第一个像素低字节T给FIFO读时钟T读取第二个像素高字节T循坏读取剩余像素T结束。可以看出,ALIENTEKOV7670摄像头模块数据的读取也是十分简单,比如QVGA模式,RGB565格式,我们总共循坏读取320*240*2次,就可以读取1帧图像数据,把这些数据写入LCD模块,我们就可以看到摄像头捕捉

16、到的画面了。OV7670还可以对输出图像进行各种设置,详见光盘OV7670中文数据手册1.01和0V7670softwareapplicationnote这两个文档,对AL422B的操作时序,请人家参考AL422B的数据手册。了解了OV7670模块的数据存储和读取,我们就可以开始设计代码了,本章,我们用一个外部中断,来捕捉帧同步信号(VSYNC),然后在中断里面启动OV7670模块的图像数据存储,等待下一次VSHNC信号到来,我们就关闭数据存储,然后一帧数据就存储完成了,在主函数里面就可以慢慢的将这一帧数据读出来,放到LCD即可显示了,同时开始第二帧数据的存储,如此循坏,实现摄像头功能。本章,

17、我们将使用摄像头模块的QVGA输出(320*240),刚好和战舰STM32开发板使用的LCD模块分辨率一样,一帧输出就是一屏数据,提高速度的同时也不浪费资源。注意:ALIENTEKOV7670摄像头模块自带的FIFO是没办法缓存T贞的VGA图像的,如果使用VGA输岀,那么你必须在FIFO写满Z前开始读FIFO数据,保证数据不被覆盖。41.2硬件设计本章实验功能简介:开机后,初始化摄像头模块(OV7670),如果初始化成功,则在LCD #STM32开发指南Lj三ZTI模块上面显示摄像头模块所拍摄到的内容。我们可以通过KEYO设置光照模式(5种模式)、通过KEY1设置色饱和度,通过KEY2设置亮度

18、,通过WK_UP设置对比度,通过TPAD设置特效(总共7种特效)。通过串II,我们可以查看当前的帧率(这里是指LCD显示的帧率,而不是指OV7670的输出帧率),同时可以借助USMART设置OV7670的寄存器,方便人家调试。DSO指示程序运行状态。本实验用到的硕件资源有:1)指示灯DSO2)5个按键(包括TPAD触撓按键)3)串口4)TFTLCD模块5)摄像头模块接II6)摄像头模块ALIENTEKOV7670摄像头模块在41.1节已经有详细介绍过,这里我们主耍介绍该模块与ALIETEK战舰STM32开发板的连接。在开发板的左卜角的驴9的P8排座,是摄像头模块/OLED模块共用接II,在第十

19、七章,我们曾简单介绍过这个接II本章,我们只需要将ALIENTEKOV7670摄像头模块插入这个接11即可,该接口与STM32的连接关系如图41.2.1所示:OVDOPCX)26OVDIPCI27OVD2PC228OVD3PC329OVE4PC444OVD5PCS45OVD6PC696OVD7PC797JOYLAToDIvDOPTS-198|OVSCLPD3117PLH118PDS119IfifowrstPD6|12210丄spuyiirnz加FIFOWENJTDOPB3133FIFORCLKJTRSTPB4134VbMOblailMOblPA/43PA8|100UbAKllIXPAy101T

20、TCAPT1PVdammoPCOADC123_IN10PC1/ADC123_IN11PC2ADC123_IN12PC3/ADC123_IN13PC4/ADC12_EsI14PC5/ADC12.IN15PC6I2S2_MKTIM(PC7.,I2S3_MCKTIM(PD2/llM3_mK/UAiPD3/FSMC1CLKPD4FSMC_N0EPD5.FSMC_NWEPD6FSMCNWAITPB2B00T1PB3JTDOTRAPB4JNTRSI7SFPA7/SPI1_MOSLTINKPA8/USAkTl_CKTIKPA9/USART1TXTIN12(PG13OVSDA12GPIO_InitStruct

21、ure.GPIO_Speed=GPIO_Speed_50MHz,GPIO_Init(GPIOA,&GPIO_InitStmcture),GPIO_InitStructure.GPIO_Pin=GPIO_Pin_3|GPIO_Pin_4,端丨I配置GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP,推挽输出GPIO_Init(GPIOB,&GPIOInitStiucture),GPIO_SetBits(GPIOB,GPIO_Pin_3|GPIO_Pin_4); # STM32开发指南AII三ZT三IGPIO_InitStructure.GPIOPin=Ox

22、ff,/PCO-7输入上拉GPIO_InitStructure.GPIO_Mode=GPIO_Mode_LPU,GPIO_Init(GPIOC,&GPIOJnitStructure),GPIO_InitStructure.GPIO_Pin=GPIO_Pin_6,GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP,GPIO_Init(GPIOD,&GPIOJnitStructure),GPIO_SetBits(GPIOD,GPIO_Pin_6),GPIO_InitStructure.GPIO_Pin=GPIO_Pin4|GPIO_Pin_l5,GPIO_I

23、nitStructure.GPIO_Mode=GPIO_Mode_Out_PP,GPIO_Init(GPIOG,&GPIOJnitStructurejGPIO_SetBits(GPIOG,GPIO_Pin_14|GPIO_Pin_15),GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE),/SWDSCCB_InitO,初始化SCCB的IOl-lif(SCCB_WR_Reg(0 xl2,0 x80)retum1,复位SCCBdelay_ms(50),读矗品型号temp=SCCE_RD_Reg(OxOb);if(temp!=0 x73)re

24、tum2,temp=SCCE_RD_Reg(Ox0a);if(temp!=0 x76)retum2,初始化序列for(i=0,isizeof(ov767O_imt_reg_tbl)/sizeof(ov767O_init_reg_tb10)/2,i+)SCCB_WR_Reg(ov767O_init_reg_tbli0,ov767O_init_reg_tblil),delay_ms(2);return0 x00,/ok此部分代码先初始化OV7670相关的IOI1(包SCCB_Init),然后最主要的是完成OV7670的寄存器序列初始化。OV7670的寄存器特多(百几十个),配置特麻烦,幸好厂家有提

25、供参考配置序列(详见OV7670softwareapplicationnote),本章我们用到的配置序列,存放在ov7670_imt_reg_tb1这个数组里面,该数组是一个2维数组,存储初始化序列寄存器及其対应的值,该数组存放在ov7670cfg.h里面。接卜來,我们看看ov7670cfg.h里面ov7670_init_reg_tbl的内容,ov7670cfgh件的代码如下:初始化寄存器序列及其对应的值constu8ov7670_init_reg_tb12=/*以F为OV7670QVGARGB565参数/STM32开发指南ALENTHSTM32开发指南ALENTH 0 x3a,0 x04,/

26、0 x40,0 x10,0 x12,0 x14,/QVGA,RGB输出省略部分设置0 x6e,OxllV/lOO0 x6f,0 x9f,/0 x9eforadvanceAWB0 x55,0 x00,亮度0 x56,0 x40对比度0 x57,0 x80,/0 x40,changeaccordingtoJimsrequest,以上代码,我们省略了很多(全部贴出來A长了),我们人概了解卜结构,每个条目的第一个字节为寄存器号(也就是寄存器地址),第二个字节为要设置的值,比如0 x3a,0 x04,就表示在0X03地址,写入0X04这个值。通过这么一长串(110多个)寄存器的配置,我们就完成了OV76

27、70的初始化,本章我们配置OV7670工作在QVGA模式,RGB565格式输出。在完成初始化Z后,我们既可以开始读取OV7670的数据了。OV7670文件夹里面的其他代码我们就不逐个介绍了,请人家参考光盘该例程源码。因为本章我们还用到了帧率(LCD显示的帧率)统计和中断处理,所以我们还需要修改timertimer.h、exti.c及extih这儿个文件。在timer.c里面,我们新增和TIM6_IRQHandler两个函数,用丁统计帧率,增加代码如下:u8ov_fi*ame,统计帧数定时器6中断服务程序voidTIM6_IRQHandler(void)ifCHM_GetITStatusCriM

28、6,TIM_rr_Update)!=RESET)更新中断发生LED1=!LED1,pnntf(Bf?ame,ov_fi*ame),打印帧率ov_fiame=0,TM_ClearITPendingBit(TM6,TIM_IT_Update),/清中断标志位基本定时器6中断初始化这里时钟选择为APB1的2倍,而APB1为36M/an:自动重装值。/psc:时钟预分频数/这里使用的是定时器3!voidTIM6_Int_Init(ul6air,ul6psc)TIM_TimeBaselnitTypeDefTM_TimeBaseSfancture,NVIC_InitTypeDefNVIC_InitStmc

29、ture,RCC_APElPenphClockCmd(RCC_APBlPeriph_TIM6,ENABLE),/时钟使能STM32开发指南AIEN1TH #STM32开发指南AUENTS1HTIMTimeBaseStructure.TMPeriod=an;/自动重装载周期值TM_TimeBaseStructure.TMJPrescaler=psc,预分频值TIM_TimeBaseStructure.TIM_ClockDivon=0,设置时钟分割:TDTS=Tck_timTM_TimeBaseStructure.TM_CounteiMode=TIM_CounterMode_Up,/向上计数模式T

30、M_TimeBaseInit(TM6,&TIM_TimeBaseStmcture);根据指定的参数初始化TIMxTM_ITConfig(TIM6;riM_IT_Update|TIM_rr_T门ggei:ENABLE),使能更新触发中断TM_Cmd(TM6,ENABLE),使能TIMx外设NVIC_ImtStructureNVIC_IRQChannel=TIM6_IRQn,/TIM3中断NVIC_InitStructureNVIC_IRQChannelPreerrq)tionP门onty=1,先占优先级0级NVIC_ImtStructureNVIC_IRQChannelSubP门onty=3;从

31、优先级3级NVIC_InitStructureNVIC_IRQChannelCmd=ENABLE,/IRQ通道被使能NVIC_Init(&NVIC_ImtStructure),/根据指定的参数初始化外设NVIC寄存器这里,我们用到基本定时器TIM6来统计帧率,也就是1秒钟中断一次,打印ov_frame的值,ov_frame用于统计LCD帧率。再在tunerh里而添加TIM6_Int_Imt函数的定义,就完成对timerc和timer.h的修改了。在extic里面添加EXTI8_Imt和EXTI9_5_IRQHandler函数,用TOV7670模块的FIFO写控制,extic文件新增部分代码如卜

32、1/ov_sta:0,开始一帧数据采集u8ov_sta,外部中断59服务程序voidEXTI9_5_IRQHandler(void)if(EXTI_GetrrStatus(EXTI_Line8)=SET)/是8线的中断if(ov_sta2)if(ov_sta=0)复位写指针允许写入FIFO禁止写入FIFO复位写指针OV7670_WRST=0,OV7670_WRST=1;OV7670_WREN=1,elseOV7670_WREN=0,OV7670_WRST=0,OV7670_WRST=1;ov_sta+,STM32开发指南AIEN1TH EXTI_ClearITPendingBitCEXTI_L

33、ine8);清除EXTI8线路挂起位外部中断8初始化voidEXTI8_Init(void)EXTI_InitTypeDefEXTI_InitStmcture,NVIC_InitTypeDefNVIC_InitSticture,GPIO_EXTILineConfig(GPIO-PortSourceGPIOA,GPIO-PinSource8),/PA8对中断线8EXTIInitSfaucture.EXTILine=EXTILineS,EXTI_InitStructure.EXTI_Mode=EXTI_Mode_Intenupt,EXTI_InitSfaxicture.EXTI_Tnggei=EX

34、TI_Tngger_Rising,EXTI_InitStructure.EXTI_LineCmd=ENABLE,EXTI_Init(&EXTI_InitStructure);/根据指定的参数初始化外设EXTI寄存器NVIC_InitStructureNVIC_IRQChannel=EXTI9_5_IRQn,使能所在的外部中断通道NVICitSti-uctureNVIC_IRQChannelPreenptionPiiority=0,抢占优先级0NVIC_InitStiuctureNVIC_IRQChannelSubPnonty=0;子优先级0NVIC_InitStructureNVIC_IRQC

35、hannelCmd=ENABLE,使能外部中断通道NVIC_Init(&NVIC_ImtStructure),根据指定的参数初始化外设NVIC寄存器因为OV7670的帧同步信号(OV_VSYNC)接在PA8上面,所以我们这里配置PA8作为中端输入,因为STM32的外部中断59共用一个中端服务函数(EXTI9_5_IRQHandler),所以在该函数里面,我们需要先判断中断是不是来自中断线8的,然后再做处理。中断处理部分很简单,通过一个ov_sta来控制OV7670模块的FIFO写操作。当ov_sta=0的时候,表示HF0存储的数据已经被丿应功读取了(ov_sta在读完FIFO数据的时候被清零)

36、,然后只要OV_VSYNC信号到來,我们就先复位一卞写指针,然后ov_sta=l,标志着写指针已经复位,目前正在往FIFO里面写数据。再等卜-一个OV_VSYNC到來,也就表明一帧数据已经存储完毕了,此时我们设置OV7670_WREN为0,禁止再往OV7670写入数据,此时ov_sta自增为2。其他程序,只要读到ov_sta为2,就表示一帧数据已经准备好了,可以读出,玉读完数据Z后,程序设置ov_sta为0,则开启下一轮FIFO数据存储。再在exti.h里面添加EXTI8_Init函数的定义,就完成对exti.c和extih的修改了。最后,打开main.c文件,代码如F:constu8*LK1

37、0DE_TBL5=11Auto.Sunny,11Cloudy.Office.Home;/5种光照模式constu8*EFFECTS_TBL7=Nonnal/Negative,B&W/Redish,-GreenishBluish,Antique;/7种特效externu8ov_sta,/在exite里面定义externu8ov_fi*ame,在timeic里面定义STM32开发指南AIEN1TH STM32开发指南AII三ZI三I更新LCD显示voidcamera_refbesh(void)u32j;ul6color,if(ov_sta=2)LCD_Scan_Dir(U2D_L2R);从上到下,

38、从左到右LCD_SetCursor(OxOO,0 x0000);设置光标位置LCD_WiiteRAM_PrepareO,开始写入GRAMOV7670_RRST=0,开始复位读指针OV7670_RCK=0,OV7670_RCK=1;OV7670_RCK=0,OV7670_RRST=1,复位读指针结束OV7670_RCK=1;for(j=0,jIDR&0XFF;读数据OV7670_RCK=1;color=8OV7670_RCK=0,color|=GPIOC-IDR&0XFF,读数据OV7670_RCK=1;LCD-LCD_RAM=color,EXTI_CleaiiTPendmgBit(EXTI_L

39、ine8),清除LINE8上的中断标志位ov_sta=0,开始下一次采集ov_f?ame+,LCD_Scan_Dir(DFT_SCAN_DIR),恢复默认扫描方向intmain(void)u8key,u8lightmode=0,saturation=2,bnghtness=2,confaast=2,u8effect=O,u81=0;u8msgbuf15;消息缓存区u8tm=0,STM32开发指南AIEN1TH # delay_imt(X延时函数初始化NVIC_ConfigurationO,设置NVIC中断分组22位抢占优先级,2位响应优先级uart_init(9600);LEDJnitQLCD

40、JhitaKEYJhitaTPAD_Init(72),串II初始化为9600/LED端I1初始化触摸按键初始化POINT_COLOR=RED设置字体为红色LCD_ShowString(60,50,200,16,16/WarShipSTM32-);LCD_ShowString(60,70:00,16,16,OV7670TEST),LCD_Shov/Stiing(60,90,200,16,16,ATOMALZENTEKH),LCD_ShowString(60,l10,200,16,16,112012/9/1*);LCD_ShowString(60,l30,200,16,16,11KEY0:Ligh

41、tMode);LCD_ShowString(6050,200,16,16,KEY1:Satuiation1),LCD_Shov/Stiing(60,170,200,16,16,KEY2:Bnghtness,)LCD_ShowStnng(60,l90,200,16,16,KEYJJRContrast”);LCD_ShowString(60,210,2006,16,TPADEffects11);LCD_ShowString(60,230,200,16,16OV7670Initwhile(OV7670_InitO)初始化OV7670LCD_ShovzStiing(60,230,200,16,16,O

42、V7670Error!),delay_ms(200);LCD_Fill(60,230:32246,WHTTE),delay_ms(200);LCD_Shov/Stiing(60,230,200,16,16,OV7670InitOK1),delay_ms(1500)”OV7670_Light_Mode(lightmode),OV7670_Color_Saturation(saturation);OV7670_Bnghtness(bnghtness),OV7670_Contrast(contrast)OV7670_Special_Effects(effect);TIM6_Int_Init(l0000,7199);/lOKhz计数频率秒钟中断EXTI8_InitO,使能定时器捕获OV7670_Window_Set(10,174,240,320),/设置窗I丨OV7670_CS=0,while(l)key=KEY_Scan(0)不支持连按if(key)STM32开发指南Al_enthSTM32开发指南Auenth STM32开发指南Alenth tm=20,switch(key)caseKEY_RIGHT:灯光模式LightModelightm

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论