北京信息科技大學 自動化學院,北京100192
2015年,李克強總理的政府工作報告中將“互聯網+”正式被納入頂層設計,成為國家經濟社會發展的重要戰略。“互聯網+”計劃將重點促進以云計算、物聯網、大數據等為代表的新一代信息技術與現代制造業、生產性服務業等的融合創新,嵌入式技術作為物聯網里的重要環節將會得到更為廣泛的應用。
μC/OS-III(Micro Control Operation System Three)是一種基于ROM運行的、可刪減、可擴展、可升級、可固化、基于優先級的實時內核,能夠滿足當今的實時內核所需求的大部分功能。由于μC/OS-III支持靈活移植,廣泛適用在微處理器與控制器,性能優越性遠超大多數商業操作系統[1]。
在STM32芯片上移植μC/OS-III能夠大幅度提高芯片的應用水平。為了提高控制芯片的工作效率,本論文將研究如何將μC/OS-III移植到STM32F107中。STM32F107可以直接連接互聯網,運行速度極快并且兼顧STM32的必備功能[2]。實現μC/OS-III在STM32F107的移植和應用,提高芯片的處理功能,對于嵌入式系統的開發具有重要意義。
本次研究的嵌入式系統是以STM32F107為主控芯片,系統搭配有LCD觸摸屏和攝像頭。采用外部的穩定5V電源作為電源輸入,DC-DC電源模塊將5V降到3.3V為STM32供電;3.5吋電阻式顯示觸摸屏可以顯示信息;30萬像素攝像頭可進行外部實時圖像信息采集;SIM900A實現2G網絡通訊功能;USB接頭、Ethernet接口和串口可以實現與外界的連接功能[3]圖1為系統硬件關系圖。


STM32F107具有高達14個通信接口,并且含有CRC計算單元。芯片具有10/100 Internet MAC,DMA和SRAM(4K字節):硬件支持IEEE1588,所有封裝都支持MII和RMII接口。所以該芯片十分適合于嵌入式方面的設計應用[4]。攝像頭、顯示屏分別與STM32連接引腳如圖2所示。
硬件系統電源分配如圖3所示。首先通過外接5V作為系統的電源,然后通過AMS1117-3.3V產生穩定3.3V電壓。AMS1117是系列的電源模塊,不同的版本能夠通過外圍電阻調節實現1.25V~13.8V電壓輸出。通常都是采用的1.8V、2.5V、2.85V、3.3V和5V固定電壓的型號。本電路中在3.3V電壓的范圍下進行設計。輸出電流最大可達到800mA,電壓與電流都符合系統要 求。AMS1117-3.3V電壓調節電路的連接如圖4所示。
在我們試驗中與電路板,或者芯片的直接接觸機率較大,人體的極高靜電電壓沖擊下很容易就會造成系統內芯片工作異常,所以在電路中設計使用了兩個瞬態抑制二極管(TVS), 其 TVS具有瞬間吸收高能量的作用,并將兩級的電壓控制于預定值。本次設計中使用SMBJ3.3A、SMBJ5.0A,分別用于保護3.3V電路與5V電路[5]。電路原理圖如圖5所示。



此3.5in.電阻式顯示觸摸屏控制部分芯片XPT2046,這款芯片主要用在移動終端。該芯片具有采樣與保持、模數轉換、串口數據穩定輸出等功能。該芯片通過ADC采樣能夠感知壓力。XPT2046支持從1.5V到5.25V的低電壓I/O接口。片內集成溫度傳感器。芯片功耗可小于0.75mW。當采用觸摸屏模式時,最好設置成差分模式,這樣能夠極大程度上抵消掉驅動器開關操作時的寄生電阻和外部的電磁干擾造成的檢測誤差,進而大幅度地增強了轉換精準度[6]。顯示屏電路如圖6所示。

OV7670是1/6in.CMOS 圖像傳感器,可以達到30萬像素圖像采集效果。該模塊由SCCB 總線控制,能夠傳輸整幀、子采樣、截取顯示窗口等方式的全部分辨率8位圖影。VGA圖像最高達到30frame/s,能夠自如地把控圖像的質量、數據采集的數據格式和傳輸數據的格式。伽瑪曲線、白平衡、度、色度等都能夠用SCCB接口編程。
OV7670攝像頭模塊里面包含了一個AL422B芯片。AL422b 具有先進先出功能的存儲空間。攝像頭的所有動態內存的操作都是由內部動態內存控制器完成的[7]。PC影像架構要包含有640×480或者720×480字節的存儲空間,AL422B能夠提供超出一倍的存儲空間,對于提高視頻采集效率具有重要意義。OV7670的原理圖如圖7所示。
修改bsp.c和bsp.h文件。在bsp.c文件里只需修改局部的DWT代碼,DWT是CM3中的三種跟蹤源之一,要啟動跟蹤源就需要DEMCR寄存器中的TRCENA位置1,該寄存器的地址為0XE000EDFC。DWT組件中有許多寄存器,如果要用時鐘計時功能就需要將CTRL寄存器中的bit0位置1。至于對bsp.h的修改僅需進行一些頭文件的添加:

