使用 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 判…...
[2025CVPR]DeepVideo-R1:基于难度感知回归GRPO的视频强化微调框架详解
突破视频大语言模型推理瓶颈,在多个视频基准上实现SOTA性能 一、核心问题与创新亮点 1.1 GRPO在视频任务中的两大挑战 安全措施依赖问题 GRPO使用min和clip函数限制策略更新幅度,导致: 梯度抑制:当新旧策略差异过大时梯度消失收敛困难:策略无法充分优化# 传统GRPO的梯…...
SkyWalking 10.2.0 SWCK 配置过程
SkyWalking 10.2.0 & SWCK 配置过程 skywalking oap-server & ui 使用Docker安装在K8S集群以外,K8S集群中的微服务使用initContainer按命名空间将skywalking-java-agent注入到业务容器中。 SWCK有整套的解决方案,全安装在K8S群集中。 具体可参…...
Python爬虫实战:研究feedparser库相关技术
1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的信息资源。RSS(Really Simple Syndication)作为一种标准化的信息聚合技术,被广泛用于网站内容的发布和订阅。通过 RSS,用户可以方便地获取网站更新的内容,而无需频繁访问各个网站。 然而,互联网…...
在四层代理中还原真实客户端ngx_stream_realip_module
一、模块原理与价值 PROXY Protocol 回溯 第三方负载均衡(如 HAProxy、AWS NLB、阿里 SLB)发起上游连接时,将真实客户端 IP/Port 写入 PROXY Protocol v1/v2 头。Stream 层接收到头部后,ngx_stream_realip_module 从中提取原始信息…...
Mac下Android Studio扫描根目录卡死问题记录
环境信息 操作系统: macOS 15.5 (Apple M2芯片)Android Studio版本: Meerkat Feature Drop | 2024.3.2 Patch 1 (Build #AI-243.26053.27.2432.13536105, 2025年5月22日构建) 问题现象 在项目开发过程中,提示一个依赖外部头文件的cpp源文件需要同步,点…...
2023赣州旅游投资集团
单选题 1.“不登高山,不知天之高也;不临深溪,不知地之厚也。”这句话说明_____。 A、人的意识具有创造性 B、人的认识是独立于实践之外的 C、实践在认识过程中具有决定作用 D、人的一切知识都是从直接经验中获得的 参考答案: C 本题解…...
【Linux】Linux 系统默认的目录及作用说明
博主介绍:✌全网粉丝23W,CSDN博客专家、Java领域优质创作者,掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域✌ 技术范围:SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大数据、物…...
水泥厂自动化升级利器:Devicenet转Modbus rtu协议转换网关
在水泥厂的生产流程中,工业自动化网关起着至关重要的作用,尤其是JH-DVN-RTU疆鸿智能Devicenet转Modbus rtu协议转换网关,为水泥厂实现高效生产与精准控制提供了有力支持。 水泥厂设备众多,其中不少设备采用Devicenet协议。Devicen…...
消防一体化安全管控平台:构建消防“一张图”和APP统一管理
在城市的某个角落,一场突如其来的火灾打破了平静。熊熊烈火迅速蔓延,滚滚浓烟弥漫开来,周围群众的生命财产安全受到严重威胁。就在这千钧一发之际,消防救援队伍迅速行动,而豪越科技消防一体化安全管控平台构建的消防“…...
深入解析光敏传感技术:嵌入式仿真平台如何重塑电子工程教学
一、光敏传感技术的物理本质与系统级实现挑战 光敏电阻作为经典的光电传感器件,其工作原理根植于半导体材料的光电导效应。当入射光子能量超过材料带隙宽度时,价带电子受激发跃迁至导带,形成电子-空穴对,导致材料电导率显著提升。…...
