STM32和OV2640的嵌入式圖像采集系統設計
摘要:基于STM32嵌入式系統及200萬(wàn)攝像頭OV2640設計了圖像采集系統,分析了系統的基本硬件架構,分別對不同模塊的功能特點(diǎn)作出了簡(jiǎn)單的介紹;對系統的軟件設計給出了詳細的說(shuō)明,介紹了系統初始化的基本思路和流程,以及相關(guān)外圍設備模塊在程序中的使用;并給出了系統的整體設計思路,實(shí)現了系統的穩定運行。
本文引用地址:http://dyxdggzs.com/article/201609/304502.htm引言
隨著(zhù)電子產(chǎn)品向低功耗、低價(jià)格、智能化的方向發(fā)展,利用視頻傳感器采集圖像成為研究熱點(diǎn),如可視門(mén)鈴、安全監控、賽車(chē)自動(dòng)循跡、煙葉圖像采集、草本葉子圖像采集等。本文根據在線(xiàn)采集、分析、存儲圖像的需求,設計了嵌入式圖像采集系統,運用嵌入式芯片STM32對圖像信息進(jìn)行采集、顯示和存儲。
1 系統結構與功能
圖像采集系統以基于A(yíng)RM公司的Cortex—M3內核的STM32F103RBT6(以下簡(jiǎn)稱(chēng)STM32)處理器為核心,配合OV2640攝像頭和TFT液晶顯示器,是一款采集像素多、實(shí)時(shí)性好且成本低廉的圖像采集系統。

系統的硬件結構框圖如圖1所示,系統通過(guò)J—Link口實(shí)現程序在STM32上的仿真、在線(xiàn)調試,利用J—LINK仿真編程器將編譯之后的二進(jìn)制文件燒寫(xiě)到Flash中,系統每次上電時(shí)便可從Flash啟動(dòng)文件系統,圖像采集系統采用OV2640攝像頭模塊,輸出顯示采用2.4英寸TFT液晶顯示屏,可將采集到的數據保存在SD卡中。當存儲按鍵按下時(shí),系統接收中斷,同時(shí)將從OV2640攝像頭采集到的數據顯示在液晶顯示屏上。
2 硬件設計
2.1 CPU處理器
本系統用的是32位的Cortex-M3內核的STM32芯片STM32F103RBT6,支持Thumb2指令集,STM32F103RBT6內部的Flash有128K,SRAM大小為20 K,有64個(gè)增強I/O口、2個(gè)USART、2個(gè)12位的A/D轉換器。它的供電電壓為2.0~3.6 V,擁有省電模式,可以保證低功耗需求。CPU主頻最高可以達到72 MHz。
2.2 OV2640攝像頭
OV2640具有體積小、工作電壓低、兼容I2C總線(xiàn)接口等特點(diǎn)。通過(guò)SCCB總線(xiàn)控制,支持RawRGB、RGB(GRB4:2:2、RGB565/555/444)、YUV(4:2:2)和YCbCr(4:2:2)輸出格式,可以輸出整幀、二次轉換分辨率、取特定區域等方式的各種分辨率的8位或10位的圖像幀數據,UXGA(1 632×1 232)圖像最高達到15 fps。因此,編程者可選擇不同圖像質(zhì)量、數據格式,而且,OV2640的高靈敏度適合低照度環(huán)境,它的低電壓特性適合嵌入式開(kāi)發(fā)應用,攝像頭數據口連接CPU的示意圖如圖2所示。采用攝像頭的8位數據模式,攝像頭高8位接CPU的I/O口的低8位,低2位懸空。

2. 3 SCCB總線(xiàn)
SCCB(OmniVision Serial Camera Control Bus)與I2C總線(xiàn)協(xié)議類(lèi)似,使用SIO-0和SIO-1兩根數據線(xiàn)進(jìn)行傳輸和控制。SIO-1是控制線(xiàn),提供傳輸過(guò)程中的時(shí)鐘脈沖控制信號,SIO-0是串行雙向數據傳輸線(xiàn),根據控制信號通過(guò)串行的方式發(fā)送數據。在很多設計中,經(jīng)常采用I/O口模擬I2C總線(xiàn)的傳輸,對于SCCB,也可以采用這樣的方式。
采用I/O口模擬SCCB總線(xiàn)的要點(diǎn)如下:對于SCL所連接的引腳,在寄存器中設置為輸出,而SDA所接的引腳,在數據傳送過(guò)程中,基于IODIR值的改變,動(dòng)態(tài)改變引腳為輸入或輸出方式。
2.4 LCD顯示模塊
本設計所用的為2.4英寸的TFT液晶顯示屏,內部集成有ILI9320 LCD控制芯片,可以直接控制數據的顯示。ILI9320可以用來(lái)讀寫(xiě)寄存器、GRAM,還可顯示動(dòng)態(tài)圖形的RGB輸入接口。顯示控制芯片有RGB接口模式與i80系統接口模式,設計選用i80-system接口模式。
i80-system接口是通過(guò)設置IM[3:0]來(lái)決定的,同時(shí)這幾個(gè)位也決定了數據傳輸位數的模式,通過(guò)硬件設置IM0位高電平,IM1位高電平,把模式設置為了8位i80-system接口傳輸模式。連接示意圖如圖3所示。

要寫(xiě)數據到屏上顯示,只需要對寄存器0x0022進(jìn)行寫(xiě)操作即可,當這個(gè)寄存器的數據更新時(shí),地址指針(AC)會(huì )自動(dòng)增加或減小,讀數據也是同樣的道理。
2.5 SD卡接口電路設計
通常而言,SD卡電路設計有兩種模式:SPI模式和SD卡模式,由于引腳資源限制,對于連接STM32的方式,采用第一種設計電路,通過(guò)STM32上面的SPI接口來(lái)和SD卡進(jìn)行數據通信,引腳如圖4所示。

在SPI模式中,數據通過(guò)STM32的MOSI與MISO進(jìn)行傳送,SCK信號線(xiàn)用來(lái)提供工作時(shí)鐘,當SD卡收到復位命令(CMD0)時(shí),SD卡立即進(jìn)入SPI
模式。要注意的是,在發(fā)送CMD0之前須發(fā)送大于74個(gè)的時(shí)鐘周期;另外,在SD卡初始化時(shí),CLK時(shí)鐘頻率最大不能超過(guò)400 kHz。
3 軟件設計
3.1 系統初始化
系統初始化主要是對CPU時(shí)鐘進(jìn)行初始化,以及設置外圍電路的時(shí)鐘分頻比,設置中斷。其流程可描述如下:

3.2 攝像頭初始化
首先,通過(guò)SCCB總線(xiàn)設置OV2640的寄存器數據,主要是配置攝像頭輸出數據格式類(lèi)型和輸出圖像數據大小,達到初始化OV2640的目的OV2640初始化流程較為簡(jiǎn)單,偽代碼如下:


評論