邢方誠,王素珍,宗衛(wèi)華,王濤
(青島大學(xué) 自動(dòng)化工程學(xué)院,青島 266071)
?
基于STM32 CubeMX的高速嵌入式圖像采集系統(tǒng)*
邢方誠,王素珍,宗衛(wèi)華,王濤
(青島大學(xué) 自動(dòng)化工程學(xué)院,青島 266071)
摘要:設(shè)計(jì)了采用STM32F407VGT6芯片作為控制核心,OV2640攝像頭模塊進(jìn)行圖像采集,基于ILI9341控制器的彩色液晶屏作為顯示終端的高速嵌入式圖像采集系統(tǒng)。本文介紹了系統(tǒng)的總體設(shè)計(jì)思路、各模塊的硬件連接方式、軟件編程思路,以及STM32 CubeMX軟件針對(duì)本系統(tǒng)的配置方法。
關(guān)鍵詞:STM32;CubeMX;OV2640;圖像采集系統(tǒng)
引言
隨著近年來對(duì)實(shí)時(shí)圖像采集系統(tǒng)的需求日益增大,本文介紹了一種基于STM32的高速圖像采集系統(tǒng)。系統(tǒng)中各個(gè)模塊均采用硬件接口設(shè)計(jì),圖像采集速率可達(dá)30 fps,并且整個(gè)采集過程中實(shí)現(xiàn)了對(duì)處理器資源的零占用,為系統(tǒng)提供了很大的后續(xù)擴(kuò)展空間。軟件編程方面使用目前流行的STM32 CubeMX圖形化芯片配置工具和MDK-ARM V5的組合,自動(dòng)生成芯片硬件抽象層和中間層代碼,增強(qiáng)了代碼的執(zhí)行效率和可靠性并且降低了設(shè)計(jì)難度。
1系統(tǒng)硬件設(shè)計(jì)
圖1 系統(tǒng)結(jié)構(gòu)圖
系統(tǒng)結(jié)構(gòu)圖如圖1所示。系統(tǒng)控制核心采用基于Cortex-M4內(nèi)核的STM32F407VGT6芯片,該芯片內(nèi)部具有可變靜態(tài)存儲(chǔ)控制器FSMC(Flexible Static Memory Controller)接口和數(shù)字?jǐn)z像頭接口DCMI(Digital Camera Interface)。設(shè)計(jì)使用DCMI接口將攝像頭采集到的數(shù)據(jù)暫存到控制器內(nèi)部的緩沖區(qū)內(nèi),然后通過內(nèi)部存儲(chǔ)器直接訪問DMA(Direct Memory Access),將圖像數(shù)據(jù)發(fā)送給與FSMC接口相連的液晶屏顯示,或通過串口直接發(fā)送給計(jì)算機(jī)。
1.1STM32F407VGT6芯片
STM32F407VGT6是意法半導(dǎo)體推出的一款基于ARM Cortex-M4內(nèi)核的高性能微控制器,隸屬于STM32 F4系列,搭載1 MB的Flash、192 KB的RAM,采用LQFP100封裝,主頻為168 MHz,整數(shù)計(jì)算能力可達(dá)210 DMIPS,提供3個(gè)12位的A/D轉(zhuǎn)換器和2個(gè)D/A轉(zhuǎn)換器、2個(gè)32位的通用定時(shí)器、3路I2C和SPI接口、4路USART加2路UART、USB接口和SD/MMC卡接口、可變靜態(tài)存儲(chǔ)控制器(FSMC)接口及數(shù)字?jǐn)z像頭接口(DCMI)。
1.2OV2640攝像頭模塊
OV2640是OmniVision公司推出的一款低電壓CMOS圖像傳感器。通過SCCB(Serial Camera Control Bus)協(xié)議總線控制輸出圖像,最高分辨率可達(dá)1632×1232。在UXGA極速擴(kuò)展圖形陣列(Ultra eXtended Graphics Array,又稱UVGA)1632×1232模式下圖像輸出可達(dá)15 fps,SVGA(Super VGA)800×600達(dá)30 fps,CIF模式下352×288可達(dá)60 fps。其內(nèi)部集成DSP處理器、8位微處理器及10位A/D轉(zhuǎn)換器,可以實(shí)現(xiàn)對(duì)輸出圖像質(zhì)量、大小、窗口位置等參數(shù)的調(diào)整。OV2640還提供了一個(gè)圖像壓縮引擎來提高處理能力,采用具有專利的傳感器技術(shù)為用戶提供清晰穩(wěn)定的畫面。
1.3可變靜態(tài)存儲(chǔ)控制器接口(FSMC)
FSMC接口集成在STM32F405xx 和 STM32F407xx系列芯片之上,它有4種輸出模式,可以支持PC Card/Compact Flash、SRAM、PSRAM、NOR Flash和NAND Flash,具備FIFO緩沖區(qū),其同步時(shí)鐘最高可達(dá)60 MHz。FSMC接口經(jīng)過配置之后可以支持大多數(shù)的LCD液晶顯示器(Intel 8080 和 Motorola 6800 模式),采用FSMC接口掛載液晶屏的優(yōu)點(diǎn)在于刷屏速度極快而且完全不消耗CPU資源。其中FSMC的SRAM模式A寫操作時(shí)序如圖2所示。
圖2 SRAM模式A寫操作時(shí)序圖
ILI9341模塊采用16位的80并口模式,包括16條數(shù)據(jù)線D[15:0]、讀信號(hào)RDX、寫信號(hào)WRX、片選信號(hào)CSX、數(shù)據(jù)命令選擇信號(hào)D/CX。其寫操作時(shí)序圖如圖3所示。對(duì)比圖2和圖3可以得出,F(xiàn)SMC的NEX、NOE、NWE和數(shù)據(jù)線分別與ILI9341的CSX、RDX、WRX和數(shù)據(jù)線對(duì)應(yīng)。由于FSMC接口沒有提供數(shù)據(jù)命令選擇線(D/CX),文中將D/CX與FSMC的一條地址線連接,實(shí)質(zhì)是把液晶屏當(dāng)成一種SRAM來使用,當(dāng)對(duì)特定地址進(jìn)行操作時(shí),D/CX被拉低便是寫命令,反之則是寫數(shù)據(jù)。設(shè)計(jì)中將D/CX連接到了FSMC 的A16地址線,使用BANK1(地址范圍為6000 0000h~6FFF FFFFh),因此,對(duì)應(yīng)的寫數(shù)據(jù)地址為0x6002 0000,對(duì)應(yīng)的寫寄存器地址為0x6000 0000。
圖3 ILI9341寫操作時(shí)序圖
1.4數(shù)字?jǐn)z像頭接口(DCMI)
STM32F407系列芯片提供一個(gè)集成的攝像頭接口,可以與大多數(shù)的CMOS攝像頭模塊通過8~16位的并行數(shù)據(jù)總線連接,獲取視頻數(shù)據(jù)。接口最高可以接收高達(dá)54 MB/s的數(shù)據(jù)流,提供極性可編程的像素時(shí)鐘(PCLK)、行同步(HSYNC)、場同步(VSYNC)信號(hào),支持拜爾、YCbCr 4:2:2、RGB565及JPEG等圖像傳輸模式。
設(shè)計(jì)中根據(jù)OV2640的初始化配置,將DCMI接口配置為HSYNC、VSYNC低電平有效,PCLK上升沿采樣數(shù)據(jù)。其采樣時(shí)序如圖4所示。當(dāng)啟動(dòng)DCMI傳輸命令后,等待一個(gè)場同步信號(hào)后,當(dāng)每個(gè)行同步信號(hào)為高電平時(shí),DCMI會(huì)在像素時(shí)鐘的上升沿采集數(shù)據(jù),并存放在DCMI_DR寄存器中,然后通過DMA進(jìn)行傳輸。
圖4 DCMI采樣時(shí)序圖
攝像頭與DCMI的連線如圖5所示,此外OV2640具有SCCB總線的控制信號(hào)(SDA和SCL)、掉電使能信號(hào)(PWDN)及復(fù)位信號(hào)(RST),與STM32的通用輸入/輸出口連接即可。
圖5 DCMI與OV2640連線
2系統(tǒng)軟件設(shè)計(jì)
軟件設(shè)計(jì)使用STM32 CubeMX平臺(tái)與MDK-ARM配合進(jìn)行。STM32 CubeMX是意法半導(dǎo)體公司推出的一款PC端圖形化配置工具,支持STM32 F2/F3/F4/F0/L0全系列芯片,可以非常方便配置MCU的引腳、時(shí)鐘、外設(shè)等,并且支持自動(dòng)生成工程項(xiàng)目文件,大大簡化了開發(fā)流程,適用于所有STM32產(chǎn)品HAL API,具有很強(qiáng)的通用性與擴(kuò)展性。
2.1FSMC與DCMI在CubeMX中的配置方式
在CubeMX的Pinout頁面下Peripherals選項(xiàng)中將DCMI選擇為Slave 8 bits External Synchro,即8位外部同步模式,這里選擇8位數(shù)據(jù)模式是為了與OV2640的8條數(shù)據(jù)線對(duì)應(yīng),并且使用了行同步場、同步信號(hào),而非內(nèi)嵌同步信號(hào)。選擇外部同步模式是對(duì)于FSMC的配置,選中NE1片選信號(hào),Memory type選擇LCD Interface,LCD register select選擇A16,Data選擇16。這里的LCD register select選擇為A16,即前文所介紹的液晶屏數(shù)據(jù)命令選擇線D/CX與A16地址線連接,數(shù)據(jù)位數(shù)選擇16是為了與液晶屏的16條數(shù)據(jù)線對(duì)應(yīng)。配置界面如圖6所示。
圖6 配置界面
在CubeMX的Configuration頁面下點(diǎn)擊FSMC按鈕,彈出FSMC Configuration對(duì)話框,用戶可以根據(jù)實(shí)際需要對(duì)FSMC進(jìn)一步進(jìn)行配置,以獲得更好的性能表現(xiàn)。
在CubeMX的Configuration頁面下點(diǎn)擊DCMI按鈕,彈出DCMI Configuration對(duì)話框,在Parameter Settings對(duì)話框中將像素極性設(shè)置為上升沿采樣,行同步、場同步極性設(shè)置為低電平有效,采樣頻率設(shè)置為獲取所有幀。在DMA Settings選項(xiàng)卡中點(diǎn)擊ADD按鈕,添加一個(gè)DMA傳輸流。點(diǎn)擊DMA Request下方的空白選擇DCMI,系統(tǒng)會(huì)自動(dòng)填寫剩余參數(shù),這是因?yàn)樵赟TM32F407芯片內(nèi)DCMI固定使用DMA2 Stream1通道。
完成設(shè)置后點(diǎn)擊project菜單generate code命令,在彈出的project settings對(duì)話框中填寫保存路徑、工程名稱、工具鏈(本設(shè)計(jì)選擇MDK-ARM V5)等參數(shù)后即可自動(dòng)生成工程。工程中已經(jīng)包含了MCU的所有初始化代碼,用戶只需根據(jù)需要編寫外設(shè)驅(qū)動(dòng)代碼即可。
2.2主程序設(shè)計(jì)
OV2640采用RGB565輸出模式將圖像傳輸?shù)揭壕辽希鞒绦蛄鞒倘鐖D7所示。
圖7 主程序流程圖
系統(tǒng)上電后首先進(jìn)行MCU初始化操作,此段代碼已經(jīng)由CubeMX生成,用戶無需修改。之后進(jìn)行LCD的初始化操作,通過SCCB總線讀取OV2640的ID,若不存在或不是OV2640芯片,則會(huì)在液晶屏上顯示錯(cuò)誤,確定OV2640的存在后再對(duì)OV2640執(zhí)行初始化操作。鑒于OV2640的初始化代碼比較多,這里設(shè)計(jì)了OV2640初始化檢測功能(在主機(jī)MCU發(fā)送完8位數(shù)據(jù)后,判斷從機(jī)OV2640是否在第9個(gè)時(shí)鐘通過SDA發(fā)送低電平信號(hào))。OV2640正常初始化之后根據(jù)輸出圖像的分辨率大小,在液晶屏指定一塊相應(yīng)大小的顯示區(qū)域,并向其發(fā)送0x2C命令使其處于就緒狀態(tài),然后啟動(dòng)DCMI對(duì)應(yīng)的DMA命令啟動(dòng)捕獲。
這里調(diào)用HAL_DCMI_Start_DMA(hdcmi,DCMI_MODE_CONTINUOUS,Bank1_LCD_D,1)函數(shù)來啟動(dòng)捕獲。該函數(shù)來自HAL API,共有4個(gè)入口參數(shù):第1個(gè)參數(shù)為包含DCMI配置的結(jié)構(gòu)體指針;第2個(gè)參數(shù)為捕獲模式,這里設(shè)置為連續(xù)捕獲;第3個(gè)參數(shù)為數(shù)據(jù)發(fā)送地址,這里要發(fā)送到液晶屏,所以設(shè)置為FSMC的寫數(shù)據(jù)地址,即前面介紹的0x6002 0000;第4個(gè)參數(shù)為需要發(fā)送的數(shù)據(jù)長度,這里設(shè)置為1即可。此外為保證圖像的連續(xù)性,需要在HAL_DCMI_FrameEventCallback函數(shù)中再次調(diào)用HAL_DCMI_Start_DMA函數(shù),即每幀數(shù)據(jù)接收完成后再次啟動(dòng)捕獲。
結(jié)語
實(shí)驗(yàn)證明本系統(tǒng)工作穩(wěn)定,采集到的畫面清晰流暢,如圖8所示。
圖8 硬件測試結(jié)果
由于全部采用硬件接口,啟動(dòng)捕獲后實(shí)現(xiàn)了對(duì)MCU處理器資源的零占用,后續(xù)的功能添加,為智能家居控制、圖像實(shí)時(shí)處理、安全監(jiān)控、無人機(jī)航拍等采用圖像傳感器產(chǎn)品設(shè)計(jì)打下了良好的基礎(chǔ)。
參考文獻(xiàn)
[1] ST公司.STM32F405xx/STM32F407xx芯片手冊(cè)[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 芯片手冊(cè),2006.
[4] ILITEK公司.ILI9341 芯片手冊(cè),2010.
[5] 王建,梁振濤,鄭文斌,等.STM32和OV2640的嵌入式圖像采集系統(tǒng)設(shè)計(jì)[J].單片機(jī)與嵌入式系統(tǒng)應(yīng)用,2014(9):46-48.
結(jié)語
本文充分利用單片機(jī)的硬件資源實(shí)現(xiàn)了檢測車輛的功能。通過靈敏度的選擇,提高了在不同環(huán)境下的檢測精度,通過模擬實(shí)驗(yàn)可以直觀地看到檢測卡上的顯示,故可以用于檢測車輛的存在。在此基礎(chǔ)之上,可以進(jìn)一步完善和改進(jìn)CAN通信部分的程序和相關(guān)設(shè)計(jì),將本設(shè)計(jì)應(yīng)用于有軌電車在道岔處的占用檢測,將軌道占用信息反映至相應(yīng)的道岔控制系統(tǒng)及運(yùn)營調(diào)度系統(tǒng),來保障行車安全。
[1] 張永忠,張軍強(qiáng),李穎宏.多路環(huán)形線圈車輛檢測器設(shè)計(jì)[J].電子技術(shù)應(yīng)用,2013(11):23-26.
[2] 夏發(fā)欽.利用地感應(yīng)線圈檢測機(jī)動(dòng)車輛的原理與實(shí)現(xiàn)[D].武漢:武漢科技大學(xué),2011.
[3] 邢磊.車輛檢測技術(shù)研究[D].重慶:重慶大學(xué),2013.
劉倩(碩士研究生),研究方向?yàn)橥ㄐ排c信息系統(tǒng)應(yīng)用。
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
收稿日期:(責(zé)任編輯:薛士然2015-12-22) (責(zé)任編輯:薛士然2015-11-11)
中圖分類號(hào):TN915.4
文獻(xiàn)標(biāo)識(shí)碼:A
* 基金項(xiàng)目:國家自然科學(xué)基金委員會(huì)資助項(xiàng)目;青年科學(xué)基金資助項(xiàng)目(61501277)。