基于STM32的照相機系統(tǒng)的實現(xiàn)_第1頁
基于STM32的照相機系統(tǒng)的實現(xiàn)_第2頁
基于STM32的照相機系統(tǒng)的實現(xiàn)_第3頁
基于STM32的照相機系統(tǒng)的實現(xiàn)_第4頁
基于STM32的照相機系統(tǒng)的實現(xiàn)_第5頁
已閱讀5頁,還剩19頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

目錄第1章緒論 11.1研究背景與意義 21.2研究內(nèi)容 4第2章系統(tǒng)方案設計 42.1整體框架設計 42.2主控模塊 52.3液晶顯示模塊 122.4存儲器模塊 162.5圖像采集模塊 21第3章系統(tǒng)軟件設計 293.1頂層程序設計 293.2系統(tǒng)初始化程序設計 293.3拍照處理程序設計 32第4章系統(tǒng)功能測試分析 34總結 36參考文獻 37第1章緒論一幅圖像可以描述為“一個平面上與位置成函數(shù)關系的光強或反射率的變化〞。相機是一臺捕捉并記錄圖像的設備,其中“捕捉〞是指將一幅圖像中包含的信息轉換成相應的以可以重現(xiàn)的方式存儲的信號[1]。在傳統(tǒng)鹵化銀的相機中,圖像信息被轉換成膠片中的化學信號,并存儲在膠片中對應的點上。而現(xiàn)代的電子相機是通過圖像傳感器將捕捉到的圖像信號轉換成了電子信號,并將圖像信息存儲在內(nèi)存中。電子相機又根據(jù)存儲的方式不同,分為模擬相機和數(shù)碼相機。圖1.1數(shù)字系統(tǒng)圖像捕捉原理物鏡:聚焦圖像,折射來自物體的光線,使光線會聚成為一幅清晰的圖像;光圈:決定進入鏡頭的光量,通過光圈數(shù)值計量。光圈數(shù)值越大那么光圈開口越?。豢扉T:快門速度決定曝光時間長短,通常以一秒的十分之一計量??扉T速度越快那么曝光時間越短;CCD:光耦合組件。1.1研究背景與意義自1991年第一款商用數(shù)碼相機面市以來,數(shù)碼相機的性能有了極大的提高[2]。作為數(shù)碼相機的核心部件———感光元件CCD像素數(shù)已從初期的10幾萬開展到目前的2千萬以上,另一種感光元件CMOS在圖像質(zhì)量方面已經(jīng)根本上與CCD不相上下,因而在專業(yè)級數(shù)碼相機方面得到廣泛應用。變焦倍率已從2~3倍增加到10倍以上[2]。至于存儲器,不僅品種多,且存儲量已達8GB,數(shù)碼相機的功能也從單拍照開展到十機一體的多媒體拍照[3]。1.1.1電子相機的早期開展電子照相的設想由來已久,最早于1973年出現(xiàn)在著名的半導體制造商德州儀器公司〔TexasInstrumentsIncorporated〕提出的一項專利申請。在實施方案中,半導體圖像傳感器位于可伸縮鏡頭前方,其捕捉的圖像信號被傳輸?shù)诫姶庞涗涱^,并存儲到一個可移動的環(huán)形磁鼓中。然而由于1973年傳感器技術與磁記錄技術還在起步階段,該想法并沒有付諸在真正的產(chǎn)品之中。直到1981年,這一年對于相機制造商而言是極其重要的一年,索尼公司發(fā)布了一款電子相機的原型,被稱為“Mavica〞。這種原型相機將半導體圖像傳感器捕獲到的圖像信號記錄在磁性軟盤上,包含有單鏡頭反光式取景器、CCD圖像傳感器、信號處理電路和軟盤驅(qū)動器。但是記錄到軟盤上的圖像信號是一種改進的視頻信號,屬于模擬信號,故它并非是一款完整意義上的數(shù)碼相機。在索尼Mavica發(fā)布后,數(shù)家相機制造商和電子設備制造商組成了聯(lián)盟來推進索尼的設想。他們建立了一套電子照相系統(tǒng)的標準,名為“靜態(tài)視頻系統(tǒng)〞。但由于此系統(tǒng)基于NTSC的視頻格式,圖像的畫質(zhì)不是太好,鏡頭相機的使用只被局限在無須紙質(zhì)打印的小應用之中。圖1.2索尼Mavica〔原型〕1.1.2數(shù)碼相機的出現(xiàn)隨著數(shù)字技術的進步,模擬電子相機向數(shù)字化過渡,在1988年的世界影像貿(mào)易博覽會上,第一臺數(shù)碼相機〔富士DS-1P〕發(fā)布。該相機將數(shù)字圖像信號記錄在一塊容量為2MB的靜態(tài)RAM卡上。雖然這款富士原型機沒有上市銷售,但隨著對其概念的不斷改進和完善,有幾款數(shù)碼相機陸續(xù)上市。1995年,卡西歐QV-10上市銷售,由于其不僅是一臺相機,更是一個便攜式圖像瀏覽器,即在用戶拍完照后能即刻共享和欣賞圖片,受到年輕一代的熱烈歡送。1.1.3像素數(shù)量之戰(zhàn)隨著市場的日益增長,數(shù)碼相機的前景變得愈創(chuàng)造朗,許多廠家開始了數(shù)碼相機的開發(fā)。半導體制造商也認識到其中蘊含的重大商機,開始研發(fā)專用于數(shù)碼相機上的圖像傳感器。1996年奧林巴斯發(fā)布了C-800L型數(shù)碼相機,其CCD圖像傳感器約含80萬像素。隨后,富士和奧林巴斯與次年分別發(fā)布130萬像素的DS300和140萬像素的C-1400L。1999年,多家廠商發(fā)布了200萬像素的機型,而在2000年發(fā)布300萬像素的機型時情形再次發(fā)生。直到2004年,出現(xiàn)了高達800萬像素的傻瓜相機和1670萬像素的單反相機。圖1.3卡西歐OV-10圖1.4單反照相機本課題研究的意義市場上的照相機大多都是像素很高,體驗也非常不錯的照相機,但這些數(shù)碼照相機太過于獨立,而且價格也不低。在有些場合,需要把照相功能嵌入到某個系統(tǒng)中,完成一些簡單的攝像和保存圖片的功能,本次課設實現(xiàn)的STM32照相機的系統(tǒng)正好滿足要求。STM32照相機的程序還可以以板級支持包的方式根據(jù)需求對功能進行裁剪,功耗低,本錢也很低。1.2研究內(nèi)容本文主要研究STM32照相機的程序設計流程,從硬件的參考手冊入手。根據(jù)芯片手冊或模塊資料,配置相關存放器,并對信號的時序做出分析,搭建出每個器件操作的完整的編程模型。再選擇出適宜的算法,使各個模塊之間協(xié)調(diào)工作,最終設計出較低本錢、可移植性較好的STM32照相機系統(tǒng)。第2章系統(tǒng)方案設計2.1整體框架設計整個照相系統(tǒng)根據(jù)功能劃分,可分為:主控模塊、液晶顯示模塊、存儲器模塊、圖像采集模塊。另外,在實際拍照中,還需要參加按鍵作為拍照的按鈕、LED燈作為操作指示燈。在器件選型上,在綜合了相機像素、存儲容量、本錢,以及功耗各方面的考慮后,決定選用STM32最小系統(tǒng)作為主控模塊,OV7725攝像頭作為圖像采集模塊,ILI9341作為液晶驅(qū)動,容量為128MB的SD卡作為存儲模塊,見圖2.1。圖2.1STM32照相機系統(tǒng)框圖2.2主控模塊2.2.1STM32F103ZET6芯片功能介紹〔1〕內(nèi)核:ARM32位的Crotex-M3的CPU,最高72MHZ工作頻率;可進行單周期的乘法和硬件除法?!?〕存儲器:256KB/512KB的FLASH;高達64KB的SRAM;帶4個片選控制的靜態(tài)存儲器控制器:SRAM、PSRAM、NOR和NAND;并行LCD接口,兼容8080/6800模式?!?〕時鐘、復位與電源管理:2.0~3.6V供電和I/O引腳;上電、斷電復位〔POR/PDR〕,可編程電壓監(jiān)測器〔PVD〕;4~16MHZ晶體振蕩器;內(nèi)嵌經(jīng)出廠調(diào)校的8MHZ的RC振蕩器;帶校準功能的32kHZRTC振蕩器。〔4〕低功耗:睡眠、停機和待機模式;VBAT為RTC和后備存放器供電?!?〕3個12位模數(shù)轉換器,1μs轉換時間(多達21個輸入通道)?!?〕DMA:12通道DMA控制器,支持的外設:定時器,ADC,SPI,I2C和USART?!?〕多達112個快速I/O端口:51/80/112個I/O口,所有I/O可以映像到16個外部中斷。〔8〕調(diào)試模式:串行單線調(diào)試〔SWD〕和JTAG接口;Cortex-M3內(nèi)嵌跟蹤模塊〔ETM〕?!?〕多達11個定時器:4個16位定時器,每個定時器有多達4個用于輸入捕獲/輸出比擬/PWM/脈沖計數(shù)的通道和增量編碼輸入;2個16位帶死區(qū)控制和緊急剎車,用于電機控制和PWM高級控制定時器;2個看門狗定時器;系統(tǒng)時間定時器;2個16位根本定時器用于驅(qū)動DAC。〔10〕多達13個通信接口:多達2個I2C接口〔支持SMBus/PSMBus〕;多達5個USART〔支持ISO7816接口,LIN,IrDA接口和調(diào)制解調(diào)器接口〕;多達3個SPI接口〔18Mbit/s〕;CAN接口;USB2.0全速接口;SDIO接口。CRC計算單元,96位的芯片唯一代碼。ECOPACK封裝。2.2.2時鐘樹為了滿足系統(tǒng)時鐘和不同外設時鐘的需求,STM32芯片內(nèi)部對系統(tǒng)時鐘和多種總線時鐘進行了管理,形成了時鐘樹。為了低功耗的需要,系統(tǒng)時鐘、中斷、GPIO以及外設時鐘都設置了開關。所以,要求在系統(tǒng)啟動前設置內(nèi)部或外部時鐘晶振頻率和分/倍頻數(shù),在使用GPIO管腳時要翻開GPIO掛接在總線上的時鐘開關,在使能中斷和使用外設時都要翻開對應的時鐘開關。下面介紹STM32的時鐘源和時鐘系統(tǒng)框圖:在STM32的內(nèi)部共有五個時鐘源,分別為HSI、HSE、LSI、LSE、PLL[4]?!?〕HSI〔高速內(nèi)部時鐘〕為RC振蕩器,其頻率為8MHz。〔2〕HSE〔高速外部時鐘〕可接石英或陶瓷諧振器,還可以接外部時鐘源,頻率范圍為4MHz~16MHz。〔3〕LSI〔低速內(nèi)部時鐘〕為RC振蕩器,其頻率為40kHz?!?〕LSE〔低速外部時鐘〕,可接頻率為32.768kHz的石英晶振?!?〕PLL〔鎖相環(huán)〕,其時鐘輸入源可選擇為高速內(nèi)部時鐘的二分頻、高速外部時鐘或其二分頻。倍頻可選擇為2~16倍,但是其輸出頻率最大不得超過72MHz。圖2.2STM32時鐘樹2.2.3GPIO及功能復用在使用STM32上的GPIO

