使用 Simulink 进行 STM32 编程
目录
介绍
所需材料
- 步骤 1:在MATLAB中设置STM32-MAT软件路径
- 步骤 2:在STM32CubeMX中创建一个项目
- 步骤 3:配置时钟和 GPIO 引脚
- 步骤 4:项目经理并生成代码
- 步骤 5:在 Simulink 中创建模型
- 步骤 6:在模型中插入 STM32_Config 模块
- 步骤 7:创建模型
- 步骤 8:编译并生成代码
- 步骤 9:将代码上传到硬件中
介绍
欢迎读者,在本博客中,我们将逐步介绍使用 Simulink 进行 STM32 编程的过程。在直接进入步骤之前,我们先讨论一下为什么需要使用Simulink对STM32进行编程?STM32采用ARM cortex M架构。由于其较低的成本和良好的性能,它被用于许多应用。使用 Arduino IDE 对 STM32 进行编程非常简单,因为人们开发了许多库。但是,当您开始开发复杂的嵌入式或控制系统时,使用 Arduino IDE 编写裸机代码是一件忙碌的事情。Simulink 的出现使这个过程变得更加容易。您可以使用块开发复杂的系统,并使用 Simulink 功能对其进行测试,然后生成可编译并生成二进制文件的“c”代码,以便该二进制文件可以直接闪存到 STM32 中。现在就完成了,复杂的系统已部署在物理层面。 在本博客中,我们将使用 Simulink 开发模型和嵌入式编码器,以生成同一模型 STM32CubeMX 的“c”代码,用于开发配置文件 (.ioc) 和 Keil 的 MDK-ARM 来构建项目并将其闪存到控制器中。我们将使用 STM32f103c8t6(也称为 Blue Pill)作为目标 MCU。
所需材料
让我们看一下所需的软件和软件包:
来自 MATLAB:
-
MATLAB 编码器(附加组件)
-
Simulink Coder(附加组件)
-
嵌入式代码(附加)
来自意法半导体: -
STM32CubeMX
用于开发 STM32 应用程序的 STM32-MAT/TARGET 工具包 -
STM32-MAT/TARGET 已从相应网站中删除。
以下任一工具链:
- STMicroElectronics 的 STM32CubeIDE
- 来自 Keil 的 MDK-ARM
- IAR 的 EWARM
所需硬件:
- STM32F103C8T6(蓝丸)微控制器
- STLink v2
- 面包板
- 4 × 跳线
让我们逐步完成该过程。
- Step-1:在MATLAB中设置STM32-MAT软件路径
安装完所有软件和附加组件后,打开 MATLAB,选择“设置路径”选项,然后选择安装 STM32-MAT/TARGET 期间在位置“c:/MATLAB/STM32-MAT/STM”创建的文件夹工具包。

设置STM32-MAT文件的路径
在 MATLAB 中设置 STM32-MAT 文件的路径

选择STM32-MAT软件文件
注意:如果您在上述指定路径中没有找到 STM32 文件夹,请确保 STM32-MAT/TARGET 工具包已正确安装。单击此处下载该实用程序。
- 步骤2:在STM32CubeMX中创建一个项目
现在打开 STM32cubeMX 并通过选择“ACCESS TO MCU SELECTOR”创建一个新项目。

在STM32CubeMX中创建一个项目
在MCU/MPU选择器中,输入部件号“STM32F103C8T6”,并在列表中选择“STM32F103C8TX”选项,然后单击开始项目。

选择单片机
步骤 3:配置时钟和 GPIO 引脚
单击开始项目后,您将获得引脚分配视图。现在设置时钟。在系统核心中,选择“ RCC ”选项,然后在“ High-Speed Clock ”部分选择“ Crystal/Ceramic Resonator ”。

将时钟设置为水晶/陶瓷谐振器
现在设置 GPIO。选择“PC13”并将其设置为“GPIO_Output”。

选择 GPIO 并设置为输出
现在,在“系统核心”部分中选择“GPIO”选项,然后选择“GPIO”并选中修改后的复选框。现在更改引脚配置,如下图所示。

修改GPIO配置
第 4 步:项目经理并生成代码
现在打开项目管理器,如图所示编辑详细信息,然后单击生成代码。

关闭单击“代码生成”选项卡后弹出的打开的对话框,然后打开 MATLAB。

步骤 5:在 Simulink 中创建模型
在保存“ blink.ioc ”文件的同一文件夹中创建一个空白模型,如下图所示。

