余新栓
(陜西理工學院 電氣工程系,漢中 723000)
余新栓(講師),主要研究領域為嵌入式系統應用、計算機測量與控制。
在嵌入式應用軟件設計中,開發人員應該運用現代軟件工程思想和先進的軟件開發方法,快速完成軟件的開發和維護工作[1]。STM32系列微控制器是一款基于ARM Cortex-M3內核的高性能、低成本、低功耗的嵌入式應用產品。目前,編寫STM32應用程序主要有兩種方式。大部分學習使用STM32的用戶都從固件庫函數開始,通過使用ST公司提供的固件庫中的庫函數來配置CPU,建立工程后調用片內資源的各種功能。另外一些用戶不使用或很少使用庫,通過直接操作寄存器的方式使用STM32。上述方法需要花費一定的精力熟悉固件庫,或者要求熟悉眾多的寄存器結構及其定義,程序開發效率較低。
Matlab是由美國Mathworks公司發布的主要面對科學計算、可視化以及交互式程序設計的計算環境,在很大程度上擺脫了傳統非交互式程序設計語言(如C語言)的編輯模式,代表了當今國際科學計算軟件的先進水平。利用工具箱擴展 Matlab環境,可以解決應用領域內特定類型的問題[2]。本文介紹針對嵌入式ARM Cortex-M3內核STM32微控制器的目標模塊庫,并通過實例說明基于Matlab建模的STM32軟件快速開發方法。
RapidSTM32是一種針對STM32系列微控制器開發的Simulink目標模塊庫和設備驅動程序的工具套件。RapidSTM32在高性能的圖形編程語言、STM32微控制器應用之間架起了一座橋梁。該模塊庫利用MathWorks公司的Real-Time Workshop嵌入式編碼器的代碼生成能力,直接自動產生程序代碼,實現了數字IO、USART、PWM、ADC的等功能程序和工程的自動生成。其主要目標是幫助用戶(尤其是嵌入式系統初學者)實現諸如實時事件驅動、卡爾曼濾波等復雜的系統算法應用程序,而不需要了解底層的設備配置或調試。借助該模塊庫,用戶能夠利用可視化的交互式程序設計環境,不用手工編寫C或匯編語言代碼,就可以將在Matlab/Simulink下的建模算法翻譯轉換為基于STM32微控制器的嵌入式系統程序。
為保證軟件的統一性、一致性、可操作性和版本的連續性,并能夠在最小環境下開發成功,需要合理配置相關軟件。經實驗驗證,在Microsoft Windows XP SP2下使用RapidSTM32系統最低軟件配置如下:
◆ Matlab 2009a(version 7.8)
◆ Simulink 2009(version 7.3)
◆ Real-Time Workshop 2009(version 7.3)
◆ Real-Time Workshop Embedded Coder 2009 (version 5.3)
◆ RealView MDK for ARM(version 4.0)
◆ Microsoft.Net Framework(version 3.5)
配置完成后,在RapidSTM32開發模塊官方網站http://www.aimagin.com下載 RapidSTM32blockset,解壓后在Matlab 2009下打開并安裝RapidSTM32blockset即可。
利用RapidSTM32,基于Matlab的STM32軟件快速開發過程包括建模、代碼生成、工程編譯、運行調試等環節,如圖1所示[3]。這里重點介紹根據建模與代碼生成方法。
圖1 基于MATLAB的STM32軟件開發過程
2.2.1 建模與仿真
按照上面方法成功安裝了目標庫后,打開系統仿真工具箱Simulink,在庫瀏覽器中就會看到針對嵌入式ARM Cortex-M3STM32微控制器的目標模塊庫RapidSTM32 blockse。在Matlab 2009下為STM32軟件建立一個mdl文件。其中一個系統仿真模型中可以有一個或多個圖模塊。為了仿真STM32嵌入式軟件系統,首先需要加入系統時鐘設置和相應的STM32功能模塊模型。然后根據硬件目標板和系統工作環境的情況為STM32的功能模塊模型合理設置參數,比如DAC模塊的引腳安排、輸出數據來源等。對應于實際系統,在Simulink環境中用多個子模塊建立嵌入式系統軟件模型。
2.2.2 生成代碼
根據算法在Matlab/Simulink中建模并完成系統仿真后,選擇RealView MDK作為生成語言的種類,用Build model命令將所建立的模型轉換成MDK C代碼,會產生用于建立工程的多個.C文件和.h文件。選擇Keil μVision4作為目標嵌入式系統的軟件編譯環境。
用RealView MDK編譯環境構建工程,把模型生成的嵌入式系統軟件C語言代碼在KeilμVision4環境下編譯通過,下載到目標嵌入式系統的STM32中運行,觀察代碼運行情況,并與手工代碼運行情況進行對比。對生成的軟件程序完成工程進行編譯,編譯結果下載到目標系統中執行,可以滿足系統功能要求。
實際工程中經常需要產生滿足一定要求的信號波形。下面的實例說明如何通過模型化設計方法,利用Rapid-STM32模塊庫自動生成C語言代碼,快速實現控制STM32的DAC模塊的應用方法。本設計實例中,讓STM32的DAC產生y(t)=1.0*sin(w*t)+2函數波形。
首先編寫產生上述數學函數波形的運算式并運行。在Matlab命令窗口運行下面的運算式:
運行后得到繪制波形的各個參數,刪除掉說明信息文字后將計算波形數據整理成如下數組表達形式:[2.0000 2.0314 2.0628 2.0941 2.1253 2.1564 2.1874 2.2181 2.2487 2.2790 ……]。
在Simulink Library Browser窗口里,選擇File/New/Model命令,打開模塊設計窗口,新建一個模型并保存為sin_boxing.mdl。打開 Matlab/Simulink窗口,從Simulink中選擇示波器加入到sin_boxing模塊設計窗口,從Rapid-STM32庫中分別選擇Device Configuration下的系統時鐘設置與On-chip peripherals下的任意函數發生器模塊加入sin_boxing模塊設計窗口工作區,最后將各元件連接。
選擇 Simulation/Configuration Parameters命令,在Configuration Parameters窗口的Real-Time Workshop項目設置中,將Target selection選項中選擇System target file為rapidstm32.tlc,Language選項設置為C。在 Real-Time Workshop/rapidstm32/options項目設置中將輸出文件交叉編譯工具選擇為RealView MDK。
接下來設置各模塊參數,完成系統時鐘設置和DAC參數設置。設置DAC Mode為Arbitrary DAC1,將上面步驟中生成的數據復制到DAC數據欄,根據信號頻率將采樣時間設置為0.000 1s。所有參數設置完畢后,連續運行兩次Update Diagram命令兩次后保存。參數設置完成后構建的STM32嵌入式系統模型如圖2所示。
圖2 完成參數設置的STM32DAC仿真模型
運行模型后,可以觀察到如圖3所示的輸出波形,說明模型正確。在Matlab文件路徑窗口確定生成代碼輸出路徑后,在 Tool菜單下單擊 Real-Time Workshop/Build model命令開始自動生成MDK工程文件及代碼,命令窗口中開始輸出各種代碼文件生成信息,直至輸出如下信息形式,表示代碼文件生成過程結束。
圖3 軟件模型仿真輸出波形
按照前面確定的代碼文件輸出路徑,就可以發現自動生成的各種文件,如圖4所示。在MDK將生成的文件編譯成可執行文件下載到STM32目標板即可順利執行。
圖4 生成的部分文件
① 針對STM32微控制器目標系統的軟件開發,利用專用模塊庫建立嵌入式系統軟件仿真模型,實現系統軟件代碼自動生成。與手工編寫代碼的開發周期相比,大大縮短了STM32系統軟件的開發周期,節約了時間成本,加快了開發進度。
② 使用具有可視化、交互式程序設計環境,把圖形化的算法與模型設計方法應用于ARM Cortex-M3內核的STM32系列微控制器嵌入式軟件開發,降低了STM32系列微控制器程序設計難度,降低了軟件工程師的勞動強度。
[1]劉玉良,李剛,康凱.基于MATLAB的嵌入式系統軟件開發[J].天津大學學報,2008,41(5).
[2]http://www.mathworks.com/matlabcentral/newsreader/view_thread/255878.
[3]http://www.aimagin.com/.
[4]Stephen J Chapman.MATLAB編程影印版[M].2版.北京:科學出版社,2003.