OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 6901|回复: 6

Matlab/simulink和STM32CubeMX的F407模型开发尝试

[复制链接]

8

主题

26

帖子

0

精华

初级会员

Rank: 2

积分
118
金钱
118
注册时间
2017-4-29
在线时间
23 小时
发表于 2020-5-31 15:01:07 | 显示全部楼层 |阅读模式
本帖最后由 shaobingqing 于 2020-5-31 15:14 编辑

有些行业早已经使用matlab/simulink进行建模,通过自动生成软件代码开发产品。偶然间听到STM32也可以这样做,所以想尝试下。于是参考网上说明,虽然踩到了一些坑,还好坑不深,完成了基于stm32f407的第一个程序,想借此记录一些,提醒以后不再掉坑。

首先准备如下软硬件
1. matlab版本R2016b
2. STM32CubeMX版本version 5.6.1
3. STM32_MAT_TARGET_V4.4.2
4. Keil MDK 5.29
5. 正点原子F407开发板

STM32CubeMX的用途是stm32f407的驱动初始配置作用,但是STM32CubeMX没法支持复杂的应用层程序设计,所以需要使用matlab/simulink。而STM32_MAT_TARGET作为中间件,起桥梁作用。最终生成的代码使用Keil MDK编译调试后,下载到开发板中执行。

具体步骤如下工作:
1. 安装Keil MDK 5.29,保证正常工作和下载,不是这里的重点故细节省略
2. 安装STM32CubeMX保证正常工作和下载,不是这里的重点故细节省略
3. STM32CubeMX工程设置:芯片初始化设置
新建工程,选择芯片,创建项目
1.png
设置时钟源
2.png

配置时钟
3.png
配置GPIO PF9/PF10
4.png

设置MDK目标,并生成代码
5.png
保存工程ioc文件后,文件夹如下
6.png
注意:ioc文件之后在simulink中需要用到。MDK-ARM中的uvprojx文件用来打开MDK调试程序。
打开MDK编译,0错误0警告
7.png
4. 安装matlab版本R2016b,保证simulink能够正常使用
5. 安装STM32_MAT_TARGET_V4.4.2,安装路径无特殊要求。
需要注意,stm官方最新下载版本是v5_6_0,但是安装完之后会发现模型无法在Simulink中运行,提示需要使用R2018b才行。我没有R2018b版本,所以只能使用V4.4.2。这里我尝试了好久才解决。
另外网上说需要先安装Matlab,再安装STM32_MAT_TARGET,这个没有验证过是否必须按此顺序。
6. 配置matlab/Simulink
先要设置包含路径如下,把STM32_MAT_TARGET,安装文件夹完全包含进来
8.png
打开simulink,建立一个空白模型。
simulink library browser中,此时能够找到如下STM32支持包。有可能需要重启Matlab
9.png
然后进行code Generation相关设置
10.png
设置cubeMX路径
11.png
解算步长也要设置
12.png


1.png
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

0

主题

61

帖子

0

精华

初级会员

Rank: 2

积分
62
金钱
62
注册时间
2018-12-27
在线时间
0 小时
发表于 2020-5-31 15:02:02 | 显示全部楼层
顶起,顶起,不要沉了啊
回复 支持 反对

使用道具 举报

8

主题

26

帖子

0

精华

初级会员

Rank: 2

积分
118
金钱
118
注册时间
2017-4-29
在线时间
23 小时
 楼主| 发表于 2020-5-31 15:18:01 | 显示全部楼层
7. 模型搭建
此时应该可以把模型拖入simulink窗口了。如之前所说,如果使用最新的en.stm32-mat_target_v5_6_0simulink会报错,提示需要使用R2018b版本
添加MCU Config模块,双击模块,添加ioc文件路径
13.png
添加GPIO模块,双击模块,选择PIN9、PIN10
14.png
添加脉冲模块,双击设置参数
添加常数模块,设置为0
15.png
示波器仿真结果
16.png
设置Matlab工作空间,保存simulink文件
17.png

回复 支持 反对

使用道具 举报

8

主题

26

帖子

0

精华

初级会员

Rank: 2

积分
118
金钱
118
注册时间
2017-4-29
在线时间
23 小时
 楼主| 发表于 2020-5-31 15:21:26 | 显示全部楼层
shaobingqing 发表于 2020-5-31 15:18
7. 模型搭建此时应该可以把模型拖入simulink窗口了。如之前所说,如果使用最新的en.stm32-mat_target_v5_6_ ...

8. 然后一键生成代码,本例中是点亮PF9/PF10的LED, PF9常亮,PF10闪烁
81.png
生成的代码需要使用MDK编译,下载,但是发现下载后LED完全没有反应。
Debug发现循环中变量remainAutoReloadTimerLoopVal_S一直为1,没有变化
82.png
而变量remainAutoReloadTimerLoopVal_S在中断函数HAL_SYSTICK_Callback中被减小到0,显然改函数未被调用
83.png
Systick_handler回调函数中添加中断函数HAL_SYSTICK_Callback,再次编译下载,LED如期点亮闪烁。
显然,simulink在生成代码时对systick的中断设置是有问题的。
84.png
所以,通过建模生成代码,对于系统复杂应用开发是有好处的,但显然驱动代码的学习还是十分有必要的,由于软件的不完备性,底层代码集成还是需要人工进行部分调整,对驱动代码的充分理解还是很有必要的。所以还是要跟着原子哥好好学习。


回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

新手上路

积分
26
金钱
26
注册时间
2020-6-25
在线时间
10 小时
发表于 2021-1-2 22:39:39 来自手机 | 显示全部楼层
我用的pulse,constant,比较器搭的模型可以实现灯闪烁
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
3
金钱
3
注册时间
2021-1-4
在线时间
0 小时
发表于 2021-1-4 10:10:37 | 显示全部楼层
请问Matlab与F407的模型开发相关,有资料推荐吗?
回复 支持 反对

使用道具 举报

0

主题

6

帖子

0

精华

新手上路

积分
28
金钱
28
注册时间
2019-11-27
在线时间
6 小时
发表于 2022-2-12 17:56:42 | 显示全部楼层
我尝试了N遍,灯闪不起来,学习受教,我看看回调函数。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-6 11:08

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表