STM32F407ZGTx+simulink+STM32CubeMX+keil stm32-mat/target实现simulink生成单片机代码

配置环境

使用的板子是正点原子STM32F407ZGT6,这个应该没有要求,任意版本均可。
stm32 mat/target,是一个matlab插件。可能不会再更新了,起到的作用是让simulink生成代码时触发cubemx。对版本的要求比较苛刻,我采用的是最新版本,在开发文档中可见对matlab与cubemx版本有要求:
stm32-mat/target对matlab、cubemx的版本要求
实际测试中我尝试了matlab R2018a与matlab R2020b,以及CubeMX V6.3.0,代码生成都存在问题。目前的尝试中没有发现第二种能够正常运行mat/target的环境,建议按照开发文档要求的版本使用,即MATLAB R2018b+STM32CubeMX V5.6.0
安装方法:setup后找到安装的文件夹,然后在matlab界面设置路径->添加并包含子文件夹->导入setup的安装路径,如图,STM32那一级文件夹是我的安装路径:
导入插件到matlab

STM32CubeMX,注意选要求的版本

MATLAB R2018b

引用其他人Keil 5.27,CubeMX在5.6只支持Keil 5.27的生成(或许对Keil高版本也可以用,没有尝试)

或许使用Keil之外的软件也可以进行烧写,即STM32CubeMX配置时生成器的更换,暂时没有尝试。

运行流程

STM32CubeMX生成.ioc工程文件

我配置了烧写端口(使用ST-link仿真器)与晶振时间端口,然后设置PF9与PF10为GPIO output(我板子上LED灯的端口),共占用8个
设置烧写口为JTAG4pin形式
两个LED灯端口

然后进行工程设置,重点是ToolChain/IDE ,这里我们选择MDK-ARM V5.27,适配Keil 5.27版本
工程设置
这里重点是第一栏,最好选择Copy only the necessary library files,否则项目的Drivers会变得很大(100M+),不便于项目移动
工程设置
到这里之后按Ctrl+S保存项目即可,无需点击generate code,路径下就会生成一个.ioc文件

Simulink

STM32_Config

首先在matlab里使用cd切到.ioc所在路径(否则simulink生成会出问题),然后打开simulink,先拖入STM32_Config模块:
MCU config,读取.ioc路径
在其内部点击Select STM32 configuration file,选择路径下的.ioc,完成config链接。
MCU config内部配置

simulink config

然后进行simulink工程config,我设置如下:
将解算器设置为离散化,并给出步长(这个步长应该和单片机频率无关,估计只是在仿真里用)
Solver离散设置
代码生成这里的配置要改成使用stm32.tlc
stm32.tlc
有一些教程指出这里的三个comments框也要打上,我使用中没有出现明显问题,这里不打或许无影响(我观察中仍然生成了注释,不知道这里勾选有什么影响),如果发现有问题可以勾选试一下。
Comments配置
这一页中要设定STM32CubeMX启动路径,通常点击Path update框后,点击Update installed path,就会自动搜索CubeMX路径,等待一会后自动完成。
Cubemx路径

GPIO config

之后加入功能模块,我这里需要改变GPIO的状态,所以选Target Support Package里面的GPIO_Write。刚加入可能会报错:
加入GPIO_write后的报错
此时只需要保存自己的simulink模型(.slx文件),然后关闭再打开,GPIO_write模块就会读取正确的端口。如这里显示的GPIOA是错误的,实际上并没有打开A端口,并且点进去也都是全灰端口,无法使用。但重开后模块上的显示变成GPIOF,点击后就有9pin与10pin的可用复选框,与CubeMX中的设置一致。
在这里插入图片描述
这里勾选Pin可使GPIO_write多出一个输入端口,可连接simulink中的信号源等,产生需要的输入:
两个矩形波
我这里加入了两个占空比不同的矩形波信号。

build model

也可以先运行一下,看看各处信号的输出是不是符合预期。
然后就可以进行build model:
build model
注意正常的运行会在build过程中启动STM32CubeMX,并且触发了它的generate code,如果没有触发则生成失败(可以看下STM32CubeMX版本是否是5.6,在我的测试中6.3就不能被触发)
之后目录就会出现Src等文件夹,注意到其中的main.cpp的主循环中包含逻辑:
main.cpp
如果发现while内是个空循环,可能是matlab版本有问题,我在使用2020b版本时while内就为空。

keil

从MDK-ARM文件夹中启动Keil,先编译,再烧写。

  • 1
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 16
    评论
STM32F407ZGTX是一款高性能的微控制器,具有强大的外部中断功能。外部中断是通过引脚上的外部信号触发的,可以用于检测、处理外部事件。下面我将以300字回答关于STM32F407ZGTX外部中断实验的问题。 首先,我们需要准备好实验所需的硬件和软件。硬件方面,需要准备一块STM32F407ZGTX开发板和一些外部设备,如按钮或开关等。软件方面,需要使用STM32CubeMXKeil MDK工具进行代码开发和编译。 接下来,我们可以使用STM32CubeMX来配置外部中断。打开STM32CubeMX,选择对应的芯片型号,创建一个新工程。在Pinout & Configuration选项中,选择需要使用的引脚作为外部中断触发引脚。然后,打开Configuration选项卡,选择相应引脚的GPIO模式为GPIO_EXTI和GPIO模式为EXTI Mode。配置完成后,点击生成代码按钮,并将生成代码导入到Keil MDK中进行编译和烧录。 接下来,在Keil MDK中进行代码开发。打开生成代码工程,找到main.c文件,在HAL_GPIO_EXTI_Callback函数中编写对外部中断的处理代码。在这个函数中,可以实现对外部中断触发事件的检测和相应的处理逻辑。例如,可以在按下按钮时,让LED灯亮起或发送一个响应的信号。 最后,编译并烧录代码STM32F407ZGTX开发板上。连接好外部设备(如按钮)后,运行实验。当外部中断(按钮按下)发生时,相应的处理代码会被触发执行。 要注意的是,实验中还需要注意配置外部中断的触发模式,如上升沿触发、下降沿触发等,可根据实际需求进行配置。 总结来说,STM32F407ZGTX外部中断实验的步骤包括:硬件和软件准备、配置外部中断引脚、编写处理代码、编译和烧录代码,最后进行实验。希望以上回答能帮助到你对STM32F407ZGTX外部中断实验的理解。
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值