版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、 #第四十STM32開發(fā)指南Alj三zr三i # # # #ALIENTEK戰(zhàn)艦STM32開發(fā)板板載了一個(gè)攝像頭接I丨(P8),該接1丨可以用來連接ALIENTEKOV7670攝像頭模塊。本章,我們將使用STM32驅(qū)動(dòng)ALIENTEKOV7670攝像頭模塊,實(shí)現(xiàn)攝像頭功能。本章分為如下幾個(gè)部分:41.1OV7670簡介41.2硬件設(shè)計(jì)41.3軟件設(shè)計(jì)41.4下載驗(yàn)證STM32開發(fā)指南AlSTM32開發(fā)指南Al # 41.1OV7670簡介OV7670是OV(OmniVision)公司生產(chǎn)的一顆1/6寸的CMOSVGA圖像傳感器。該傳感器體積小、工作電壓低,提供單片VGA攝像頭和影像處理器的所有
2、功能。通過SCCB總線控制,可以輸出整幀、子采樣、取窗II等方式的各種分辨率8位影像數(shù)據(jù)。該產(chǎn)品VGA圖像最高達(dá)到30幀/秒。用戶叫以完全控制圖像質(zhì)最、數(shù)據(jù)格式和傳輸方式。所有圖像處理功能過程包括伽瑪曲線、白平衡、度、色度等都可以通過SCCB接LI編程。OmmiVision圖像傳感器應(yīng)用獨(dú)有的傳感器技術(shù),通過減少或消除光學(xué)或電子缺陷如固定圖案噪聲、托尾、浮散等,提高圖像質(zhì)量,得到清晰的穩(wěn)定的彩色圖像。OV7670的特點(diǎn)有:高靈敏度、低電壓適合嵌入式應(yīng)用標(biāo)準(zhǔn)的SCCB接II,兼容IIC接II支持RawRGB、RGB(GBR422,RGB565/RGB555/RGB444),YUV(422)和YC
3、bCr(4:2:2)輸出格式支持VGA、CIF,和從CIF到40*30的各種尺寸輸出支持自動(dòng)曝光控制、自動(dòng)增益控制、自動(dòng)白平衡、自動(dòng)消除燈光條紋、自動(dòng)黑電平校準(zhǔn)等自動(dòng)控制功能。同時(shí)支持色飽和度、色相、伽馬、銳度等設(shè)置。支持閃光燈支持圖像縮放OV7670的功能框圖圖如圖41.1.1所示:1感光整列(ImageArrayOV7670總共有656*488個(gè)像素,其中640*480個(gè)有效(即有效像素為30W)。時(shí)序發(fā)生器(VideoTimingGenerator)時(shí)序發(fā)生器具有的功能包括:整列控制和幀率發(fā)生(7種不同格式輸出)、內(nèi)部信號(hào)發(fā)生器 STM32開發(fā)指南AL_ENrH和分布、幀率時(shí)序、自動(dòng)曝光
4、控制、輸出外部時(shí)序(VSYNC、HREF/HSYNC和PCLK)。模擬信號(hào)處理(AnalogProcessing)模擬信號(hào)處理所有模擬功能,并包括:自動(dòng)增益(AGC)和自動(dòng)白平衡(AWB)。A/D轉(zhuǎn)換(A/D)原始的信號(hào)經(jīng)過模擬處理器模塊Z后,分G和BR兩路進(jìn)入一個(gè)10位的A/D轉(zhuǎn)換器,A/D轉(zhuǎn)換器工作在頻率,與像素頻率完全同步(轉(zhuǎn)換的頻率和幀率有關(guān))。除A/D轉(zhuǎn)換器外,該模塊還有以下三個(gè)功能:黑電平校正(BLC)U/V通道延遲A7D范圍控制A/D范Fl;l乘積和A/D的范圍控制共同設(shè)置AZD的范圍和最人值,允許用戶根據(jù)應(yīng)用調(diào)整圖片的亮度。測(cè)試圖案發(fā)生器(TestPatternGenerato
5、r)測(cè)試圖案發(fā)生器功能包括:八色彩色條圖案、漸變至黑白彩色條圖案和輸出腳移位“1”。6數(shù)字處理器(DSP)這個(gè)部分控制由原始信號(hào)插值到RGB信號(hào)的過程,并控制一些圖像質(zhì)帚:邊緣銳化(二維高通濾波器)顏色空間轉(zhuǎn)換(原始信號(hào)到RGB或者YUV/YCbYCr)RGB色彩矩陣以消除串?dāng)_色相和飽和度的控制黑/白點(diǎn)補(bǔ)償降噪鏡頭補(bǔ)償可編程的伽嗎十位到八位數(shù)據(jù)轉(zhuǎn)換7.縮放功能(ImageScaler)這個(gè)模塊按照預(yù)先設(shè)置的要求輸出數(shù)據(jù)格式,能將YUVZRGB信號(hào)從VGA縮小到CIF以下的任何尺寸。8數(shù)字視頻接口(DigitalVideoPort)通過寄存器COM21:0,調(diào)節(jié)IOL/IOH的驅(qū)動(dòng)電流,以適應(yīng)用
6、戶的負(fù)載。9.SCCB接口(SCCBInterface)SCCB接II控制圖像傳感器芯片的運(yùn)行,詳細(xì)使用方法參照光盤的0mniVisionTechnologiesSeiilCameraContiolBus(SCCB)Specification這個(gè)文檔10.LED和閃光燈的輸出控制(LEDandStorbeFlashControlOutput)OV7670有閃光燈模式,可以控制外接閃光燈或閃光LED的工作。OV7670的寄存器通過SCCB時(shí)序訪問并設(shè)置,SCCB時(shí)序和UC時(shí)序十分類似,在本章我們不做介紹,請(qǐng)大家參考光盤的相關(guān)文檔。接下來我們介紹一下OV7670的圖像數(shù)據(jù)輸出格式。首先我們簡單介紹
7、幾個(gè)定義:VGA,即分辨率為640*480的輸出模式;QVGA,即分辨率為320*240的輸出格式,也就是本章我們需要用到的格式;QQVGA,即分辨率為160*120的輸岀格式;PCLK,即像素時(shí)鐘,一個(gè)PCLK時(shí)鐘,輸出一個(gè)像素(或半個(gè)像素)。VSYNC,即幀同步信號(hào)。STM32開發(fā)指南Al_ENTS:HHREF/HSYNC,即行同步信號(hào)。OV7670的圖像數(shù)據(jù)輸出(通過D70)就是在PCLK,VSYNC和HREF/HSYNC的控制卜進(jìn)行的。首先看看行輸出時(shí)序,如圖41.1.2所示: # #圖41.1.2OV7670行輸出時(shí)序從上圖可以看出,圖像數(shù)據(jù)在HREF為高的時(shí)候輸岀,當(dāng)HREF變高后
8、,每一個(gè)PCLK時(shí)鐘,輸出一個(gè)字節(jié)數(shù)據(jù)。比如我們采用VGA時(shí)序,RGB565格式輸出,每2個(gè)字節(jié)組成一個(gè)像素的顏色(高字節(jié)在前,低字節(jié)在后),這樣每行輸出總共有640七個(gè)PCLK周期,輸出640*2個(gè)字節(jié)。再來看看幀時(shí)序(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幀時(shí)序上圖清楚的表示了OV7670在VGA模式卜的數(shù)據(jù)輸出,注意,圖中的HSYNC和HREF其實(shí)是同一個(gè)引腳產(chǎn)生的信號(hào),只是在不同場(chǎng)合卜而,使用不同的信號(hào)方式,我們本章用到的是HREF.因?yàn)镺V7670的像素時(shí)鐘(PCLK)最高可達(dá)24Mhz,我們用STM32F103ZET6的IOII直接抓取,是非常困難的,也十分占耗CPU(可以通過降低PCLK輸出頻率,來實(shí)現(xiàn)IOII抓取,7101718 #7101718 STM32開發(fā)指南i_EZri但是不推薦)。所以,本章我們并不是采取直接抓取來自O(shè)V7670的數(shù)據(jù),而是通過FIFO
10、讀取,ALIENTEKOV7670攝像頭模塊自帶了一個(gè)FIFO芯片,用于暫存圖像數(shù)據(jù),冇了這個(gè)芯片,我們就可以很方便的獲取圖像數(shù)據(jù)了,而不再需耍單片機(jī)具有高速IO,也不會(huì)耗費(fèi)多少CPU,可以說,只要是個(gè)單片機(jī),都可以通過ALIENTEKOV7670攝像頭模塊實(shí)現(xiàn)拍照的功能。接卜來我們介紹一下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開發(fā)指南ALEZTEI從上圖可以看出,ALIENTEKOV7670攝像頭模塊自帶了有源晶振,用丁產(chǎn)生12M時(shí)鐘作為OV7670的XCLK輸入。同時(shí)自帶了穩(wěn)壓芯片,用于提供OV7670穩(wěn)定的2.8V工作電壓,并帶有一個(gè)HFO芯片(AL4HB),該FIFO芯片的容杲是384K字節(jié),足夠存儲(chǔ)2幀QVGA的圖像數(shù)據(jù)。模塊通過一個(gè)2*9的雙排排針(P1)與外部通信,與外部的通信信號(hào)如表411.1所示:信號(hào)作用描述信號(hào)作用描述VCC3.3模塊供電腳,接3.3V電源FIFOWENFIFO寫使能GND模塊地線FIFOWRSTFIFO寫指針復(fù)位OVSCLS
14、CCB通信時(shí)鐘信號(hào)FIFORRSTFIFO讀指針復(fù)位OVSDASCCB通信數(shù)據(jù)信號(hào)FIFOOEFIFO輸出使能(片選)FIF0D7:0FIFO輸出數(shù)據(jù)(8位)OVVSYNC0V7670幀同步信號(hào)FIFORCLK讀FIFO時(shí)鐘表411.1OV7670模塊信號(hào)及其作用描述卜面我們來看看如何使用ALIENTEKOV7670攝像頭模塊(以QVGA模式,RGB565格式為例)。對(duì)于該模塊,我們只關(guān)心兩點(diǎn):1,如何存儲(chǔ)圖像數(shù)據(jù);2,如何讀取圖像數(shù)據(jù)。首先,我們來看如何存儲(chǔ)圖像數(shù)據(jù)。ALIENTEKOV7670攝像頭模塊存儲(chǔ)圖像數(shù)據(jù)的過程為:等待OV7670同步信號(hào)TFIFO寫指針復(fù)位TFIFO寫使能T等待
15、第二個(gè)OV7670同步信號(hào)TFIFO寫禁止。通過以上5個(gè)步驟,我們就完成了1幀圖像數(shù)據(jù)的存儲(chǔ)。接下來,我們來看看如何讀取圖像數(shù)據(jù)。在存儲(chǔ)完一幀圖像以后,我們就可以開始讀取圖像數(shù)據(jù)了。讀取過程為:FIFO讀指針復(fù)位T給FIFO讀時(shí)鐘(FIFO_RCLK)T讀取第一個(gè)像素高字節(jié)T給FIFO讀時(shí)鐘T讀取第一個(gè)像素低字節(jié)T給FIFO讀時(shí)鐘T讀取第二個(gè)像素高字節(jié)T循壞讀取剩余像素T結(jié)束??梢钥闯?,ALIENTEKOV7670攝像頭模塊數(shù)據(jù)的讀取也是十分簡單,比如QVGA模式,RGB565格式,我們總共循壞讀取320*240*2次,就可以讀取1幀圖像數(shù)據(jù),把這些數(shù)據(jù)寫入LCD模塊,我們就可以看到攝像頭捕捉
16、到的畫面了。OV7670還可以對(duì)輸出圖像進(jìn)行各種設(shè)置,詳見光盤OV7670中文數(shù)據(jù)手冊(cè)1.01和0V7670softwareapplicationnote這兩個(gè)文檔,對(duì)AL422B的操作時(shí)序,請(qǐng)人家參考AL422B的數(shù)據(jù)手冊(cè)。了解了OV7670模塊的數(shù)據(jù)存儲(chǔ)和讀取,我們就可以開始設(shè)計(jì)代碼了,本章,我們用一個(gè)外部中斷,來捕捉幀同步信號(hào)(VSYNC),然后在中斷里面啟動(dòng)OV7670模塊的圖像數(shù)據(jù)存儲(chǔ),等待下一次VSHNC信號(hào)到來,我們就關(guān)閉數(shù)據(jù)存儲(chǔ),然后一幀數(shù)據(jù)就存儲(chǔ)完成了,在主函數(shù)里面就可以慢慢的將這一幀數(shù)據(jù)讀出來,放到LCD即可顯示了,同時(shí)開始第二幀數(shù)據(jù)的存儲(chǔ),如此循壞,實(shí)現(xiàn)攝像頭功能。本章,
17、我們將使用攝像頭模塊的QVGA輸出(320*240),剛好和戰(zhàn)艦STM32開發(fā)板使用的LCD模塊分辨率一樣,一幀輸出就是一屏數(shù)據(jù),提高速度的同時(shí)也不浪費(fèi)資源。注意:ALIENTEKOV7670攝像頭模塊自帶的FIFO是沒辦法緩存T貞的VGA圖像的,如果使用VGA輸岀,那么你必須在FIFO寫滿Z前開始讀FIFO數(shù)據(jù),保證數(shù)據(jù)不被覆蓋。41.2硬件設(shè)計(jì)本章實(shí)驗(yàn)功能簡介:開機(jī)后,初始化攝像頭模塊(OV7670),如果初始化成功,則在LCD #STM32開發(fā)指南Lj三ZTI模塊上面顯示攝像頭模塊所拍攝到的內(nèi)容。我們可以通過KEYO設(shè)置光照模式(5種模式)、通過KEY1設(shè)置色飽和度,通過KEY2設(shè)置亮度
18、,通過WK_UP設(shè)置對(duì)比度,通過TPAD設(shè)置特效(總共7種特效)。通過串II,我們可以查看當(dāng)前的幀率(這里是指LCD顯示的幀率,而不是指OV7670的輸出幀率),同時(shí)可以借助USMART設(shè)置OV7670的寄存器,方便人家調(diào)試。DSO指示程序運(yùn)行狀態(tài)。本實(shí)驗(yàn)用到的碩件資源有:1)指示燈DSO2)5個(gè)按鍵(包括TPAD觸撓按鍵)3)串口4)TFTLCD模塊5)攝像頭模塊接II6)攝像頭模塊ALIENTEKOV7670攝像頭模塊在41.1節(jié)已經(jīng)有詳細(xì)介紹過,這里我們主耍介紹該模塊與ALIETEK戰(zhàn)艦STM32開發(fā)板的連接。在開發(fā)板的左卜角的驢9的P8排座,是攝像頭模塊/OLED模塊共用接II,在第十
19、七章,我們?cè)唵谓榻B過這個(gè)接II本章,我們只需要將ALIENTEKOV7670攝像頭模塊插入這個(gè)接11即可,該接口與STM32的連接關(guān)系如圖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開發(fā)指南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,復(fù)位SCCBdelay_ms(50),讀矗品型號(hào)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相關(guān)的IOI1(包SCCB_Init),然后最主要的是完成OV7670的寄存器序列初始化。OV7670的寄存器特多(百幾十個(gè)),配置特麻煩,幸好廠家有提
25、供參考配置序列(詳見OV7670softwareapplicationnote),本章我們用到的配置序列,存放在ov7670_imt_reg_tb1這個(gè)數(shù)組里面,該數(shù)組是一個(gè)2維數(shù)組,存儲(chǔ)初始化序列寄存器及其対應(yīng)的值,該數(shù)組存放在ov7670cfg.h里面。接卜來,我們看看ov7670cfg.h里面ov7670_init_reg_tbl的內(nèi)容,ov7670cfgh件的代碼如下:初始化寄存器序列及其對(duì)應(yīng)的值constu8ov7670_init_reg_tb12=/*以F為OV7670QVGARGB565參數(shù)/STM32開發(fā)指南ALENTHSTM32開發(fā)指南ALENTH 0 x3a,0 x04,/
26、0 x40,0 x10,0 x12,0 x14,/QVGA,RGB輸出省略部分設(shè)置0 x6e,OxllV/lOO0 x6f,0 x9f,/0 x9eforadvanceAWB0 x55,0 x00,亮度0 x56,0 x40對(duì)比度0 x57,0 x80,/0 x40,changeaccordingtoJimsrequest,以上代碼,我們省略了很多(全部貼出來A長了),我們?nèi)烁帕私獠方Y(jié)構(gòu),每個(gè)條目的第一個(gè)字節(jié)為寄存器號(hào)(也就是寄存器地址),第二個(gè)字節(jié)為要設(shè)置的值,比如0 x3a,0 x04,就表示在0X03地址,寫入0X04這個(gè)值。通過這么一長串(110多個(gè))寄存器的配置,我們就完成了OV76
27、70的初始化,本章我們配置OV7670工作在QVGA模式,RGB565格式輸出。在完成初始化Z后,我們既可以開始讀取OV7670的數(shù)據(jù)了。OV7670文件夾里面的其他代碼我們就不逐個(gè)介紹了,請(qǐng)人家參考光盤該例程源碼。因?yàn)楸菊挛覀冞€用到了幀率(LCD顯示的幀率)統(tǒng)計(jì)和中斷處理,所以我們還需要修改timertimer.h、exti.c及extih這兒個(gè)文件。在timer.c里面,我們新增和TIM6_IRQHandler兩個(gè)函數(shù),用丁統(tǒng)計(jì)幀率,增加代碼如下:u8ov_fi*ame,統(tǒng)計(jì)幀數(shù)定時(shí)器6中斷服務(wù)程序voidTIM6_IRQHandler(void)ifCHM_GetITStatusCriM
28、6,TIM_rr_Update)!=RESET)更新中斷發(fā)生LED1=!LED1,pnntf(Bf?ame,ov_fi*ame),打印幀率ov_fiame=0,TM_ClearITPendingBit(TM6,TIM_IT_Update),/清中斷標(biāo)志位基本定時(shí)器6中斷初始化這里時(shí)鐘選擇為APB1的2倍,而APB1為36M/an:自動(dòng)重裝值。/psc:時(shí)鐘預(yù)分頻數(shù)/這里使用的是定時(shí)器3!voidTIM6_Int_Init(ul6air,ul6psc)TIM_TimeBaselnitTypeDefTM_TimeBaseSfancture,NVIC_InitTypeDefNVIC_InitStmc
29、ture,RCC_APElPenphClockCmd(RCC_APBlPeriph_TIM6,ENABLE),/時(shí)鐘使能STM32開發(fā)指南AIEN1TH #STM32開發(fā)指南AUENTS1HTIMTimeBaseStructure.TMPeriod=an;/自動(dòng)重裝載周期值TM_TimeBaseStructure.TMJPrescaler=psc,預(yù)分頻值TIM_TimeBaseStructure.TIM_ClockDivon=0,設(shè)置時(shí)鐘分割:TDTS=Tck_timTM_TimeBaseStructure.TM_CounteiMode=TIM_CounterMode_Up,/向上計(jì)數(shù)模式T
30、M_TimeBaseInit(TM6,&TIM_TimeBaseStmcture);根據(jù)指定的參數(shù)初始化TIMxTM_ITConfig(TIM6;riM_IT_Update|TIM_rr_T門ggei:ENABLE),使能更新觸發(fā)中斷TM_Cmd(TM6,ENABLE),使能TIMx外設(shè)NVIC_ImtStructureNVIC_IRQChannel=TIM6_IRQn,/TIM3中斷NVIC_InitStructureNVIC_IRQChannelPreerrq)tionP門onty=1,先占優(yōu)先級(jí)0級(jí)NVIC_ImtStructureNVIC_IRQChannelSubP門onty=3;從
31、優(yōu)先級(jí)3級(jí)NVIC_InitStructureNVIC_IRQChannelCmd=ENABLE,/IRQ通道被使能NVIC_Init(&NVIC_ImtStructure),/根據(jù)指定的參數(shù)初始化外設(shè)NVIC寄存器這里,我們用到基本定時(shí)器TIM6來統(tǒng)計(jì)幀率,也就是1秒鐘中斷一次,打印ov_frame的值,ov_frame用于統(tǒng)計(jì)LCD幀率。再在tunerh里而添加TIM6_Int_Imt函數(shù)的定義,就完成對(duì)timerc和timer.h的修改了。在extic里面添加EXTI8_Imt和EXTI9_5_IRQHandler函數(shù),用TOV7670模塊的FIFO寫控制,extic文件新增部分代碼如卜
32、1/ov_sta:0,開始一幀數(shù)據(jù)采集u8ov_sta,外部中斷59服務(wù)程序voidEXTI9_5_IRQHandler(void)if(EXTI_GetrrStatus(EXTI_Line8)=SET)/是8線的中斷if(ov_sta2)if(ov_sta=0)復(fù)位寫指針允許寫入FIFO禁止寫入FIFO復(fù)位寫指針OV7670_WRST=0,OV7670_WRST=1;OV7670_WREN=1,elseOV7670_WREN=0,OV7670_WRST=0,OV7670_WRST=1;ov_sta+,STM32開發(fā)指南AIEN1TH EXTI_ClearITPendingBitCEXTI_L
33、ine8);清除EXTI8線路掛起位外部中斷8初始化voidEXTI8_Init(void)EXTI_InitTypeDefEXTI_InitStmcture,NVIC_InitTypeDefNVIC_InitSticture,GPIO_EXTILineConfig(GPIO-PortSourceGPIOA,GPIO-PinSource8),/PA8對(duì)中斷線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);/根據(jù)指定的參數(shù)初始化外設(shè)EXTI寄存器NVIC_InitStructureNVIC_IRQChannel=EXTI9_5_IRQn,使能所在的外部中斷通道NVICitSti-uctureNVIC_IRQChannelPreenptionPiiority=0,搶占優(yōu)先級(jí)0NVIC_InitStiuctureNVIC_IRQChannelSubPnonty=0;子優(yōu)先級(jí)0NVIC_InitStructureNVIC_IRQC
35、hannelCmd=ENABLE,使能外部中斷通道NVIC_Init(&NVIC_ImtStructure),根據(jù)指定的參數(shù)初始化外設(shè)NVIC寄存器因?yàn)镺V7670的幀同步信號(hào)(OV_VSYNC)接在PA8上面,所以我們這里配置PA8作為中端輸入,因?yàn)镾TM32的外部中斷59共用一個(gè)中端服務(wù)函數(shù)(EXTI9_5_IRQHandler),所以在該函數(shù)里面,我們需要先判斷中斷是不是來自中斷線8的,然后再做處理。中斷處理部分很簡單,通過一個(gè)ov_sta來控制OV7670模塊的FIFO寫操作。當(dāng)ov_sta=0的時(shí)候,表示HF0存儲(chǔ)的數(shù)據(jù)已經(jīng)被丿應(yīng)功讀取了(ov_sta在讀完FIFO數(shù)據(jù)的時(shí)候被清零)
36、,然后只要OV_VSYNC信號(hào)到來,我們就先復(fù)位一卞寫指針,然后ov_sta=l,標(biāo)志著寫指針已經(jīng)復(fù)位,目前正在往FIFO里面寫數(shù)據(jù)。再等卜-一個(gè)OV_VSYNC到來,也就表明一幀數(shù)據(jù)已經(jīng)存儲(chǔ)完畢了,此時(shí)我們?cè)O(shè)置OV7670_WREN為0,禁止再往OV7670寫入數(shù)據(jù),此時(shí)ov_sta自增為2。其他程序,只要讀到ov_sta為2,就表示一幀數(shù)據(jù)已經(jīng)準(zhǔn)備好了,可以讀出,玉讀完數(shù)據(jù)Z后,程序設(shè)置ov_sta為0,則開啟下一輪FIFO數(shù)據(jù)存儲(chǔ)。再在exti.h里面添加EXTI8_Init函數(shù)的定義,就完成對(duì)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開發(fā)指南AIEN1TH STM32開發(fā)指南AII三ZI三I更新LCD顯示voidcamera_refbesh(void)u32j;ul6color,if(ov_sta=2)LCD_Scan_Dir(U2D_L2R);從上到下,
38、從左到右LCD_SetCursor(OxOO,0 x0000);設(shè)置光標(biāo)位置LCD_WiiteRAM_PrepareO,開始寫入GRAMOV7670_RRST=0,開始復(fù)位讀指針OV7670_RCK=0,OV7670_RCK=1;OV7670_RCK=0,OV7670_RRST=1,復(fù)位讀指針結(jié)束OV7670_RCK=1;for(j=0,jIDR&0XFF;讀數(shù)據(jù)OV7670_RCK=1;color=8OV7670_RCK=0,color|=GPIOC-IDR&0XFF,讀數(shù)據(jù)OV7670_RCK=1;LCD-LCD_RAM=color,EXTI_CleaiiTPendmgBit(EXTI_L
39、ine8),清除LINE8上的中斷標(biāo)志位ov_sta=0,開始下一次采集ov_f?ame+,LCD_Scan_Dir(DFT_SCAN_DIR),恢復(fù)默認(rèn)掃描方向intmain(void)u8key,u8lightmode=0,saturation=2,bnghtness=2,confaast=2,u8effect=O,u81=0;u8msgbuf15;消息緩存區(qū)u8tm=0,STM32開發(fā)指南AIEN1TH # delay_imt(X延時(shí)函數(shù)初始化NVIC_ConfigurationO,設(shè)置NVIC中斷分組22位搶占優(yōu)先級(jí),2位響應(yīng)優(yōu)先級(jí)uart_init(9600);LEDJnitQLCD
40、JhitaKEYJhitaTPAD_Init(72),串II初始化為9600/LED端I1初始化觸摸按鍵初始化POINT_COLOR=RED設(shè)置字體為紅色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)”O(jiān)V7670_Light_Mode(lightmode),OV7670_Color_Saturation(saturation);OV7670_Bnghtness(bnghtness),OV7670_Contrast(contrast)OV7670_Special_Effects(effect);TIM6_Int_Init(l0000,7199);/lOKhz計(jì)數(shù)頻率秒鐘中斷EXTI8_InitO,使能定時(shí)器捕獲OV7670_Window_Set(10,174,240,320),/設(shè)置窗I丨OV7670_CS=0,while(l)key=KEY_Scan(0)不支持連按if(key)STM32開發(fā)指南Al_enthSTM32開發(fā)指南Auenth STM32開發(fā)指南Alenth tm=20,switch(key)caseKEY_RIGHT:燈光模式LightModelightm
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 工廠車間現(xiàn)場(chǎng)5培訓(xùn)
- 核安全風(fēng)險(xiǎn)辨識(shí)
- 數(shù)控車削加工技術(shù) 課件 項(xiàng)目七 端面切削工藝及編程
- (提升卷)第一單元 圓和扇形(單元測(cè)試)數(shù)學(xué)六年級(jí)上冊(cè)單元速記巧練系列(冀教版)學(xué)生版
- 福建省泉州市南安市2024-2025學(xué)年四年級(jí)上學(xué)期期中考試數(shù)學(xué)試題 - 副本
- T-XYTX 002-2024 黃桃標(biāo)準(zhǔn)化生產(chǎn)與基地建設(shè)
- 河北省衡水市武強(qiáng)中學(xué)2024-2025學(xué)年高三年級(jí)上學(xué)期期中考試英語試題 含解析
- 高中語文第3單元文藝評(píng)論和隨筆第9課說“木葉”課件新人教版必修
- 棄土場(chǎng)施工方案
- Windows Server網(wǎng)絡(luò)管理項(xiàng)目教程(Windows Server 2022)(微課版)10.5 拓展案例2 NAT端口映射
- 《人工智能基礎(chǔ)》課件-AI的前世今生:她從哪里來
- 3.2 代數(shù)式的值(第1課時(shí))(課件)-2024-2025學(xué)年七年級(jí)數(shù)學(xué)上冊(cè)(人教版2024)
- 血液透析高鉀血癥的護(hù)理查房
- ISO28000:2022供應(yīng)鏈安全管理體系
- 新北師大單元分析二上第六單元《測(cè)量》單元教材解讀
- 2023陜西中考英語試卷分析
- 2022-2023學(xué)年湖南省長沙市雅禮教育集團(tuán)八年級(jí)(上)期中數(shù)學(xué)試卷(含解析)
- 城鄉(xiāng)規(guī)劃基本術(shù)語標(biāo)準(zhǔn) - 中國城市規(guī)劃行業(yè)信息網(wǎng)
- 4×35000kva新型節(jié)能環(huán)保型高碳鉻鐵合金礦熱爐綜合利用項(xiàng)目環(huán)境影響評(píng)價(jià)報(bào)告書
- 初中英語語法課件[共240頁]
- 螺旋槳和艉軸拂配預(yù)裝安裝工藝
評(píng)論
0/150
提交評(píng)論