邢方誠,王素珍,宗衛華,王濤
(青島大學 自動化工程學院,青島 266071)
?
基于STM32 CubeMX的高速嵌入式圖像采集系統*
邢方誠,王素珍,宗衛華,王濤
(青島大學 自動化工程學院,青島 266071)
摘要:設計了采用STM32F407VGT6芯片作為控制核心,OV2640攝像頭模塊進行圖像采集,基于ILI9341控制器的彩色液晶屏作為顯示終端的高速嵌入式圖像采集系統。本文介紹了系統的總體設計思路、各模塊的硬件連接方式、軟件編程思路,以及STM32 CubeMX軟件針對本系統的配置方法。
關鍵詞:STM32;CubeMX;OV2640;圖像采集系統
引言
隨著近年來對實時圖像采集系統的需求日益增大,本文介紹了一種基于STM32的高速圖像采集系統。系統中各個模塊均采用硬件接口設計,圖像采集速率可達30 fps,并且整個采集過程中實現了對處理器資源的零占用,為系統提供了很大的后續擴展空間。軟件編程方面使用目前流行的STM32 CubeMX圖形化芯片配置工具和MDK-ARM V5的組合,自動生成芯片硬件抽象層和中間層代碼,增強了代碼的執行效率和可靠性并且降低了設計難度。
1系統硬件設計

圖1 系統結構圖
系統結構圖如圖1所示。系統控制核心采用基于Cortex-M4內核的STM32F407VGT6芯片,該芯片內部具有可變靜態存儲控制器FSMC(Flexible Static Memory Controller)接口和數字攝像頭接口DCMI(Digital Camera Interface)。設計使用DCMI接口將攝像頭采集到的數據暫存到控制器內部的緩沖區內,然后通過內部存儲器直接訪問DMA(Direct Memory Access),將圖像數據發送給與FSMC接口相連的液晶屏顯示,或通過串口直接發送給計算機。
1.1STM32F407VGT6芯片
STM32F407VGT6是意法半導體推出的一款基于ARM Cortex-M4內核的高性能微控制器,隸屬于STM32 F4系列,搭載1 MB的Flash、192 KB的RAM,采用LQFP100封裝,主頻為168 MHz,整數計算能力可達210 DMIPS,提供3個12位的A/D轉換器和2個D/A轉換器、2個32位的通用定時器、3路I2C和SPI接口、4路USART加2路UART、USB接口和SD/MMC卡接口、可變靜態存儲控制器(FSMC)接口及數字攝像頭接口(DCMI)。
1.2OV2640攝像頭模塊
OV2640是OmniVision公司推出的一款低電壓CMOS圖像傳感器。通過SCCB(Serial Camera Control Bus)協議總線控制輸出圖像,最高分辨率可達1632×1232。在UXGA極速擴展圖形陣列(Ultra eXtended Graphics Array,又稱UVGA)1632×1232模式下圖像輸出可達15 fps,SVGA(Super VGA)800×600達30 fps,CIF模式下352×288可達60 fps。其內部集成DSP處理器、8位微處理器及10位A/D轉換器,可以實現對輸出圖像質量、大小、窗口位置等參數的調整。OV2640還提供了一個圖像壓縮引擎來提高處理能力,采用具有專利的傳感器技術為用戶提供清晰穩定的畫面。
1.3可變靜態存儲控制器接口(FSMC)
FSMC接口集成在STM32F405xx 和 STM32F407xx系列芯片之上,它有4種輸出模式,可以支持PC Card/Compact Flash、SRAM、PSRAM、NOR Flash和NAND Flash,具備FIFO緩沖區,其同步時鐘最高可達60 MHz。FSMC接口經過配置之后可以支持大多數的LCD液晶顯示器(Intel 8080 和 Motorola 6800 模式),采用FSMC接口掛載液晶屏的優點在于刷屏速度極快而且完全不消耗CPU資源。其中FSMC的SRAM模式A寫操作時序如圖2所示。

