許鵬程,李小波
(中煤科工集團(tuán)重慶研究院救援分院機(jī)器人研究所,重慶414000)
MATLAB與STM32CubeMX聯(lián)合的嵌入式開(kāi)發(fā)方法
許鵬程,李小波
(中煤科工集團(tuán)重慶研究院救援分院機(jī)器人研究所,重慶414000)
利用專門的軟件STM32Cube MX與MATLAB進(jìn)行嵌入式建模與仿真,仿真成功后,在編譯器中將其翻譯為高效的MDK C語(yǔ)言代碼,大大提高了嵌入式程序的開(kāi)發(fā)效率,縮短了開(kāi)發(fā)周期,并且可以同時(shí)利用MATLAB的代碼優(yōu)化工具箱,提高代碼質(zhì)量。實(shí)驗(yàn)結(jié)果表明,利用MATLAB與STM32Cube MX生成的代碼在目標(biāo)系統(tǒng)中運(yùn)行良好,在設(shè)計(jì)效率和易維護(hù)性方面優(yōu)于手工編寫的代碼。
STM32Cube MX;MATLAB;嵌入式系統(tǒng)
2014年ST公司推出了官方的STM32Cube MX工具,為基于STM32所有系列的上百種芯片的嵌入式開(kāi)發(fā)提供了強(qiáng)大的技術(shù)支持,使開(kāi)發(fā)人員能夠快速地完成STM32的開(kāi)發(fā)和維護(hù)工作。傳統(tǒng)的嵌入式開(kāi)發(fā)主要有兩種方法,一種是使用ST公司提供的固件庫(kù)函數(shù)來(lái)配置CPU,建立工程后調(diào)用芯片內(nèi)的各種功能;另一種是通過(guò)直接操作寄存器的方式使用STM32系列芯片。兩種方法均要求開(kāi)發(fā)者熟悉固件庫(kù)函數(shù)或者能夠準(zhǔn)確地掌握眾多寄存器結(jié)構(gòu)及其定義,使開(kāi)發(fā)者將大量精力花費(fèi)在芯片本身的操作上,而不能有效地進(jìn)行控制程序的算法設(shè)計(jì)。
MATLAB是美國(guó)Mathworks公司開(kāi)發(fā)的一款基于矩陣計(jì)算的高性能計(jì)算機(jī)軟件,其包含眾多的Simulink控制模塊,讓使用者能夠在短時(shí)間內(nèi)開(kāi)發(fā)出理想的控制程序。MATLAB2015B版本更是集成了最新的Embedded coder功能,能夠自動(dòng)生成在嵌入式芯片運(yùn)行的C語(yǔ)言代碼,同時(shí)還能夠?qū)Υa的結(jié)構(gòu)和芯片的RAM使用效率進(jìn)行優(yōu)化,可以大大提高用戶的開(kāi)發(fā)效率,降低開(kāi)發(fā)費(fèi)用。本文介紹針對(duì)ST公司STM32Cube MX所支持的芯片與MATLAB進(jìn)行聯(lián)合開(kāi)發(fā),并通過(guò)實(shí)例介紹基于MATLAB控制的STM32嵌入式快速開(kāi)發(fā)方法。
STM32-Matlab工具箱是ST公司推出的使用MATLAB的工具套件,使用STM32-Matlab工具箱能夠快速為STM32芯片開(kāi)發(fā)出基于MATLAB和Simulink的應(yīng)用模型,通過(guò)USB數(shù)據(jù)線連接芯片串口后可以進(jìn)行PIL(處理器循環(huán))實(shí)時(shí)仿真,同時(shí)生成仿真報(bào)告并給出優(yōu)化建議,大量節(jié)約開(kāi)發(fā)時(shí)間與成本。該工具箱含有ADC、CAN、GPIO、SPI、USART等STM32芯片所有外設(shè)模塊,并且能過(guò)通過(guò)MCU CONFIG模塊設(shè)置任意一款STM32Cube MX所支持的芯片與MATLAB所自帶的控制、函數(shù)模塊(如高通濾波、PID控制等)進(jìn)行聯(lián)合編程,然后使用Embedded coder生成基于STM32Cube HAL libraries的C語(yǔ)言代碼,而無(wú)需具體了解底層設(shè)備配置,不用手工編寫C語(yǔ)言代碼,能夠同時(shí)滿足對(duì)控制要求高而又有嵌入式編程需求的用戶。
使用STM32-Matlab工具箱,快速開(kāi)發(fā)過(guò)程包括建模、仿真(Normal、SIL、PIL三種模式)、代碼優(yōu)化、代碼移植、編譯、調(diào)試等。這里重點(diǎn)介紹建模、仿真與移植。
2.1 開(kāi)發(fā)環(huán)境的設(shè)置
為了保證軟件的兼容性、可操作性和版本的連續(xù)性以及計(jì)算機(jī)程序運(yùn)行的流暢性,需要合理配置相關(guān)軟件和硬件。經(jīng)過(guò)實(shí)驗(yàn)驗(yàn)證,在Microsoft Windows 7下使用STM32-Matlab模塊的最低軟硬件配置如下:
配置完成后,可在意法半導(dǎo)體公司的官方網(wǎng)站下載STM32Cube MX和STM32-Matlab軟件,下載完成后分別安裝好即可。
2.2 建模與仿真
當(dāng)成功安裝了STM32-Matlab工具箱后,新建一個(gè)Simulink mode,進(jìn)入Model configuration parameters模式,找到Code Generation中的System target file并將其設(shè)置更改為stm32.tlc,然后保存,打開(kāi)系統(tǒng)仿真庫(kù)(Simulink library),找到Target support package-STM32Adapter中的MCU CONFIG模塊,并將其添加到Simulink model 中,如圖1所示。
圖1 建模界面
雙擊該圖標(biāo),在彈出的Block parameters對(duì)話框中,單擊select STM32 configuration file,選擇通過(guò)STM32Cube MX已設(shè)置好外設(shè)的硬件目標(biāo)板芯片型號(hào)(本文選擇的是STM32F103ZET6,如圖2所示)并保存,然后根據(jù)設(shè)計(jì)需要,在Target support package-STM32Adapte中合理地選擇功能模塊(比如GPIO、USART等)進(jìn)行設(shè)計(jì)。對(duì)于應(yīng)用于實(shí)際系統(tǒng),在Simulink環(huán)境中可用多個(gè)子模塊建立嵌入系統(tǒng)的軟件模型。
圖2 選擇界面
2.3 生成代碼
在MATLAB/Simulink環(huán)境中建模并完成系統(tǒng)仿真的模型,選擇Simulink model中code命令中的子命令C/C++ code,并在利用Embedded coder功能后,會(huì)生成C語(yǔ)言代碼,其中包含用于建立工程的多個(gè).c文件和.h文件。選擇Keil vision5作為目標(biāo)嵌入式系統(tǒng)的軟件編譯環(huán)境。
在STM32CubeMX軟件中,把已經(jīng)設(shè)置好外設(shè)的目標(biāo)板芯片文件(IOC文件)進(jìn)行C語(yǔ)言自動(dòng)轉(zhuǎn)換,將會(huì)得到該型號(hào)芯片的底層硬件設(shè)備配置文件及驅(qū)動(dòng)程序,最后將Embedded coder生成的main.c代碼移植到STM32Cube MX生成的main.c文件中,對(duì)軟件程序工程進(jìn)行編譯,將編譯結(jié)果下載到目標(biāo)系統(tǒng)中執(zhí)行,即可完成設(shè)計(jì)工作。
實(shí)際工程中經(jīng)常需要對(duì)芯片進(jìn)行GPIO接口的操作,而且需要產(chǎn)生滿足一定要求的信號(hào)波形,下面的實(shí)例說(shuō)明如何利用Simulink自帶的函數(shù)發(fā)生器,快速操作I/O接口并通過(guò)DAC模塊轉(zhuǎn)換成需要的波形。本設(shè)計(jì)中讓STM32的DAC分別產(chǎn)生正弦信號(hào)(y=sin(0.5×x))以及單位脈沖信號(hào)波形。
3.1 使用Simulink生成波形函數(shù)
找到simulink library中的Sources庫(kù),將sine wave模塊和pulse generator模塊添加到新建的simulink model 中,同時(shí)在Target support package-STM32Adapter庫(kù)中,找到MCU CONFI以及DAC模塊,添加到simulink model中,按照上面要求的設(shè)置將system target file設(shè)為stm32.tlc,并按照設(shè)計(jì)要求將系統(tǒng)方框圖連接好,并保存,如圖3所示。
3.2 使用STM32CubeMX與MATLAB生成嵌入式工程文件
打開(kāi)STM32CubeMX程序,點(diǎn)擊generate source code basic on user setting功能,在Project settings面板中在toolchain中選擇MDK-RAM V5,將會(huì)生成名為Drivers、Inc、MDK-ARM、Src的4個(gè)文件夾,其包含了該芯片及外設(shè)的所有底層硬件驅(qū)動(dòng)代碼。
圖3 simulink使用界面
在Simulink中運(yùn)行Embedded code將會(huì)生成一個(gè)模型名_STM32文件夾,該文件中包含一系列.c及.h文件,將該文件夾中.c文件移動(dòng)到Src文件夾,.h文件文件移動(dòng)到Inc文件夾中,并將main.c中的代碼移植到MKD ARM文件夾中的main.c文件中。
將工程編譯好后,下載到目標(biāo)開(kāi)發(fā)板中并用示波器測(cè)量DAC1(見(jiàn)圖4)、DAC2(見(jiàn)圖5)端口輸出波形。
圖4 DAC1端口輸出波形
利用MATLAB與STM32Cube MX可以同時(shí)實(shí)現(xiàn)復(fù)雜的控制算法與嵌入式代碼編程,與傳統(tǒng)的開(kāi)發(fā)方式相比,無(wú)論在質(zhì)量上還是效率上均有較大提高,特別適合于對(duì)控制算法要求較高的嵌入式編程環(huán)境。
圖5 DAC2端口輸出波形
[1]ST Company.STM32-MAT/TARGET[EB/OL].[2016-05].http://www.st.com/content/st_com/en/products/development-tools/software-development-tools/stm32-softwar e-development-tools/stm32-utilities/stm32-mat-target.html.
[2]ST Company.STM32Cube initialization code generator[EB/ OL].[2016-05].http://w ww.stmicroelectronics.com.cn/ web/catalog/tools/FM147/CL1794/SC961/SS1533/PF2592 42?s_searchtype=partnumber.
許鵬程(碩士研究生),主要研究領(lǐng)域?yàn)闄C(jī)器人SLAM技術(shù)、STM32嵌入式編程;李小波(副研究員),主要研究方向?yàn)闄C(jī)器人控制理論與方法。
13Implementation of Intelligent Warehouse Based on EPC/ RFID and WSN[C]//Applied Mechanics and Materials, Trans Tech Publications,2012.
[4]Zhang B,Hu K,Zhu Y.Network Architecture and Energy A-nalysis of the Integration of RFID and Wireless Sensor Network[C]//2010 Chinese Control and Decision Conference, 2010:13791382.
[5]徐然,李文耀.一種可用于移動(dòng)支付的讀卡器設(shè)計(jì)研究[J].電視技術(shù),2013,37(5):8791.
[6]潘敏.音頻盾的設(shè)計(jì)與實(shí)現(xiàn)[D].北京:中國(guó)科學(xué)院大學(xué),2014.
[7]孟治國(guó).基于音頻接口的數(shù)據(jù)傳輸模塊設(shè)計(jì)[J].電子科技, 2013,26(3):4547.
[8]方武,盧愛(ài)紅,王典洪,等.基于智能手機(jī)音頻接口的便攜式環(huán)境感知系統(tǒng)[J].計(jì)算機(jī)測(cè)量與控制,2015,23(11):38073809.
[9]Hijack[EB/OL].[201604].http://web.eecs.umich.edu/~prabal/projects/hijack/.
[10]Kuo Y S,Verma S,Schmid T,et al.Hijacking power and bandwidth from the mobile phone's audio interface[C]// Proceedings of the First ACM Symposium on Computing for Development,2010:24.
[11]孟治國(guó).基于音頻線路傳輸數(shù)字信號(hào)的設(shè)計(jì)與應(yīng)用[J].電子設(shè)計(jì)工程,2014,22(14):99-102.
[12]胥京宇.恩智浦Quick Jack方案將智能手機(jī)音頻插孔轉(zhuǎn)變?yōu)槎喙δ茏怨╇姅?shù)據(jù)端口[J].世界電子元器件,2014(7):46-46.
[13]孫書鷹,陳志佳,寇超.新一代嵌入式微處理器STM32F103開(kāi)發(fā)與應(yīng)用[J].微計(jì)算機(jī)應(yīng)用,2010(12):59-63.
[14]陳勇,陸遙.基于AS3992的超高頻RFID閱讀器的設(shè)計(jì)及仿真[J].半導(dǎo)體光電,2013(1):41.
[15]歐陽(yáng)宏志,單長(zhǎng)虹,黃智偉.物聯(lián)網(wǎng)中UHF頻段RFID讀寫器設(shè)計(jì)[J].電子設(shè)計(jì)工程,2013,21(22):23-25.
鄧浩海,研究方向?yàn)橹悄苄畔⑻幚?薛健(碩士研究生),研究方向?yàn)榍度胧较到y(tǒng)及應(yīng)用。
Combined Embedded Development Method of MATLAB and STM32CubeMX
Xu Pengcheng,Li Xiaobo
(Robot Research Institute in Chongqing Research Institute of CCTEG,Chongqing 414000,China)
The specialized software MATLAB and STM32Cube MX are used to carry out the embedded modeling and simulation.After successful simulation,the compiler will translate it into a highly efficient MDK C language code,which can greatly improve the development efficiency of the embedded program,shorten the development cycle,and can also use the code optimization toolbox of MATLAB, that improves the quality of the code.The experimental results show that using MATLAB and STM32Cube MX generated code runs well in the target system in the design,the efficiency and maintain ability are better than the hand written codes.
STM32Cube MX;MATLAB;embedded system
TP368
A
(責(zé)任編輯:薛士然2016-05-03)
(責(zé)任編輯:薛士然2016-04-20)