楊才生,吳狀肥,萬國義
(上汽通用五菱汽車股份有限公司,廣西 柳州 545007)
關鍵字:STM32F407;OV2640;嵌入式系統
隨著計算機技術的發展,嵌入式系統越來越多應用在各種微型控制系統中,如智能駕駛系統、機器人視覺系統、場景監控系統等,這些系統中大量使用攝像頭,雖然市面上有很多攝像頭可直接使用,但是具有個性化的攝像頭還是需要用戶自己設計和研究,比如要求攝像頭嵌入到控制系統中、要求具有視頻捕捉功能、要求具有圖像識別、對象跟蹤功能等。在智能駕駛系統中中的圖像采集與處理技術,在汽車主動安全領域具有非常重要的意義。
一套完善的圖像采集系統由硬件和軟件兩個部分組成,其中硬件部分主要包括微控制器、攝像頭、圖像存儲設備等,軟件部分主要用來驅動攝像頭,并實現圖像的傳輸、存儲與處理等任務。
(1)電源電路
電源電路用于給視覺系統提供功率需求,本設計要求電源模塊能將24V車載電源轉化成+5V和+3.3V兩個級別,其中+5V給攝像頭等模塊供電,+3.3V給MCU供電。圖1是24V轉+5V的電路原理圖:

圖1 24伏轉5伏電源電路
圖1中,MURB1620CT用于防止電源反接,SMAJ36A通過吸收浪涌沖擊實現對電路中的元器件的保護,LM2575S型調壓器可輸出高達3A的穩定電流,從而為攝像頭等外設的工作提供了保證。
為了使STM32型微控制器正常運行,需要給其提供3.3V穩定的電壓,圖2所示為采用REG1117-3.3型集成三端穩壓器實現+5V到+3.3V的轉換:

圖2 5伏轉3.3伏電壓
作為常用的降壓型穩壓器,REG1117-3.3可將 4.8~10V的輸入電壓穩定在+3.3V,且保證輸出電流高達 800mA,完全滿足圖像采集系統微處理器的功耗需求。
(2)復位電路
STM32F407是低電平復位的,所設計的復位電路如圖3所示,其中R13和C23構成了上電復位電路:

圖3 復位電路
(3)JTAG調試接口

圖4 JTAG調試接口
通過JTAG調試接口既可對STM32F407內部數據進行監測,又可實現 ISP(In-System Programmer,在系統編程),便于對微控制器的FLASH等器件進行編程。圖4所示為本設計所采用的20引腳JTAG調試接口。
STM32F407自帶數字同步并行攝像頭(DCMI)接口,該接口能夠接收外部8~14位CMOS攝像頭模塊發出的像素數據流。STM32F407為OV2640型攝像頭模塊提供的接口如圖5所示:

圖5
在該接口中使用了微控制器的如下引腳資源:
DCMI(D[0:7]):用于接 OV2640型攝像頭模塊的數據輸出引腳;
DCMI_HSYNC:用于接OV2640型攝像頭模塊的水平同步信號引腳;
DCMI_VSYNC:用于接OV2640型攝像頭模塊的垂直同步信號引腳;
DCMI_PIXCLK:用于接 OV2640型攝像頭模塊的像素時鐘信號引腳。
STM32F407自帶的標準的SD卡接口使用4位SDIO接口驅動,最高通信速度可達 48Mhz(分頻器旁路時), 最高每秒可傳輸數據 24M字節,完全滿足圖像傳輸速度的要求,SD卡的接口電路如圖6所示:

圖6 SD卡接口電路
OV2640的初始化
OV2640型攝像頭模塊的初始化包括以下幾個方面的配置和操作:
(1)選擇控制對象為圖像傳感器,通過向 RA_DLMT寄存器寫入0x01實現;
(2)軟復位OV2640,通過COM7寄存器寫入0x80實現;
(3)設置圖像參數,包括:輸出模式,白平衡,亮度,對比度,特效,分辨率等。
圖像格式控制
由于YUV422格式的圖像直接讀取其像素的Y分量即可獲得該像素的灰度信息,因此驅動 OV2640時優先考慮YUV422格式圖像數據的輸出。OV2640輸出YUV422格式圖像數據需要依次通過以下配置實現:
(1)通過向RA_DLMT寄存器寫0x00選擇控制對象為攝像頭模塊內置DSP。
(2)通過 IMAGE_MODE寄存器切換攝像頭模塊的數據輸出格式。
(3)通過CTRL0寄存器控制攝像頭模塊的使能。
圖像傳感器采集到的像素數據緩存在 32位數據寄存器DCMI_DR中,然后通過DMA傳輸至外部存儲設備。STM32F407的直接存儲器訪問DMA可以在無需任何CPU操作的情況下通過DMA快速移動數據實現外設與存儲器之間的高速數據傳輸,這樣節省的CPU資源可供其它操作使用。
在本設計中,DCMI每次觸發DMA請求時DMA仲裁器根據當前請求的優先級啟動圖像數據流從 DCMI_DR到FIFO的傳輸。當圖像數據量達到FIFO的閾值時,FIFO中緩存的圖像數據被轉移至外部SRAM中。當數據流項數寄存器達到零時DCMI請求DMA終止當前的數據傳輸事務。
為了實現大量圖像數據的存儲,圖像緩沖區中的像素數據要被及時轉移至SD卡中,使用SD卡進行圖像存儲主要通過以下函數來實現:
//寫SD卡
//buf:寫數據緩存區
//sector:扇區地址
//cnt:扇區個數
//返回值,錯誤狀態,0,正常,其它,錯誤
u8 SD_WriteDisk(u8*buf,u32 sector,u8 cnt)
{
u8 sta=SD_OK;
u8 n;
long long lsector=sector;
lsector<<=9;
if((u32)buf%4!=0)
{
for(n=0;n { memcpy(SDIO_DATA_BUFFER,buf,512); sta=SD_WriteBlock(SDIO_DATA_BUFFER,lsector+512*n,512); buf+=512; } }else { if(cnt==1)sta=SD_WriteBlock(buf,lsector,512); else sta=SD_WriteMultiBlocks(buf,lsector,512,cnt); } return sta; } 本文基于STM32F407型微處理器和OV2640型攝像頭加SD卡的設計方案不僅成本低廉,而且功能齊全,整體效果較好,硬件平臺設備較為成熟。在軟件方面,程序流程嚴謹,邏輯嚴密,而且驅動程序較為完善,各個模塊之間不存在耦合性,系統運行穩 定、可靠。4 結束語