圖2 SRAM模式A寫操作時序圖
ILI9341模塊采用16位的80并口模式,包括16條數據線D[15:0]、讀信號RDX、寫信號WRX、片選信號CSX、數據命令選擇信號D/CX。其寫操作時序圖如圖3所示。對比圖2和圖3可以得出,FSMC的NEX、NOE、NWE和數據線分別與ILI9341的CSX、RDX、WRX和數據線對應。由于FSMC接口沒有提供數據命令選擇線(D/CX),文中將D/CX與FSMC的一條地址線連接,實質是把液晶屏當成一種SRAM來使用,當對特定地址進行操作時,D/CX被拉低便是寫命令,反之則是寫數據。設計中將D/CX連接到了FSMC 的A16地址線,使用BANK1(地址范圍為6000 0000h~6FFF FFFFh),因此,對應的寫數據地址為0x6002 0000,對應的寫寄存器地址為0x6000 0000。

圖3 ILI9341寫操作時序圖
1.4數字攝像頭接口(DCMI)
STM32F407系列芯片提供一個集成的攝像頭接口,可以與大多數的CMOS攝像頭模塊通過8~16位的并行數據總線連接,獲取視頻數據。接口最高可以接收高達54 MB/s的數據流,提供極性可編程的像素時鐘(PCLK)、行同步(HSYNC)、場同步(VSYNC)信號,支持拜爾、YCbCr 4:2:2、RGB565及JPEG等圖像傳輸模式。
設計中根據OV2640的初始化配置,將DCMI接口配置為HSYNC、VSYNC低電平有效,PCLK上升沿采樣數據。其采樣時序如圖4所示。當啟動DCMI傳輸命令后,等待一個場同步信號后,當每個行同步信號為高電平時,DCMI會在像素時鐘的上升沿采集數據,并存放在DCMI_DR寄存器中,然后通過DMA進行傳輸。

圖4 DCMI采樣時序圖
攝像頭與DCMI的連線如圖5所示,此外OV2640具有SCCB總線的控制信號(SDA和SCL)、掉電使能信號(PWDN)及復位信號(RST),與STM32的通用輸入/輸出口連接即可。

圖5 DCMI與OV2640連線
2系統軟件設計
軟件設計使用STM32 CubeMX平臺與MDK-ARM配合進行。STM32 CubeMX是意法半導體公司推出的一款PC端圖形化配置工具,支持STM32 F2/F3/F4/F0/L0全系列芯片,可以非常方便配置MCU的引腳、時鐘、外設等,并且支持自動生成工程項目文件,大大簡化了開發流程,適用于所有STM32產品HAL API,具有很強的通用性與擴展性。
2.1FSMC與DCMI在CubeMX中的配置方式
在CubeMX的Pinout頁面下Peripherals選項中將DCMI選擇為Slave 8 bits External Synchro,即8位外部同步模式,這里選擇8位數據模式是為了與OV2640的8條數據線對應,并且使用了行同步場、同步信號,而非內嵌同步信號。選擇外部同步模式是對于FSMC的配置,選中NE1片選信號,Memory type選擇LCD Interface,LCD register select選擇A16,Data選擇16。這里的LCD register select選擇為A16,即前文所介紹的液晶屏數據命令選擇線D/CX與A16地址線連接,數據位數選擇16是為了與液晶屏的16條數據線對應。配置界面如圖6所示。

圖6 配置界面
在CubeMX的Configuration頁面下點擊FSMC按鈕,彈出FSMC Configuration對話框,用戶可以根據實際需要對FSMC進一步進行配置,以獲得更好的性能表現。
在CubeMX的Configuration頁面下點擊DCMI按鈕,彈出DCMI Configuration對話框,在Parameter Settings對話框中將像素極性設置為上升沿采樣,行同步、場同步極性設置為低電平有效,采樣頻率設置為獲取所有幀。在DMA Settings選項卡中點擊ADD按鈕,添加一個DMA傳輸流。點擊DMA Request下方的空白選擇DCMI,系統會自動填寫剩余參數,這是因為在STM32F407芯片內DCMI固定使用DMA2 Stream1通道。
完成設置后點擊project菜單generate code命令,在彈出的project settings對話框中填寫保存路徑、工程名稱、工具鏈(本設計選擇MDK-ARM V5)等參數后即可自動生成工程。工程中已經包含了MCU的所有初始化代碼,用戶只需根據需要編寫外設驅動代碼即可。
2.2主程序設計
OV2640采用RGB565輸出模式將圖像傳輸到液晶屏上,主程序流程如圖7所示。