创建空白 Simulink 模型
现在从模拟选项卡打开模型设置并更改求解器部分中的参数,如下图所示。

配置求解器参数
打开“代码生成”选项卡,然后使用浏览选项选择“STM32.tlc”选项作为系统目标文件。现在选择“代码生成”部分下的“STM32 选项”。

更改系统目标文件

选中“STM32CubeMx路径更新”复选框并选择“更新安装路径”选项。现在应用更改并关闭“模型设置”对话框。
更新STM32CubeMX路径
步骤 6:在模型中插入 STM32_Config 模块
现在打开“Library Browser”并选择“STM32_Config”块,将此块添加到模型中。

选择STM32_Config模块
注意:如果您没有找到“Target Support Package – STM32 Adapter”选项,请确保 STM32-MAT/TARGET 工具包已正确安装。单击此处下载并正确安装。
双击“STM32_Config”块,在打开的对话框中选择“选择STM32配置文件”选项。现在选择在步骤 4 中创建的“.ioc”文件。

选择STM32配置文件
第 7 步:创建模型
通过选择并排列相同的块来完成建模,如下图所示。

选择 GPIO 和脉冲发生器模块

以下是脉冲块参数。
脉冲发生器块
Step-8:编译并生成代码
完成建模后,通过选择“建模”选项卡下的“更新模型”选项来编译模型。

编译模型
编译完成后,进入“APPS”部分并选择Embedded Coder。

启动嵌入式编码器应用程序
现在构建项目(可能需要一些时间)。下图第二个框中是Embedded coder生成的代码报告。

构建模型
步骤9:将代码上传到硬件中
代码报告生成后,打开“STM32CubeMx”并选择“生成代码”选项,现在出现一个对话框选项。选择“打开项目”选项。

生成代码
在打开 MDK-Keil IDE 之前,我们先来了解一下硬件。
STM32F103C8T6
STLINK-V2
在将二进制文件写入 STM32 之前,将 STM32 的“Boot0”引脚切换为“HIGH”。如下图所示连接 STM32 和 STLink v2 之间的连接。
STM32与STLink之间的连接
现在打开 MDK-Keil IDE 并构建项目。此后,您将收到“0”错误和“0”警告。现在将模型加载到 STM32 中。您将在控制台中收到“完成加载”消息。

