MATLAB与STM32CubeMX联合的嵌入式开发方法
2016-11-26许鹏程李小波
许鹏程,李小波
(中煤科工集团重庆研究院救援分院机器人研究所,重庆414000)
MATLAB与STM32CubeMX联合的嵌入式开发方法
许鹏程,李小波
(中煤科工集团重庆研究院救援分院机器人研究所,重庆414000)
利用专门的软件STM32Cube MX与MATLAB进行嵌入式建模与仿真,仿真成功后,在编译器中将其翻译为高效的MDK C语言代码,大大提高了嵌入式程序的开发效率,缩短了开发周期,并且可以同时利用MATLAB的代码优化工具箱,提高代码质量。实验结果表明,利用MATLAB与STM32Cube MX生成的代码在目标系统中运行良好,在设计效率和易维护性方面优于手工编写的代码。
STM32Cube MX;MATLAB;嵌入式系统
引 言
2014年ST公司推出了官方的STM32Cube MX工具,为基于STM32所有系列的上百种芯片的嵌入式开发提供了强大的技术支持,使开发人员能够快速地完成STM32的开发和维护工作。传统的嵌入式开发主要有两种方法,一种是使用ST公司提供的固件库函数来配置CPU,建立工程后调用芯片内的各种功能;另一种是通过直接操作寄存器的方式使用STM32系列芯片。两种方法均要求开发者熟悉固件库函数或者能够准确地掌握众多寄存器结构及其定义,使开发者将大量精力花费在芯片本身的操作上,而不能有效地进行控制程序的算法设计。
MATLAB是美国Mathworks公司开发的一款基于矩阵计算的高性能计算机软件,其包含众多的Simulink控制模块,让使用者能够在短时间内开发出理想的控制程序。MATLAB2015B版本更是集成了最新的Embedded coder功能,能够自动生成在嵌入式芯片运行的C语言代码,同时还能够对代码的结构和芯片的RAM使用效率进行优化,可以大大提高用户的开发效率,降低开发费用。本文介绍针对ST公司STM32Cube MX所支持的芯片与MATLAB进行联合开发,并通过实例介绍基于MATLAB控制的STM32嵌入式快速开发方法。
1 STM32-Matlab工具箱
STM32-Matlab工具箱是ST公司推出的使用MATLAB的工具套件,使用STM32-Matlab工具箱能够快速为STM32芯片开发出基于MATLAB和Simulink的应用模型,通过USB数据线连接芯片串口后可以进行PIL(处理器循环)实时仿真,同时生成仿真报告并给出优化建议,大量节约开发时间与成本。该工具箱含有ADC、CAN、GPIO、SPI、USART等STM32芯片所有外设模块,并且能过通过MCU CONFIG模块设置任意一款STM32Cube MX所支持的芯片与MATLAB所自带的控制、函数模块(如高通滤波、PID控制等)进行联合编程,然后使用Embedded coder生成基于STM32Cube HAL libraries的C语言代码,而无需具体了解底层设备配置,不用手工编写C语言代码,能够同时满足对控制要求高而又有嵌入式编程需求的用户。
2 STM32使用Simulink模型快速开发过程
使用STM32-Matlab工具箱,快速开发过程包括建模、仿真(Normal、SIL、PIL三种模式)、代码优化、代码移植、编译、调试等。这里重点介绍建模、仿真与移植。
2.1 开发环境的设置
为了保证软件的兼容性、可操作性和版本的连续性以及计算机程序运行的流畅性,需要合理配置相关软件和硬件。经过实验验证,在Microsoft Windows 7下使用STM32-Matlab模块的最低软硬件配置如下:
配置完成后,可在意法半导体公司的官方网站下载STM32Cube MX和STM32-Matlab软件,下载完成后分别安装好即可。
2.2 建模与仿真
当成功安装了STM32-Matlab工具箱后,新建一个Simulink mode,进入Model configuration parameters模式,找到Code Generation中的System target file并将其设置更改为stm32.tlc,然后保存,打开系统仿真库(Simulink library),找到Target support package-STM32Adapter中的MCU CONFIG模块,并将其添加到Simulink model 中,如图1所示。
图1 建模界面
双击该图标,在弹出的Block parameters对话框中,单击select STM32 configuration file,选择通过STM32Cube MX已设置好外设的硬件目标板芯片型号(本文选择的是STM32F103ZET6,如图2所示)并保存,然后根据设计需要,在Target support package-STM32Adapte中合理地选择功能模块(比如GPIO、USART等)进行设计。对于应用于实际系统,在Simulink环境中可用多个子模块建立嵌入系统的软件模型。
图2 选择界面
2.3 生成代码
在MATLAB/Simulink环境中建模并完成系统仿真的模型,选择Simulink model中code命令中的子命令C/C++ code,并在利用Embedded coder功能后,会生成C语言代码,其中包含用于建立工程的多个.c文件和.h文件。选择Keil vision5作为目标嵌入式系统的软件编译环境。
在STM32CubeMX软件中,把已经设置好外设的目标板芯片文件(IOC文件)进行C语言自动转换,将会得到该型号芯片的底层硬件设备配置文件及驱动程序,最后将Embedded coder生成的main.c代码移植到STM32Cube MX生成的main.c文件中,对软件程序工程进行编译,将编译结果下载到目标系统中执行,即可完成设计工作。
3 应用实例
实际工程中经常需要对芯片进行GPIO接口的操作,而且需要产生满足一定要求的信号波形,下面的实例说明如何利用Simulink自带的函数发生器,快速操作I/O接口并通过DAC模块转换成需要的波形。本设计中让STM32的DAC分别产生正弦信号(y=sin(0.5×x))以及单位脉冲信号波形。
3.1 使用Simulink生成波形函数
找到simulink library中的Sources库,将sine wave模块和pulse generator模块添加到新建的simulink model 中,同时在Target support package-STM32Adapter库中,找到MCU CONFI以及DAC模块,添加到simulink model中,按照上面要求的设置将system target file设为stm32.tlc,并按照设计要求将系统方框图连接好,并保存,如图3所示。
3.2 使用STM32CubeMX与MATLAB生成嵌入式工程文件
打开STM32CubeMX程序,点击generate source code basic on user setting功能,在Project settings面板中在toolchain中选择MDK-RAM V5,将会生成名为Drivers、Inc、MDK-ARM、Src的4个文件夹,其包含了该芯片及外设的所有底层硬件驱动代码。
图3 simulink使用界面
在Simulink中运行Embedded code将会生成一个模型名_STM32文件夹,该文件中包含一系列.c及.h文件,将该文件夹中.c文件移动到Src文件夹,.h文件文件移动到Inc文件夹中,并将main.c中的代码移植到MKD ARM文件夹中的main.c文件中。
将工程编译好后,下载到目标开发板中并用示波器测量DAC1(见图4)、DAC2(见图5)端口输出波形。
图4 DAC1端口输出波形
结 语
利用MATLAB与STM32Cube MX可以同时实现复杂的控制算法与嵌入式代码编程,与传统的开发方式相比,无论在质量上还是效率上均有较大提高,特别适合于对控制算法要求较高的嵌入式编程环境。
图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.
许鹏程(硕士研究生),主要研究领域为机器人SLAM技术、STM32嵌入式编程;李小波(副研究员),主要研究方向为机器人控制理论与方法。
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]徐然,李文耀.一种可用于移动支付的读卡器设计研究[J].电视技术,2013,37(5):8791.
[6]潘敏.音频盾的设计与实现[D].北京:中国科学院大学,2014.
[7]孟治国.基于音频接口的数据传输模块设计[J].电子科技, 2013,26(3):4547.
[8]方武,卢爱红,王典洪,等.基于智能手机音频接口的便携式环境感知系统[J].计算机测量与控制,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]孟治国.基于音频线路传输数字信号的设计与应用[J].电子设计工程,2014,22(14):99-102.
[12]胥京宇.恩智浦Quick Jack方案将智能手机音频插孔转变为多功能自供电数据端口[J].世界电子元器件,2014(7):46-46.
[13]孙书鹰,陈志佳,寇超.新一代嵌入式微处理器STM32F103开发与应用[J].微计算机应用,2010(12):59-63.
[14]陈勇,陆遥.基于AS3992的超高频RFID阅读器的设计及仿真[J].半导体光电,2013(1):41.
[15]欧阳宏志,单长虹,黄智伟.物联网中UHF频段RFID读写器设计[J].电子设计工程,2013,21(22):23-25.
邓浩海,研究方向为智能信息处理;薛健(硕士研究生),研究方向为嵌入式系统及应用。
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
(责任编辑:薛士然2016-05-03)
(责任编辑:薛士然2016-04-20)