時,都要對其存放器進行配置。包含2個32bit數(shù)據(jù)存放器(GPIOx_IDR和GPIOx_ODR),1個32

bit置位/復位存放器(GPIOx_BSRR),2個32

bit配置存放器(GPIOx_CRL和GPIOx_CRH),以及1個16bit復位存放器(GPIOx_BRR)和1個32

bit鎖定存放器(GPIOx_LCKR)。為方便用戶使用,GPIO的存放器在GPIOx結構體中實現(xiàn):Typedefstruct{__IOuint32_tCRL;__IOuint32_tCRH;__IOuint32_tIDR;__IOuint32_tODR;__IOuint32_tBSRR;__IOuint32_tBRR;__IOuint32_tLCKR;}GPIO_TypeDef;另外,GPIO

端口上的每一位可以由軟件分別配置成多種模式〔在GPIO_InitStruct體中實現(xiàn)〕,即每一位都可以自由編程。Typedefstruct{uint16_tGPIO_Pin;GPIOSpeed_TypeDefGPIO_Speed;GPIOMode_TypeDefGPIO_Mode;}GPIO_InitTypeDef;但要注意的是,I/0

端口存放器必須按4個字節(jié)〔即32bit〕被訪問,不支持只訪問某一位或某幾個字節(jié)。假設要只進行位操作,可以將存放器的值與某一32位數(shù)值進行按位與/或/同或/異或等操作實現(xiàn)。〔1〕GPIO根本設置圖2.3GPIO內(nèi)部結構框圖GPIO類型GPIO_Mode共8種:=1\*GB3①GPIO_Mode_AIN