构建项目并将代码加载到STM32中
现在将“Boot0”切换回“LOW”并按下重置按钮,如下图所示。
切换回“boot0”引脚
现在内置 LED 开始闪烁。
结论
“ Simulink ” 和 “ Embedded Coder ”使复杂嵌入式系统和控制系统的原型设计变得更加容易。在将模型的二进制文件部署到硬件中之前,我们可以在 Simulink 中测试系统或模型的错误和性能。
相关文章:
使用 Simulink 进行 STM32 编程
目录 介绍 所需材料 步骤 1:在MATLAB中设置STM32-MAT软件路径步骤 2:在STM32CubeMX中创建一个项目步骤 3:配置时钟和 GPIO 引脚步骤 4:项目经理并生成代码步骤 5:在 Simulink 中创建模型步骤 6:在模型中插…...
走出迷宫的最少步数and第一条出路
题面 题目描述 一个迷宫由 R 行 C 列格子组成,有的格子里有障碍物,不能走;有的格子是空地,可以走。 给定一个迷宫,求从左上角走到右下角最少需要走多少步(数据保证一定能走到)。只能在水平方向或垂直方向走,…...
MediaCodec创建对应解码器
媒体编解码API使用示例 //获取相关格式文件的内容信息,如轨道数量、获取MIME信息、视频的高度与宽度、语言格式、播放总时长等 MediaExtractor mediaExtractor new MediaExtractor(); try {mediaExtractor.setDataSource(path); // 设置数据源 } catch (IOExcept…...
使用eXosip+ffmpeg、ffplay命令行实现sip客户端
文章目录 前言一、关键实现1、主要流程2、解决端口冲突(1)、出现原因(2)、解决方法 3、解析sdp(1)、定义实体(2)、解析视频(3)、解析音频 4、命令行推拉流&am…...
dotNet 之网络TCP
**硬件支持型号 点击 查看 硬件支持 详情** DTU701 产品详情 DTU702 产品详情 DTU801 产品详情 DTU802 产品详情 DTU902 产品详情 G5501 产品详情 ARM dotnet 编程 dotNet使用TCP,可以使用Socket和TcpClient 、TcpListener类 2种,对于高级用户&…...
python基础面试题汇总(持续更新),冲击offer
目录 1.概念理解题python内置数据结构,哪些是不可变的python新式类和经典类的区别is和有什么区别Python中变量查找顺序python函数的参数是值传递还是引用传递python垃圾回收机制什么是闭包什么是装饰器,开发中用到举例如何实现只读属性Python中类方法、实…...
Java课题笔记~ AOP编程术语(掌握)
(1) 切面(Aspect) 切面泛指交叉业务逻辑。上例中的事务处理、日志处理就可以理解为切面。常用的切面是通知(Advice)。实际就是对主业务逻辑的一种增强。 (2) 连接点(Jo…...
暑假刷题第23天--8/6
3748. 递增子串 - AcWing题库 #include<iostream> #include<string> const int N200005; int a[N]; using namespace std; int main(){int t;cin>>t;for(int q1;q<t;q){int n;cin>>n;string s;cin>>s;int cnt1;a[1]1;for(int i2;i<n;i){i…...
ArcGIS API for JavaScript 4.x 教程(一) 显示一张地图
了解如何创建和显示带有基本地图图层的地图。 地图包含地理数据层。地图包含一个基本地图层,以及一个或多个数据层(可选)。可以使用地图视图显示地图的特定区域,并设置位置和缩放级别。 本教程将向您展示如何使用地形底图层创建和…...
Python-OpenCV中的图像处理
Python-OpenCV中的图像处理 颜色空间转换物体跟踪获取HSV的值几何变换图像缩放图像平移图像旋转仿射变换透视变换 图像阈值单阈值自适应阈值Otsus二值化 颜色空间转换 在 OpenCV 中有超过 150 中进行颜色空间转换的方法。但是你以后就会 发现我们经常用到的也就两种࿱…...
分清性能测试,负载测试,压力测试这三个的区别
做测试一年多来,虽然平时的工作都能很好的完成,但最近突然发现自己在关于测试的整体知识体系上面的了解很是欠缺,所以,在工作之余也做了一些测试方面的知识的补充。不足之处,还请大家多多交流,互相学习。 …...
前端架构师岗位的工作职责(合集)
前端架构师岗位的工作职责1 职责: 1.制定前端的标准和规范,并推广和应用,提高团队的开发效率; 2.前端架构的框架或核心模块的设计与实现; 3.在前端架构、设计与开发上对团队进行足够的指导; 4.在日常的系统设计与优化上与服务端团队紧密合…...
使用 Amazon ECS Anywhere 在边缘部署 Amazon IoT Greengrass
1.概述 亚马逊云科技提供了完备的IoT服务能力,涵盖设备服务、连接和控制服务以及云端分析服务,是快速构建安全可靠、可扩展的 IoT 平台的常见选择。Amazon IoT Greengrass 边缘运行时和云服务,可帮助您在设备上构建、部署和管理 IoT 应用。A…...
pytorch Stream 多流处理
CUD Stream https://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html#c-language-extensions 中指出在kenel的调用函数中最后一个可选参数表示该核函数处在哪个流之中。 - 参数Dg用于定义整个grid的维度和尺寸,即一个grid有多少个block。为dim3类型。…...
微信小程序选项卡切换(滑动切换,点击切换)
效果如下:可点击切换,滑动切换 代码如下 这个可以在项目用 index.wxml <view classtopTabSwiper><view classtab {{currentData 0 ? "tabBorer" : ""}} data-current "0" bindtapcheckCurrent>选项一&…...
安路FPGA的赋值报错——移位处理,加括号
authordaisy.skye的博客_CSDN博客-嵌入式,Qt,Linux领域博主 在使用移位符号用来当作除以号使用时,发现如下问题 其中 cnt_8K 为偶数和奇数时输出的数据不一样 reg [10:0] cnt_8K; reg [10:0] ram1_addra; always(posedge clk_16M) begin if(ram_out_flag )begin if(…...
GO学习之 接口(Interface)
GO系列 1、GO学习之Hello World 2、GO学习之入门语法 3、GO学习之切片操作 4、GO学习之 Map 操作 5、GO学习之 结构体 操作 6、GO学习之 通道(Channel) 7、GO学习之 多线程(goroutine) 8、GO学习之 函数(Function) 9、GO学习之 接口(Interface) 文章目录 GO系列前言一、什么是…...
ansible常见模块的运用
ansible常见模块的运用 一:Ansible简介二:ansible 环境安装部署管理端安装 ansibleansible 目录结构配置主机清单配置密钥对验证 三:ansible 命令行模块1.command 模块在远程主机执行命令,不支持管道,重定向…...
合宙Air724UG LuatOS-Air script lib API--patch
patch Table of Contents patch patch.safeJsonDecode(s) (local函数 无法被外部调用) patch 模块功能:Lua补丁 patch.safeJsonDecode(s) (local函数 无法被外部调用) 封装自定义的json.decode接口 参数 名称 传入值类型 释义 s string json格式的字符串 返回值 t…...
pytorch求导
pytorch求导的初步认识 requires_grad tensor(data, dtypeNone, deviceNone, requires_gradFalse)requires_grad是torch.tensor类的一个属性。如果设置为True,它会告诉PyTorch跟踪对该张量的操作,允许在反向传播期间计算梯度。 x.requires_grad 判…...
相机Camera日志实例分析之二:相机Camx【专业模式开启直方图拍照】单帧流程日志详解
【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了: 这一篇我们开始讲: 目录 一、场景操作步骤 二、日志基础关键字分级如下 三、场景日志如下: 一、场景操作步骤 操作步…...
Cesium1.95中高性能加载1500个点
一、基本方式: 图标使用.png比.svg性能要好 <template><div id"cesiumContainer"></div><div class"toolbar"><button id"resetButton">重新生成点</button><span id"countDisplay&qu…...
django filter 统计数量 按属性去重
在Django中,如果你想要根据某个属性对查询集进行去重并统计数量,你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求: 方法1:使用annotate()和Count 假设你有一个模型Item,并且你想…...
什么是库存周转?如何用进销存系统提高库存周转率?
你可能听说过这样一句话: “利润不是赚出来的,是管出来的。” 尤其是在制造业、批发零售、电商这类“货堆成山”的行业,很多企业看着销售不错,账上却没钱、利润也不见了,一翻库存才发现: 一堆卖不动的旧货…...
CRMEB 框架中 PHP 上传扩展开发:涵盖本地上传及阿里云 OSS、腾讯云 COS、七牛云
目前已有本地上传、阿里云OSS上传、腾讯云COS上传、七牛云上传扩展 扩展入口文件 文件目录 crmeb\services\upload\Upload.php namespace crmeb\services\upload;use crmeb\basic\BaseManager; use think\facade\Config;/*** Class Upload* package crmeb\services\upload* …...
Map相关知识
数据结构 二叉树 二叉树,顾名思义,每个节点最多有两个“叉”,也就是两个子节点,分别是左子 节点和右子节点。不过,二叉树并不要求每个节点都有两个子节点,有的节点只 有左子节点,有的节点只有…...
CMake控制VS2022项目文件分组
我们可以通过 CMake 控制源文件的组织结构,使它们在 VS 解决方案资源管理器中以“组”(Filter)的形式进行分类展示。 🎯 目标 通过 CMake 脚本将 .cpp、.h 等源文件分组显示在 Visual Studio 2022 的解决方案资源管理器中。 ✅ 支持的方法汇总(共4种) 方法描述是否推荐…...
HarmonyOS运动开发:如何用mpchart绘制运动配速图表
##鸿蒙核心技术##运动开发##Sensor Service Kit(传感器服务)# 前言 在运动类应用中,运动数据的可视化是提升用户体验的重要环节。通过直观的图表展示运动过程中的关键数据,如配速、距离、卡路里消耗等,用户可以更清晰…...
Linux 中如何提取压缩文件 ?
Linux 是一种流行的开源操作系统,它提供了许多工具来管理、压缩和解压缩文件。压缩文件有助于节省存储空间,使数据传输更快。本指南将向您展示如何在 Linux 中提取不同类型的压缩文件。 1. Unpacking ZIP Files ZIP 文件是非常常见的,要在 …...
解读《网络安全法》最新修订,把握网络安全新趋势
《网络安全法》自2017年施行以来,在维护网络空间安全方面发挥了重要作用。但随着网络环境的日益复杂,网络攻击、数据泄露等事件频发,现行法律已难以完全适应新的风险挑战。 2025年3月28日,国家网信办会同相关部门起草了《网络安全…...