(1)修改os_cpu_c.c文件。在os_cpu_c.c的頭文件部分添加includes.h。
(2)修改os_cfg_app.h文件。它主要用于配置任務優先級、堆棧、μC/OS-III的系統時鐘節拍等[8]。可根據需要進行修改相關內容。
(3)修改SYSTEM文件夾內的sys.h文件。將SYSTEM_SUPPORT_UCOS將其定義為1,此時就是支持μC/OS-III系統。語句如下所示:
#define SYSTEM_SUPPORT_UCOS 1。系統移植后編譯運行驗證,如圖8所示。

LCD采用的是 NT35310液晶控制器,該控制器自己配有顯示內存,可以緩存一定的顯示數據,顯存的大小為320×480×18/8。采用的是16位的RGB565格式儲存色彩數據。通過NT35310指令來實現LCD屏的功能,NT3510的18位數據線和LCD GRAM對應關系來自由設置掃描方向。通過指令0x2A用于設定列的地址,這一個指令就能夠設置橫坐標。指令0x2B是用來設置縱軸坐標也就是y軸的指令,該指令的默認掃描方式是是在從左到右,從上到下的掃描方式。指令0x2C是用于寫 GRAM,通過這個指令在可以持續發送信息往 LCD里面GRAM輸入顏色數據。指令0x2E是用于讀 GRAM,也就是用于讀取NT35310的顯存。

在對TFTLCD顯示的軟件設置當中,首先進行復位和初始化的設置,指令0x2A與0x2B用于設定掃描方式,從而設置位置坐標。當NT35310接到指令0x2C后,有效數據位寬變為16位,此時能夠持續輸入LCD的GRAM 數據,然后寫入顏色數據并在LCD顯示相關信息。如果沒有寫GRAM指令,那么通過讀指令0x2E讀出數據,然后通過控制器處理。之后可以循環此流程或者退出工作。信息在TFTLCD顯示的程序流程如圖9所示。
此次程序設計采用QVGA 模式,以RGB565格式輸出顏色數據。由于有了FIFO,所以,現在只需要關心兩方面的程序設計:
首先,怎樣的程序設計才能將圖像信息存儲到FIFO里面,當打開設備后,第一個OV7670同步信號到達控制器后,FIFO寫數據指針復位,并且使能FIFO寫功能。當第二個OV7670數據到來時中斷寫功能,實現一幀數據的采集。存儲一幀圖像信息的流程圖見10所示。
其次,怎樣的代碼設計才能從FIFO里面讀取影像數據,首先要FIFO讀指針復位并且設置讀時鐘頻率,先讀取高字節數據再設置讀取低字節數據頻率并讀取低字節數據,一幀圖像就讀完了。圖11為讀取影像數據的流程圖。需要注意的是,為了避免數據不被覆蓋,在FIFO充滿存儲空間之前讀取FIFO數據。



通過OV7670的工作特點結合在STM32F107硬件和一系列軟件系統設計,設計出高效的視頻處理系統。如圖12為視頻采集和顯示的結果。將軟件μC/OS-III系統屏蔽,和非屏蔽系統相比,μC/OS-III系統在效率、穩定性、用戶使用靈活性方面都有明顯的提高。
基于μC/OS-III系統下的嵌入式物視頻處理系統。通過STM32F107為控制數據采集與傳輸的控制核心,該控制系統根據OV7670的工作特點結合在STM32F107硬件系統上的,給出了應用程序設計的流程圖和關鍵性的設計實現數據采集。通過設計的電路接口傳輸到控制器,通過控制器的控制實現對視頻數據在LCD顯示屏的顯示功能。通過實驗的測試,該系統實現了所設計的視頻數據處理功能。
此系統將圖像顯示技術、嵌入式編程技術、嵌入式系統移植技術等結合在一起。實現理想的視頻顯示、圖像采集等功能,所以要求本嵌入式系統要有十分高的穩定性、實時性等特點,對于開發μC/OS-III系統下的嵌入式設計具有重要的借鑒意義。