模擬輸入:應用ADC模擬輸入,或者低功耗下省電;=2\*GB3②GPIO_Mode_IN_FLOATING

浮空輸入:可以做按鍵識別,串口接受端RX

;=3\*GB3③GPIO_Mode_IPD

下拉輸入:內(nèi)部下拉電阻輸入;=4\*GB3④GPIO_Mode_IPU

上拉輸入:內(nèi)部上拉電阻輸入;=5\*GB3⑤GPIO_Mode_Out_OD

開漏輸出:當輸出為0時,IO內(nèi)部硬件接地,當輸出為1時,引腳是懸空的,需要外接上拉電阻,才能實現(xiàn)輸出高電平。要想實現(xiàn)雙向通信,外接上拉電阻后,可先向IO口寫入1,此時的IO的電平會隨著外部電路的電壓值變化,從而完成輸入功能;=6\*GB3⑥GPIO_Mode_Out_PP

推挽輸出:輸出0時,內(nèi)部接低,輸出1

時,接的是電源電壓VCC,但讀輸入的值是未知的;=7\*GB3⑦GPIO_Mode_AF_OD

復用開漏輸出:主要針對一些片內(nèi)外設功能〔如:串口TX1,SPI通信〕;=8\*GB3⑧GPIO_Mode_AF_PP

復用推挽輸出:片內(nèi)外設功能〔如:I2C的SCL,SDA〕。對于輸出引腳除設置引腳的輸出模式外,還需設置GPIO引腳速率GPIO_SpeedGPIO引腳速率是指I/O口驅(qū)動電路的響應速度〔不是信號的輸出速率〕,對于STM32上的輸出引腳需要選擇速度:2MHz、10MHz和50MHz。根據(jù)不同的外設,合理地選擇不同的輸出驅(qū)動模塊,以到達最正確的性噪比和最低的系統(tǒng)功耗。比方,對于高頻的驅(qū)動電路,噪聲較高,所以不需要高的輸出頻率時,選用低頻驅(qū)動電路,這樣非常有利于提高系統(tǒng)的抗電磁干擾性能?!?〕GPIO功能復用復用功能是指內(nèi)置外設與I/O口共用了引出管腳,也可能出現(xiàn)不同的功能對應同一管腳。假設將GPIO配置成復用輸出功能,那么I/O將不能使用輸出存放器,并在內(nèi)部結構中與片上外設的輸出信號連接。如果通過編程將某個GPIO引腳配置成復用輸出功能,但是外設沒有啟動,其輸出將不確定。使用默認復用功能前必須對端口位配置存放器編程。=1\*GB3①對于復用的輸入功能,端口必須配置成輸入模式(浮空、上拉或下拉)且輸入引腳必須由外部驅(qū)動;=2\*GB3②對于復用輸出功能,端口必須配置成復用功能輸出模式(推挽或開漏);=3\*GB3③對于雙向復用功能,端口位必須配置復用功能輸出模式(推挽或開漏),此時的輸入驅(qū)動器被配置成浮空輸入模式。2.2.4中斷〔1〕中斷根本概念中斷是指當軟件或硬件出現(xiàn)需要時,CPU暫時停止當前程序的執(zhí)行,轉去處理應對突發(fā)情況的程序的執(zhí)行請求,在處理事件后完后又返回到源程序繼續(xù)執(zhí)行的過程。觸發(fā)中斷的事件稱為中斷源,而中斷源向內(nèi)核申請中斷的入口就稱為中斷通道。也就是說,中斷通道給中斷源提供一個向內(nèi)核申請中斷的入口,中斷源通過中斷通道向內(nèi)核提出中斷申請。一個中斷通道可以對應一個中斷源,也可以對應多個;有的外設只對應一個,而有的外設可以對應多個中斷通道。中斷優(yōu)先級是針對中斷通道的。圖2.4中斷通道、中斷源與外設的關系〔2〕中斷優(yōu)先級

STM32的中斷優(yōu)先級可分為響應式優(yōu)先級或搶占式優(yōu)先級。其中,搶占式優(yōu)先級的中斷會打斷當前的主程序或者中斷程序運行,是實現(xiàn)中斷嵌套的一種手段。對于每一個中斷通道,Cortex-M3內(nèi)核的頭文件“core_m3.h〞中都提供了一個8位的存放器IP,來確定該中斷通道的搶占式優(yōu)先級或響應式優(yōu)先級。〔3〕中斷相關存放器

NVIC結構體〔core_m3.h〕內(nèi)核中的存放器與中斷控制SCB結構體〔core_m3.h〕相關存放器外設相關存放器外設中的存放器〔如:TIM2的TIM2_DIER中斷使能存放器〕……在配置中斷時主要使用中斷控制〔NVIC〕存放器組中的存放器,可以通過NVIC的結構體來實現(xiàn):typedefstruct{vu32ISER[2];u32RESERVED0[30];vu32ICER[2];u32RSERVED1[30];vu32ISPR[2];u32RESERVED2[30];vu32ICPR[2];u32RESERVED3[30];vu32IABR[2];u32RESERVED4[62];vu32IPR[11];}NVIC_TypeDef;配置這些內(nèi)核存放器時〔以按鍵中斷為例〕STM32的庫函數(shù)中提供了中斷初始化結構體:typedef

struct

{

uint8_t

NVIC_IRQChannel

uint8_t

NVIC_IRQChannelPreemptionPriority;

uint8_t

NVIC_IRQChannelSubPriority;

FunctionalState

NVIC_IRQChannelCmd;

}

NVIC_InitTypeDef;

在按鍵中斷初始化時,需進行如下操作:第一步:設置搶占優(yōu)先級的分組;第二步:選擇外部中斷輸入引腳,設置搶占優(yōu)先級和響應優(yōu)先級;第三步:使能中斷通道,中斷設置成功?!?〕總中斷的開和關STM32/Cortex-M3是通過改變CPU當前優(yōu)先級來實現(xiàn)允許/禁止中斷的。在STM32固件庫中〔stm32f10x_nvic.h和stm32f10x_nvic.c〕定義了四個函數(shù)操作PRIMASK位和FAULTMASK位,改變CPU當前優(yōu)先級,從而到達控制所有中斷的目的。/*關閉總中斷的兩個函數(shù)*/

void

NVIC_SETPRIMASK(void);

void

NVIC_SETFAULTMASK(void);/*使能總中斷的兩個函數(shù)*/

