学生在基于stm32的单片机程序,查到可以结合Matlab快速开发程序,有篇论文《基于Matlab的STM32软件快速开发方法》,有所介绍,但是整个过程并不是很清楚,尝试了一把,过程详细总结一下吧!
首先需要安装RapidSTM32开发模块,网址为https://www.aimagin.com/download/
点击上图的Download Now即可。
下载完成后解压,文件how_to_setup.txt中详细说明了安装步骤
How to install RapidSTM32 Blockset
=========================================================
1. Unzip rapidstm32_####.7z to any temporary directory.
(#### represents release version.)
2. Open Matlab
3. Open and run install_rapidstm32.m from Matlab environment
4. Install Keil RealView MDK for ARM (if not yet installed)
5. Install Microsoft dot NET Framework 3.5 (if not yet installed)
第1步已经完成了,下一步打开matlab,在edit中打开install_rapidstm32.m文件运行,这将完成此模块的安装,另外还有个uninstall_rapidstm32.m文件,即如果不想用此模块了,可以运行此文件卸载模块。
然后如果电脑上没有安装Keil RealView MDK for ARM,需要安装此程序,网上有破解版,按步骤正常安装就行。NET Framework 3.5也需要安装,不过貌似如果安装了VS,这个默认已经配置好了。
至此,模块就配置好了!
下面说说一个例子吧,此模块的官网上有不少资料,当然是英文的,但如果选择中文语言,就跳出404错误找不到网页,还是积极看英文吧,网址http://www.aimagin.com/learn/index.php/Learn_RapidSTM32_Home
另外在http://www.aimagin.com/learn/index.php/Your_First_Matlab/STM32_Program也讲了2个例子,基本也是一步一步教的,视频是在youtube上,看不了,不过最下面提供了例子和视频的下载链接,老外做东西就是厚道。
这里简单讲一个matlab协助产生正弦波的仿真例子:
首先用matlab产生正弦波的数据
clear
f=50;
w = 2*pi*f;
T = 1/f;
Ts = 1/(200*f);
t = 0:Ts:(T-Ts);
y = sin(w*t)+2;
plot(t,y)
即产生一个50Hz,时长一个周期0.02s的正弦波,采样周期0.0001s。y的值后面会用到,如何用,一会说。
matlab中输入simulink打开Simulink Library Browser,新建一个模型,保存,取名为sin_boxing。然后向模型中插入如下模块
Simulink->Sinks->Scope示波器
RapidSTM32 Blockset->Device Configuration->Setup System Clocks & SysTick系统时钟,如下
RapidSTM32 Blockset->On-Chip Peripherals->Arbitrary–Function Generator任意函数产生器,如下
此模块只需要一个出口就够了,所以双击此模块,在属性对话框中设置Mode为Arbitrary DAC1,如下
这时就变成一个接口了。
并如下连接
然后进行仿真设置,选择菜单栏Simulation/Configuration Parameters,选择Code Generation,Matlab2011b是选这个,其他版本的matlab可能不同。设置Target selection下的System target file为rapidstm32.tlc,language选为c,如下图
选择Code Generation下的RapidSTM32 Options,设置Cross-Compiler为Realview MDK,如下
下面设置加入的模块的参数,双击Arbitrary–Function Generator,设置Sample time为0.0001
在Data for DAC1中输入刚才产生的y的所有值,由于数值比较多,可以如下操作,在matlab的Command Window中输入y',即y的转置,复制显示的一列数值
粘贴到Data for DAC1中,点击Apply,数值自动变成如下格式
这时的数值是用;分号隔开的,这是一列,不能作为输入,需要转化为一行,方法很简单,定位到最后,在]后输入一个',即转置符
离开文本框,则自动转化为一行数据
设置完成,点击OK。
然后在空白处右击,弹出右键菜单,如下,点击Update Diagram
此后,matlab会快速更新、编译程序,编译成功后各模块变为红色。
设置工具栏上的仿真总时间为0.1,然后点击左边的三角号运行
运行结束后,双击示波器Scope,可以看到仿真结果
注意的是,在matlab的Command Window里会显示warning,不用管它,是设置的问题。
以上演示了matlab与RapidSTM32模块的联合仿真,当然这只是开始,后面可以将此matlab仿真程序转化为c代码,这才是此RapidSTM32模块真正功能所在,所以在RapidSTM32模块的帮助,本来需要用c编写的程序,现在全部转化在matlab中完成了,是不是很赞!具体实现参考文献和网上资料吧!