使用 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 中测试系统或模型的错误和性能。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/58830.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Systemui的介绍以及与普通应用的差异

一.SystemUI的介绍 简介 SystemUI是Android操作系统的一个关键组件,主要负责管理和提供用户界面的核心元素,如状态栏、导航栏和锁屏界面等。从下面两点出发了解SystemUI的特性: 一下就是systemui的部分界面,还包括锁屏界面&…

git merge 和rebase区别

Merge the incoming changes into the current branch 找到两个分支的祖先 commit,然后将公共分支最新版合并到自己的分支,形成一个新的 commit 提交,用图表示如下。 Rebase the current branch on top of the incoming Rebase 则是重新基于…

CSS学习记录(基础笔记)

CSS简介: CSS 指的是层叠样式表* (Cascading Style Sheets),主要用于设置HTML页面的文字内容(字体、大小、对齐方式),图片的外形(边框) CSS 描述了如何在屏幕、纸张或其他媒体上显示 HTML 元素 CSS 节省…

从SQL注入绕过最新安全狗WAF中学习fuzz

前言 SQL注入并不是很精通,通过实战绕过WAF来进行加强SQL注入能力,希望对正在学习的师傅能有一丝帮助。 安装 安装前言 我是本地搭建的环境进行测试的 环境是windows11phpstudy2018sqli-labs phpstudy的安装我不再复述,这里简单说一下安全…

vue3数组V-for中动态生成$refs

vue3数组V-for中动态生成$refs 在项目实际需求中&#xff0c;可能会遇到使用数组动态生成$refs,根据官方参考&#xff0c;采用了以下方式实现 <template><div class"content"><ul v-for"(item, index) in editableTabs" :key"item.n…

SolidUI社区-从开源社区角度思考苹果下架多款ChatGPT应用

文章目录 背景下架背景下架原因趋势SolidUI社区的未来规划结语如果成为贡献者 背景 随着文本生成图像的语言模型兴起&#xff0c;SolidUI想帮人们快速构建可视化工具&#xff0c;可视化内容包括2D,3D,3D场景&#xff0c;从而快速构三维数据演示场景。SolidUI 是一个创新的项目…

斯坦福大学提出在类别层级对多零件多关节三维拼装新方法

来源&#xff1a;投稿 作者&#xff1a;橡皮 编辑&#xff1a;学姐 paper&#xff1a;https://arxiv.org/pdf/2303.06163.pdf 背景&#xff1a; 形状装配通过排列一组简单或基本的零件几何图形来组成复杂的形状几何图形。许多重要的任务和应用都依赖于形状装配算法。 计算机…

你是否好奇交流充电桩主板的安装维度?

你是否好奇交流充电桩主板的安装维度?安装环境、要求和方式&#xff0c;将影响充电桩的可靠性和安全性。 交流充电桩主板的安装环境至关重要&#xff0c;设备需要安装在室外&#xff0c;因此应选择防水、防火、耐候、耐腐蚀的材料。同时&#xff0c;安装要求具有良好的接地&am…

企业人力资源管理系统servlet+jsp人事招聘培训薪资java源代码mysql

本项目为前几天收费帮学妹做的一个项目&#xff0c;Java EE JSP项目&#xff0c;在工作环境中基本使用不到&#xff0c;但是很多学校把这个当作编程入门的项目来做&#xff0c;故分享出本项目供初学者参考。 一、项目描述 企业人力资源管理系统servletjsp 系统1权限&#xff…

uniApp 插件 Fvv-UniSerialPort 使用实例

接上一篇 uniApp 对接安卓平板刷卡器, 读取串口数据 , 本文将详细介绍如何使用插件读取到串口数据 原理 通过uniApp 插件读取设备串口数据, 解析后供业务使用; 步骤 创建uniApp 项目;添加插件 安卓串口通信 Fvv-UniSerialPort 安卓串口通信 Fvv-UniSerialPort - DCloud 插件…