void

NVIC_RESETPRIMASK(void);

void

NVIC_RESETFAULTMASK(void);

2.3液晶顯示模塊2.3.1ILI9341驅(qū)動器介紹ILI9341是一個用于TFT液晶顯示的單芯片控制驅(qū)動器,具有26萬色的240RGBX320像素顯示解決方案,它的組成包括一個720通道的源極驅(qū)動器,一個320通道的柵極驅(qū)動器,172800字節(jié)用于圖形顯示的GRAM,以及供電電路[5]。ILI9341支持8/9/16/18位數(shù)據(jù)總線的MCU接口,6/16/18位數(shù)據(jù)總線的RGB接口,以及3/4線的SPI接口,移動圖像區(qū)域可以通過窗口地址功能在內(nèi)部GRAM來指定,指定的窗口區(qū)域可以選擇性地更新,因此,可以在圖像區(qū)域同時獨立地顯示移動圖像[6]。ILI9341可以使用1.65~3.3V的I/O接口電壓和一個對應的電壓跟隨電路來產(chǎn)生驅(qū)動LCD的電壓。ILI9341有精確的電壓控制〔軟件控制〕,來支持全色,8色顯示模式和睡眠模式,是理想的中小型手提產(chǎn)品的LCD驅(qū)動器。2.3.2FSMC總線FSMC(FlexibleStaticMemoryController,可變靜態(tài)存儲控制器)是STM32系列中內(nèi)部集成256KB以上FLASH,后綴為xC、xD和xE的高存儲密度微控制器特有的存儲控制機制[7]。之所以稱為“可變〞,是由于通過對特殊功能存放器的設置,F(xiàn)SMC能夠根據(jù)不同的外部存儲器類型,發(fā)出相應的數(shù)據(jù)/地址/控制信號類型以匹配信號的速度,從而使得STM32系列微控制器不僅能夠應用各種不同類型、不同速度的外部靜態(tài)存儲器,而且能夠在不增加外部器件的情況下同時擴展多種不同類型的靜態(tài)存儲器,滿足系統(tǒng)設計對存儲容量、產(chǎn)品體積以及本錢的綜合要求[8]?!?〕FSMC框圖及配置:圖2.5FSMC框圖FSMC總線配置流程:第一步:選擇適宜的存儲塊映射NORFLASH存儲器,共有4個獨立的存儲塊可以用于與NORFLASH、SRAM和PSRAM存儲器接口,每個存儲塊都有一個專用的片選管腳。第二步:使用或禁用地址/數(shù)據(jù)總線的復用功能;第三步:選擇所用的存儲器類型:NORFLASH、SRAM或PSRAM〔其中NORFLASHMemory和SRAM都支持同步或異步讀寫時序的存儲器〕;第四步:定義外部的存儲器的數(shù)據(jù)總線:8bit/16bit;第五步:使用或關閉NORFLASHMemory的突發(fā)訪問模式;第六步:配置等待信號的使用:開啟或關閉,極性設置,時序配置;第七步:使用或關閉擴展模式:擴展模式用于訪問具有不同讀寫操作時序的存儲器。〔2〕時序參數(shù)及計算異步讀寫時序的參數(shù)及時序:ADDSET:addresssetuptime;ADDHOLD:addressholdtime;DATAST:datasetuptime圖2.6異步讀時序圖2.7異步寫時序讀/寫訪問時間為:((ADDSET

+

1)

+

(DATAST

+

1))

×

HCLK

;寫使能信號由低到高的時間為:tWP=DATAST

×

HCLK;考慮最大的讀/寫訪問時間,F(xiàn)SMC和存儲器的內(nèi)部延時,數(shù)據(jù)建立時間應滿足:DATAST

=

(tAVQV

+

tsu(Data_NE)

+

tv(A_NE))/HCLK

ADDSET