圖7 主程序流程圖
系統上電后首先進行MCU初始化操作,此段代碼已經由CubeMX生成,用戶無需修改。之后進行LCD的初始化操作,通過SCCB總線讀取OV2640的ID,若不存在或不是OV2640芯片,則會在液晶屏上顯示錯誤,確定OV2640的存在后再對OV2640執行初始化操作。鑒于OV2640的初始化代碼比較多,這里設計了OV2640初始化檢測功能(在主機MCU發送完8位數據后,判斷從機OV2640是否在第9個時鐘通過SDA發送低電平信號)。OV2640正常初始化之后根據輸出圖像的分辨率大小,在液晶屏指定一塊相應大小的顯示區域,并向其發送0x2C命令使其處于就緒狀態,然后啟動DCMI對應的DMA命令啟動捕獲。
這里調用HAL_DCMI_Start_DMA(hdcmi,DCMI_MODE_CONTINUOUS,Bank1_LCD_D,1)函數來啟動捕獲。該函數來自HAL API,共有4個入口參數:第1個參數為包含DCMI配置的結構體指針;第2個參數為捕獲模式,這里設置為連續捕獲;第3個參數為數據發送地址,這里要發送到液晶屏,所以設置為FSMC的寫數據地址,即前面介紹的0x6002 0000;第4個參數為需要發送的數據長度,這里設置為1即可。此外為保證圖像的連續性,需要在HAL_DCMI_FrameEventCallback函數中再次調用HAL_DCMI_Start_DMA函數,即每幀數據接收完成后再次啟動捕獲。
結語
實驗證明本系統工作穩定,采集到的畫面清晰流暢,如圖8所示。

圖8 硬件測試結果
由于全部采用硬件接口,啟動捕獲后實現了對MCU處理器資源的零占用,后續的功能添加,為智能家居控制、圖像實時處理、安全監控、無人機航拍等采用圖像傳感器產品設計打下了良好的基礎。
參考文獻
[1] ST公司.STM32F405xx/STM32F407xx芯片手冊[EB/OL].[2015-12].http://www.st.com/stonline/stappl/resourceSelector/app?page=fullResourceSelector&doctype=datasheet&LineID=11.
[2] ST公司.STM32 configuration and initialization C code generation[EB/OL].[2015-12].http://www.st.com/web/cn/catalog/tools/FM147/CL1794/SC961/SS1533/PF259242? icmp=pf259242_prom_stm32cube-long-promo_feb 2014.
[3] Omni Vison公司.OV2640 芯片手冊,2006.
[4] ILITEK公司.ILI9341 芯片手冊,2010.
[5] 王建,梁振濤,鄭文斌,等.STM32和OV2640的嵌入式圖像采集系統設計[J].單片機與嵌入式系統應用,2014(9):46-48.
結語
本文充分利用單片機的硬件資源實現了檢測車輛的功能。通過靈敏度的選擇,提高了在不同環境下的檢測精度,通過模擬實驗可以直觀地看到檢測卡上的顯示,故可以用于檢測車輛的存在。在此基礎之上,可以進一步完善和改進CAN通信部分的程序和相關設計,將本設計應用于有軌電車在道岔處的占用檢測,將軌道占用信息反映至相應的道岔控制系統及運營調度系統,來保障行車安全。
[1] 張永忠,張軍強,李穎宏.多路環形線圈車輛檢測器設計[J].電子技術應用,2013(11):23-26.
[2] 夏發欽.利用地感應線圈檢測機動車輛的原理與實現[D].武漢:武漢科技大學,2011.
[3] 邢磊.車輛檢測技術研究[D].重慶:重慶大學,2013.
劉倩(碩士研究生),研究方向為通信與信息系統應用。
High-speed Embedded Image Acquisition System Based on STM32 CubeMX
Xing Fangcheng,Wang Suzhen,Zong Weihua,Wang Tao
(College of Automation Engineering,Qingdao University,Qingdao 266071,China)
Abstract:A high-speed embedded image acquisition system is proposed,which takes STM32F407VGT6 as the control core,OV2640 as the image acquisition module,and the TFT LCD based on ILI9341 as the display terminal.The overall design ideas of the system,the hardware connection of each module,the software programming ideas and the configuration method of STM32 CubeMX software for this system are all introduced.
Key words:STM32;CubeMX;OV2640;image acquisition system
收稿日期:(責任編輯:薛士然2015-12-22) (責任編輯:薛士然2015-11-11)
中圖分類號:TN915.4
文獻標識碼:A
* 基金項目:國家自然科學基金委員會資助項目;青年科學基金資助項目(61501277)。