刷题笔记 day6

力扣 57 和为s的两个整数 class Solution { public:vector<int> twoSum(vector<int>& nums, int target) {vector<int> v;int i 0 , j nums.size()-1;while(i < j){if(nums[i] nums[j] > target){--j;}else if(nums[i] nums[j] < target){i…

【Linux】内核线程创建 kthread_run 函数和内核中断

kthread_run函数详解 以PCIE的热插拔内核线程创建为例说明 注意&#xff1a;内核线程和RTOS的线程略有不同&#xff0c;这里Linux上创建以后直接运行&#xff0c;RTOS上有的是需要加入到调度队列中后才会执行&#xff0c;比如RT-Thread的系统 kthread_run 是 Linux 内核中的…

Mac端口扫描工具

端口扫描工具 Mac内置了一个网络工具 网络使用工具 按住 Command 空格 然后搜索 “网络实用工具” 或 “Network Utility” 即可 域名/ip转换Lookup ping功能 端口扫描 https://zhhll.icu/2022/Mac/端口扫描工具/ 本文由 mdnice 多平台发布

关于win11 debian wsl 子系统安装启动docker一直starting,无法启动

首先我先说明&#xff0c;我的步骤都是按照官网步骤来的 通过官网的操作步骤 通过测试命令 sudo docker run hello-world得到下面的命令&#xff0c;我们通过启动命令 sudo service docker start 执行结果如下图 也就是说无法启动&#xff0c;一直显示在启动中 遇到这种情况…

基于ARM+FPGA的驱控一体机器人控制器设计

目前市场上工业机器人&#xff0c;数控机床等多轴运动控制系统普遍采用运动控制器加 伺服驱动器的分布式控制方式。在这种控制方式中&#xff0c;控制器一方面完成人机交互&#xff0c;另 一方面进行 NC 代码的解释执行&#xff0c;插补运算&#xff0c;继而将计算出来的位…

Go项目实现日志按时间及文件大小切割并压缩

关于日志的一些问题: 单个文件过大会影响写入效率&#xff0c;所以会做拆分&#xff0c;但是到多大拆分? 最多保留几个日志文件&#xff1f;最多保留多少天&#xff0c;要不要做压缩处理&#xff1f; 一般都使用 lumberjack[1]这个库完成上述这些操作 lumberjack //info文件wr…

Java版工程行业管理系统源码-专业的工程管理软件-em提供一站式服务 em

​ Java版工程项目管理系统 Spring CloudSpring BootMybatisVueElementUI前后端分离 功能清单如下&#xff1a; 首页 工作台&#xff1a;待办工作、消息通知、预警信息&#xff0c;点击可进入相应的列表 项目进度图表&#xff1a;选择&#xff08;总体或单个&#xff09;项目…

弱监督语义分割伪标签可视化(把单通道灰度图转为voc格式语义分割标签的彩色形式)

一、目的 以图片2007_001960为例&#xff0c;voc数据集中的原图和对应的语义分割标签分别如下&#xff1a; 图1 图2 图像级标签WSSS任务第一阶段最后生成的pseudo mask如下&#xff1a; 图3 我们的…

【雕爷学编程】MicroPython动手做(33)——物联网之天气预报3

天气&#xff08;自然现象&#xff09; 是指某一个地区距离地表较近的大气层在短时间内的具体状态。而天气现象则是指发生在大气中的各种自然现象&#xff0c;即某瞬时内大气中各种气象要素&#xff08;如气温、气压、湿度、风、云、雾、雨、闪、雪、霜、雷、雹、霾等&#xff…

react中PureComponent的理解与使用

一、作用 它是一个纯组件&#xff0c;会做一个数据的浅比较&#xff0c;当props和state没改变的时候&#xff0c;不会render重新渲染&#xff0c; 改变后才会render重新渲染&#xff0c;提高性能。 二、使用 三、注意 它不能和shouldComponentUpdate生命周期同时使用。因为它…