4。本次畢設LCD驅(qū)動的存儲器接口是掛接在FSMC總線上〔FSMC總線上的LCD連接見圖2.8〕,選用NORFLASH存儲器的BANK1的第4塊區(qū)域,并且禁用地址/數(shù)據(jù)總線的復用功能和存儲器的突發(fā)訪問模式,設置數(shù)據(jù)總線寬度為16位,讀寫時序為異步時序,并關閉擴展模式。其實只需對下面的三個存放器做如下操作:FSMC_Bank1->BTCR[6]=0X5011;FSMC_Bank1->BTCR[7]=0X0809;FSMC_Bank1E->BWTR[6]=0X0301。圖2.8LCD與FSMC總線連接2.3.3LCD初始化表2.1LCD存放器操作局部指令集指令描述指令描述指令描述EDH電源序列控制F7H泵比控制C5HVCOM控制1E8H驅(qū)動時序控制AB1H幀速率控制C7HVCOM控制2EAH驅(qū)動時序控制BB6H顯示功能控制F2H使能3GCBH功耗控制AC0H功耗控制126H 伽馬設置CFH功耗控制BC1H功耗控制2E0H正極伽馬校準2AH列地址設置3AH像素格式設置E1H負極伽馬校準2BH頁地址設置11H 退出睡眠模式2CH存儲器寫36H 存儲器訪問控制29H 開顯示2EH讀存儲器FSMC總線〔STM32引腳復用FSMC的硬件接口〕配置完成后,就能通過STM32來對LCD內(nèi)的存放器進行讀寫操作了。本章節(jié)中所有關于時鐘的設置,GPIO的配置,引腳的復用功能,中斷函數(shù)將在下一個章節(jié)集中講解,LCD內(nèi)部的存放器比擬多,可以對照LCDILI9341的數(shù)據(jù)手冊通過命令來指定配置存放器,并輸入相應的參數(shù)。LCDILI9341的操作指令可分為:一級、二級、三級指令。LCD初始化和顯示圖片時需要用到的指令如表2.1。關于LCD的初始化代碼,不同的液晶驅(qū)動程序是不一樣的,在購置液晶屏時廠家會提供源代碼,所以這里不再展開。2.4存儲器模塊2.4.1SD卡2.0協(xié)議SD存儲卡兼容MMC卡的接口標準,采用9針的接口〔CLK為時鐘線,CMD為命令響應線,DATA0~DATA3為雙向數(shù)據(jù)傳輸線,VDD、VSS1和VSS2為電源和地〕,最大的工作頻率是25MHZ。SD卡系統(tǒng)支持SD卡模式和SPI模式〔如表2.2和表2.3〕,兩種通信協(xié)議[9]。SD卡在結構上使用一主多從星型拓撲結構。雖然SPI的初始化流程比SDIO簡單得多,但SDIO用4根數(shù)據(jù)線傳輸,而SPI只是串行傳輸,SDIO的傳輸速度明顯高于SPI。在傳輸圖像時對傳輸速度要求較高,故本次畢設選用SD模式的接口〔SDIO〕。表2.2SD卡模式下的接口定義管腳類型描述備注DATA0~DATA2輸入/輸出/推挽類型數(shù)據(jù)總線CM輸入/輸出/推挽類型卡監(jiān)測數(shù)據(jù)位DATA3CLK輸入時鐘引腳CMD推挽命令/響應串行〔1〕SDIO初始化SD_ErrorSD_Init(void);初始化函數(shù)包括GPIO設置,存放器的復位,上電操作,SD卡的信息獲取。假設初始化成功返回值為0。表2.3SPI模式下的接口定義管腳類型描述備注CS輸入片選低電平有效DI輸入數(shù)據(jù)輸入端串行DO輸出數(shù)據(jù)輸出端串行CLK輸入時鐘引腳在進行初始化之前先了解幾個命令和SD卡內(nèi)部存放器〔見圖2.9和表2.4〕:圖2.9SD卡內(nèi)部結構及存放器CMD0:將所有的卡復位到理想狀態(tài);CMD8:發(fā)送主機的提供的電壓范圍,并響應SD卡支持的電壓范圍;CMD55:指定下一條命令是應用命名;ACMD41:發(fā)送主機支持的卡的容量,并響應SD卡的OCR中的內(nèi)容;CMD2:獲取SD卡的ID;CMD3:獲取SD卡的相對地址。SDIO模式下的初始化流程:當HOST上電后,使所有的卡設備處于卡識別模式,完成設置有效操作電壓范圍,卡識別和請求卡相對地址等操作。第一步:發(fā)送指令CMD0使卡設備處于空閑狀態(tài),進入第二步。第二步:發(fā)送指令CMD8,假設卡設備有響應,說明此卡為SD2.0以上,此時會響應SD卡支持的電壓范圍,進入第三步;假設沒有響應,那么為SD2.0以下的SD卡,執(zhí)行第四步。第三步:假設主機支持大容量的SD卡,將HCS置1,否那么置0。發(fā)送指令CMD55+ACMD41,假設響應CCS為1,那么SD卡為大容量的存儲器,進入第四步;否那么為標準容量的SD卡,進入第五步。第四步:HCS置0,并發(fā)送CMD55+ACMD41,假設有響應,那么為標準容量的SD卡,進入第五步;假設無響應,那么返回沒有找到可用的SD卡。第五步:發(fā)送指令CMD2獲取CID。第六步:發(fā)送指令CMD3獲取RCA(relativecardaddress),初始化完成。表2.4SD卡內(nèi)部存放器存放器位寬〔bit〕描述CID128卡標識號RCA16相對卡地址:本地系統(tǒng)中卡的地址,是動態(tài)變化的,需要在主機初始化時確定;在SPI模式中沒有CSD128卡描述數(shù)據(jù):卡操作條件的信息數(shù)據(jù)SCR64SD卡配置存放器:SD卡特定信息數(shù)據(jù)OCR32操作條件存放器DSR16驅(qū)動級存放器,用于提高總線的性能;可選可不選〔2〕SD卡的根本操作=1\*GB3①SD卡的讀操作:SD_ErrorSD_ReadBlock(uint8_t*readbuff,uint32_tReadAddr,uint16_tBlockSize);函數(shù)功能:讀單個塊的數(shù)據(jù),并采用DMA傳輸方式;Readbuff:指向數(shù)據(jù)接受緩存器;ReadAddr:讀取區(qū)域的首地址;BlockSize:塊的大小〔512B〕;讀取成功后返回SD_Error=0?!蚕峦砈D_ErrorSD_ReadMultiBlocks(uint8_t*readbuff,uint32_tReadAddr,uint16_tBlockSize,uint32_tNumberOfBlocks);函數(shù)功能:可以讀取連續(xù)幾個塊的內(nèi)容,塊的個數(shù)由NumberOfBlocks確定。讀寫都是以block為單位,一個block為512個字節(jié)〔發(fā)送CMD16命令可以設置塊的大小〕,小于512B時,以block的邊界對齊。每個塊傳輸?shù)暮竺娑几粋€CRC校驗。CMD17(READ_SINGLE_BLOCK)用于傳輸單個塊,傳輸完之后,卡進入傳輸狀態(tài);CMD18

(READ_MULTIPLE_BLOCK)用于多個塊的傳輸,直到收到一個CMD12命令。=2\*GB3②SD卡的寫操作:SD_ErrorSD_WriteBlock(uint8_t*writebuff,uint32_tWriteAddr,uint16_tBlockSize);函數(shù)功能:寫入一個塊的內(nèi)容,DMA傳輸;寫入成功后返回SD_Error=0?!蚕峦砈D_ErrorSD_WriteMultiBlocks(uint8_t*writebuff,uint32_tWriteAddr,uint16_tBlockSize,uint32_tNumberOfBlocks);函數(shù)功能:連續(xù)寫入幾個塊的內(nèi)容,塊的個數(shù)由NumberSize確定。塊寫操作與塊讀操作類似,每個塊傳輸?shù)暮竺娑几粋€CRC校驗??▽憯?shù)據(jù)時會進行CRC校驗,多塊寫比重復的單塊寫更能提高效率。如果CSD中的WRITE_BLK_MISALIGN沒設置,并且發(fā)送的數(shù)據(jù)不是塊對齊的,卡會設置狀態(tài)存放器中的ADDRESS_ERROR位,并且進入Receive-data狀態(tài)等待停止命令。此時寫操作也會停止,并且卡會設置其的WP_VIOLATION位。如果寫緩沖滿的話,卡會停止接受WRITE_BLOCK命令。此時主機應發(fā)送SEND_STATUS

(CMD13)命令,卡返回數(shù)據(jù)的READY_FOR_DATA位標志卡是否準備好接受新的數(shù)據(jù)。在多塊寫操作中通過事先發(fā)送ACMD23命令可提高寫速度。ACMD23用于定義接下來要寫數(shù)據(jù)的塊的數(shù)目[10]。每次多塊寫操作后,這個值又被設為默認值1,ACMD22會使卡返回寫成功的塊數(shù)目。=3\*GB3③SD卡的擦除操作:SD_ErrorSD_Erase(uint32_tstartaddr,uint32_tendaddr);函數(shù)功能:擦除SD卡中指定的內(nèi)容,擦除成功時返回0;startaddr是擦除內(nèi)容的起始地址;endaddr是擦除內(nèi)容的終止地址。擦除命令的順序是:ERASE_WR_BLK_START(CMD32)、ERASE_WR_BLK_END(CMD33)、ERASE

(CMD38)[10]。如果(CMD38或(CMD32,

33)接收到出錯信息,卡會設置狀態(tài)存放器中的ERASE_SEQ_ERROR

位并且重新等待新的命令時序;如果接收到時序錯誤命令,卡會設置其ERASE_RESET位并且重新等待新的命令時序。2.4.2SD卡的文件系統(tǒng)FATFS上一節(jié)的SD卡驅(qū)動只完成了向物理地址寫入數(shù)據(jù)的工作,而根據(jù)文件系統(tǒng)格式的邏輯轉換局部那么需要額外的代碼來完成。實質(zhì)上,這個邏輯轉換局部可以理解為當需要寫入一段數(shù)據(jù)時,由它來求解向什么物理地址寫入數(shù)據(jù)、以什么格式寫入及寫入一些原始數(shù)據(jù)以外的信息(如目錄)。這個邏輯轉換局部代碼也稱之為文件系統(tǒng)。FATFS是面向小型嵌入式系統(tǒng)的一種通用的FAT文件系統(tǒng)。它完全是由AISIC語言編寫并且完全獨立于底層的I/O介質(zhì),因此它可以很容易地不加修改地移植到其他的處理器當中,如8051、PIC、AVR、SH、Z80、H8、ARM等。FATFS支持FAT12、FAT16、FAT32等格式[11]。所以利用前面寫好的SDIO驅(qū)動,把FATFS文件系統(tǒng)代碼移植到工程之中,就可以利用文件系統(tǒng)的各種函數(shù),對已格式化的SD卡的文件進行讀寫了?!?〕FatFsR0.09本次畢設采用FatFs文件系統(tǒng)的R0.09的版本,提供有兩類接口函數(shù):底層函數(shù)〔DeviceControlInterface〕和上層函數(shù)〔ApplicationInterface〕。圖2.10FATFS文件系統(tǒng)模型 FileAccess:f_open(),f_close(),f_read(),f_write(),f_gets(),f_puts(),f_printf()…DirectoryAccess:f_opendir(),f_closedir(),f_readdir()…APIFile/DirectoryManagement:f_stat(),f_unlink(),f_rename(),f_mkdir(),f_getcwd()…VolumeManagement:f_mount(),f_mkfs(),f_fdisk()…DCI:disk_status()獲取扇區(qū)狀態(tài);disk_initialize()初始化扇區(qū);disk_read()讀扇區(qū);disk_write()寫入扇區(qū);disk_ioctl()控制設備相關函數(shù);get_fattime()獲取當前時間。上一節(jié)講到的SD卡的初始化,SD卡的讀寫操作,以及擦除等操作的實現(xiàn)全部封裝到DCI函數(shù)中使用,即使用FatFS提供的API和DCI就能實現(xiàn)對SD卡的讀寫及管理文件系統(tǒng)的所有操作。〔2〕常用的API函數(shù)FRESULTf_mount(BYTEvol,FATFS*fs);函數(shù)功能:注冊邏輯存儲設備〔翻開一個工作區(qū)〕,成功后返回FR_OK;vol為盤符號;fs指向新建的文件系統(tǒng)。FRESULTf_open(FIL*fp,constTCHAR*path,BYTEmode);函數(shù)功能:新建或翻開一個文件,成功后返回FR_OK;fp指向創(chuàng)立的文件;path指向文件路徑名;mode文件訪問方式。FRESULTf_close(FIL*fp);函數(shù)功能:關閉fp指向的文件。FRESULTf_read(FIL*fp,void*buff,UINTbtr, UINT*br);函數(shù)功能:讀取文件,成功后返回FR_OK;fp指向要讀取的文件;buff指向指向讀取到的數(shù)據(jù);btr讀取的字節(jié)數(shù);br指向讀取的字節(jié)數(shù)。FRESULTf_write(FIL*fp,constvoid*buff,UINTbtw, UINT*bw);函數(shù)功能:寫入文件,成功后返回FR_OK;fp指向要寫入的文件;buff指向待寫入的數(shù)據(jù);btw指向?qū)懭氲淖止?jié)數(shù)。FatFs文件系統(tǒng)除了提供上述的庫函數(shù),還提供其他一些頭文件,可根據(jù)需要進行手動添加:cc932.h,cc936.h,cc949.h,cc950.h,ccsbcs.h,syscall.h2.5圖像采集模塊OV7725是一個能夠提供單片VGA攝像頭和影像處理器的所有功能的圖像傳感器,它可以輸出整幀,子采樣,取窗口等方式的各種分辨率8/10位圖像數(shù)據(jù),支持的數(shù)據(jù)格式有很多種,包括RAWRGB,RGB(GRB4:2:2,RGB565/555/444)以及YCbCr(4:2:2)等格式[12]。它的體積小,工作電壓低,具有單片VGA攝像頭影像處理器的功能,可以對圖像進行伽瑪曲線、白平衡、飽和度、色度等處理[13]。2.5.1攝像頭輸出時序OV7725芯片的輸出采用了VGA時序〔是一種640*480像素顯示器的顯示模式〕,而ILI9341液晶屏為3.2寸屏只能顯示320*240像素的圖像,故將其時序改為QVGA〔即原VGA的四分之一,可配置OV7725的COM7存放器選擇〕。一個像素用16位的數(shù)據(jù)〔RGB565〕表示,而OV7725的數(shù)據(jù)總線寬度最多可設置為10位,故采用了8位的數(shù)據(jù)寬度〔D2~D9〕輸出圖像信息。對OV7725內(nèi)存放器的配置接口是采用了SCCB總線〔后面會詳細講解〕,見圖2.11。圖2.11OV7725一幅圖像就是一幀的數(shù)據(jù),OV7725在采集完一幅圖像后,都會產(chǎn)生一個場/幀同步信號VSYNC,其時序為:一個脈沖為一幀的開始,低電平時開始傳輸,另一個脈沖為一幀結束,見圖2.13。當捕捉到VSYNC的上跳沿〔或下跳沿〕時,產(chǎn)生中斷,將數(shù)據(jù)寫入到FIFO中。VSYNC保持低電平說明正在傳送圖像。當再次捕捉到VSYNC的上跳沿〔或下調(diào)沿〕時,產(chǎn)生中斷,一幀圖像傳輸完畢,禁止向FIFO的寫入,并開始讀FIFO中的數(shù)據(jù)。一幅圖由240行,320列個像素點組成,因此在VSYNC信號保持低電平階段〔即開始傳輸圖像時〕需要行同步信號HREF〔輸出行起始和行結束信號〕換行,使數(shù)據(jù)一行行地被讀出。行同步的時序為:HREF由低電平變?yōu)楦唠娖綍r開始傳輸一行像素數(shù)據(jù),高電平表示正在傳輸,由高變低時表示一行傳輸完畢。實際上,信號HSYNC〔和HREF共用一個管腳,可以通過軟件來配置)也可以用于行同步,但與HREF有一點區(qū)別。從圖2.12中可以看到,HREF為高電平時,攝像頭輸出的數(shù)據(jù)都是有效的,而HSYNC高電平期間,在后面有一段時間是無意義的,即圖中灰色局部。再結合FIFO的特性,選用了HREF作為行同步,見圖2.13。圖2.12幀時序圖圖2.13行時序圖前面講到每一行都有320個像素點,在輸出一行的像素點時,需要一個像素時鐘PCLK,確保像素點是一個個地被讀出。在HREF保持高電平時,像素時鐘信號PCLK每出現(xiàn)一次上跳沿,就能輸出一個字節(jié)數(shù)。而每個像素點采用RGB565的格式,共16位〔2個字節(jié)數(shù)〕,故需要分兩次輸出。前一個字節(jié)從高位到低位依次是R4~R0、G5~G3,后一個字節(jié)是依次是G2~G0、B4~B0,見圖2.14。圖2.14 像素輸出時序FIFO存儲器由于攝像頭采集圖片信息的傳輸速率比擬快〔可達60fps〕,而STM32最快能每秒處理24幀的圖像信息〔每秒顯示24張以上的圖時,人眼會感覺出是連續(xù)的畫面〕。為了防止丟幀和解決STM32與OV7725間的速率匹配,在STM32和攝像頭之間參加一個FIFO存儲器,見圖2.15。FIFO讀時序主要用到4個管腳:RE〔讀使能:低電平有效,已硬件接地〕、OE〔輸出使能:低電平有效,高電平關閉輸出〕、RCLK〔讀時鐘〕、RRST〔讀指針復位操作:低電平時,讀指針復位到0地址開始讀取數(shù)據(jù)〕。RE端硬件接地,那么STM32隨時可以讀取里面的數(shù)據(jù),但只有當OE為低電平時,讀到的數(shù)據(jù)才是有效的,否那么D0~D7呈現(xiàn)高組態(tài)。OE為低電平時,隨著RCLK的運轉,輸出管腳D7~D0按地址遞增的方式〔每讀出一個字節(jié),指針就會加一〕輸出數(shù)據(jù),見圖2.16。在數(shù)據(jù)全部讀出后,要操作RRST將讀指針復位,方便下次讀取。圖2.15FIFO與OV7725、STM32連接圖2.16FIFO讀時序FIFO的寫時序主要用到3個管腳:WE〔寫使能:低電平有效〕、WCLK〔寫時鐘〕、WRST〔寫指針復位操作:當WRST為低電平時,寫指針就復位到0地址開始寫入〕。WE為低電平時,隨著WCLK的運轉,輸入管腳D17~D10的數(shù)據(jù)就會按地址自增的方式寫入到FIFO中,見圖2.17。在數(shù)據(jù)全部寫入后,要操作WRST將寫指針復位,方便下次寫入。完整驅(qū)動程序流程:將攝像頭的幀同步信號送入STM32,當STM32捕捉到場中斷信號時,拉高WEN管腳電平,之后整幅圖像的數(shù)據(jù)就會存入FIFO。當再次捕捉到場中斷時,說明一幅圖像已經(jīng)送入FIFO,此時,關閉場中斷,拉低WEN電平,防止攝像頭數(shù)據(jù)再次寫入FIFO。并開始讀取FIFO數(shù)據(jù)到內(nèi)存緩沖區(qū),交由STM32處理后顯示到液晶屏上。再使能場中斷,采集下一幅圖像,如此循環(huán)。圖2.17FIFO寫時序2.5.3SCCB總線SCCB〔OmniVisionserialcameracontrolbus〕,即串行攝像機控制總線,是一種已經(jīng)由OmniVision公司定義和采納的SCCB總線是一種三線結構的串行總線,用于完成對絕大多數(shù)OmniVision系列圖像傳芯片功能的控制[14]。在簡化的引腳封裝中,SCCB總線可以工作在改進的兩線工作方式下[15]。兩線SCCB接口有兩條通迅連接線,即SIO_D〔數(shù)據(jù)線〕和SIO_C〔時鐘線〕[15]。SCCB接口協(xié)議是一種簡化的I2C協(xié)議,兩者通信的時序根本一致,但是在應答信號ACK和總線停止信號等方面上存在差異。STM32上沒有SCCB的硬件接口,故采用GPIO模擬I2C〔SCCB的雙總線,將SCCB_E硬件接地〕的方式實現(xiàn),下面是雙總線功能原理圖:圖2.18SCCB的雙總線接法〔1〕管腳定義=1\*GB3①SCCB_E信號低電平有效,一個高到低的轉換說明數(shù)據(jù)傳輸開始;一個低到高的轉換說明數(shù)據(jù)傳輸結束;數(shù)據(jù)傳輸過程保持為低電平;高電平說明總線處于空閑狀態(tài)。在SCCB_E說明數(shù)據(jù)傳輸開始之前主機必須將數(shù)據(jù)線SIO_D置為1,這樣可以防止總線數(shù)據(jù)傳輸開始之前的總線不確定狀態(tài)的出現(xiàn)。=2\*GB3②SIO_C信號高電平有效,當處于空閑狀態(tài)時必須被拉高;當啟動傳輸后,SIO_C被拉低說明數(shù)據(jù)傳輸?shù)拈_始,傳輸過程中高電平說明一位數(shù)據(jù)正在傳輸,所以SIO_D的數(shù)據(jù)變化只能在SIO_C為低時發(fā)生,一位傳輸時間定義為tCYC,最小為10us。表2.5主控器件管腳描述管腳類型描述SCCB_E輸出串行片選輸出,當總線處于空閑狀態(tài)時主機把SCCB_E拉高為1,啟動傳輸或處在懸浮狀態(tài)時主機把SCCB_E拉低。SIO_C輸出串行I/O信號1輸出,空閑狀態(tài)時主機把SIO_C拉高;當SCCB_E拉低時,在上下電平之間變化;當系統(tǒng)處于懸浮狀態(tài)時,被拉低。SIO_DI/O串行信號0輸入和輸出,當總線處于空閑保持懸浮;系統(tǒng)處于懸浮狀態(tài)時被拉低。PWDN輸出掉電輸出。注:當SCCB_E沒有出現(xiàn)在攝像頭芯片引腳上時,默認使能,被拉高。表2.6從控器件管腳描述管腳類型描述SCCB_E輸入串行片選輸入,當系統(tǒng)處于掛起模式時,輸入點可以被關閉。SIO_C輸入串行I/O信號1輸出,當系統(tǒng)處于掛起模式時,輸入點可以被關閉。SIO_DI/O串行I/O信號0輸入和輸出,當系統(tǒng)處于掛起模式時,輸入點可以被關閉。PWDN輸入掉電輸入。〔2〕SCCB總線傳輸SCCB與I2C總線的協(xié)議根本一致,讀寫時序相同,故對SCCB的通信時序不再展開討論。=1\*GB3①SCCB的讀操作:intSCCB_ReadByte(uint8_t*pBuffer,uint16_tlength,uint8_tReadAddress);入口參數(shù):pBuffer存放待讀出的數(shù)據(jù);length:待讀出的長度;ReadAddress:待讀出的地址。第一步:判斷起始信號,假設初始化成功,進入第二步,否那么返回失??;第二步:發(fā)送器件地址DEV_ADR,并等待應答,假設有應答,進入第三步,否那么返回失敗;第三步:設置器件內(nèi)部待讀出的存放器的低起始地址,并等待應答,釋放總線;第四步:再次啟用總線,并發(fā)送器件地址〔DEV_ADR+1〕,并等待應答,進入第五步,否那么返回失??;第五步:將數(shù)據(jù)讀到pBuffer中,共讀取length個字節(jié),全部讀出后,釋放總線,返回成功。=2\*GB3②SCCB寫操作:intSCCB_WriteByte(uint16_tWriteAddress,uint8_tSendByte);入口參數(shù):WriteAddress待寫入的地址;SendByte待寫入的數(shù)據(jù)。第一步:判斷起始信號,假設初始化成功,進入第二步,否那么返回失?。坏诙剑喊l(fā)送器件地址DEV_ADR,并等待應答,假設有應答,進入第三步,否那么返回失?。坏谌剑涸O置器件內(nèi)部待寫入的存放器的低起始地址,并等待應答,進入第四步;第四步:發(fā)送數(shù)據(jù),并等待應答,釋放總線,返回成功。第3章系統(tǒng)軟件設計關于STM32的片上資源,LCDILI9341液晶屏的根本配置,SD卡的驅(qū)動及文件系統(tǒng),OV7725攝像頭功能的介紹已經(jīng)在上一個章節(jié)中進行了詳細的說明。硬件平臺的搭建都是建立在STM32開發(fā)板與其他器件模塊連接上的,本章節(jié)那么主要采用自頂向下,層層細化的程序設計思想,分模塊講解整個系統(tǒng)的軟件實現(xiàn)流程。3.1頂層程序設計STM32照相機根本流程可以描述為:系統(tǒng)初始化,拍照處理。首先是系統(tǒng)初始化,包括系統(tǒng)時鐘配置,對按鍵的GPIO和中斷使能,LED的GPIO初始化;再初始化LCD的GPIO,F(xiàn)SMC總線功能和內(nèi)部存放器;還有初始化SD卡FATFS文件系統(tǒng)并使能SDIO的中斷;最后,在實現(xiàn)模擬SCCB總線后,OV7725還需要配置FIFO的GPIO和OV7725內(nèi)部的存放器,并初始化場信號線。接著,拍照處理:等待幀同步信號,進入攝像;等待按鍵,開始拍照〔即液晶截屏〕并將圖片保存到SD卡中,見圖3.1。3.2系統(tǒng)初始化程序設計3.2.1GPIO初始化在第二章的主控模塊局部已經(jīng)介紹了GPIO的存放器和引腳的輸入輸出模式,對復用功能實現(xiàn)也做出了詳細說明。在STM32控制下的LED,KEY的GPIO以及LCD,SDcard,攝像頭使用的所有GPIO或特殊功能引腳的設置都要通過流程圖來實現(xiàn)〔圖3.2〕。3.2.2LCD初始化LCD初始化主要包括兩個內(nèi)容:FSMC總線配置,LCD存放器配置,見圖3.3。程序中的涉及液晶屏的讀寫操作〔如清屏,設置液晶掃描方向以及寫入圖片信息〕,都是在向Bank1_LCD_C和Bank1_LCD_D兩個區(qū)域分別寫入命令和數(shù)據(jù)實現(xiàn)的。其中,命令/數(shù)據(jù)的含義可參考ILI9341參考手冊上的內(nèi)容,在第二章的液晶顯示模塊中也給出了局部指令的含義。3.2.3SD卡文件系統(tǒng)初始化SD卡文件系統(tǒng)初始化可分兩塊:SD卡中斷初始化和硬件初始化。如何設置中斷和FatFs文件系統(tǒng)的函數(shù)接口前面都已經(jīng)介紹過了,圖3.4是整個SD卡文件系統(tǒng)的初始化流程圖。3.2.4OV7725初始化攝像頭OV7725的初始化分為三大局部:SCCB總線和FIFO的GPIO初始化,傳感器的初始化,場信號線的初始化。其中的SCCB總線時序在上一章已經(jīng)講過,圖3.5是OV7725初始化的程序流程圖。圖3.1主程序流程圖圖3.2GPIO的配置及復用圖3.3LCD初始化流程圖3.4SD卡文件初始化流程圖3.5OV7725初始化流程3.3拍照處理程序設計前幾個小節(jié)詳細介紹了各個子模塊的初始化的實現(xiàn),從主程序框圖上看,還要有FIFO的準備,圖像采集與顯示,中斷效勞程序,液晶截屏與保存子程序。FIFO的準備〔使能數(shù)據(jù)出FIFO輸出〕,圖像采集與顯示是通過反復的讀FIFO的輸出并往LCD存放器寫入數(shù)據(jù)的過程,這些可以參考第二章的液晶顯示模塊和圖像采集模塊中FIFO的時序。最后一小節(jié)的重點是液

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論