当前位置: 首页 > news >正文

使用MATLAB/Simulink点亮STM32开发板LED灯

使用MATLAB/Simulink点亮STM32开发板LED灯-笔记

  • 一、STM32CubeMX新建工程
  • 二、Simulink 新建工程
  • 三、MDK导入生成的代码

一、STM32CubeMX新建工程

1. 打开 STM32CubeMX 软件,点击“新建工程”,选择中对应的型号
在这里插入图片描述

2. RCC 设置,选择 HSE(外部高速时钟) 为 Crystal/Ceramic Resonator(晶振/陶瓷谐振器)
开启 LSE(外部低速时钟) 为 Crystal/Ceramic Resonator(晶振/陶瓷谐振器)
在这里插入图片描述

3. 配置调试模式
非常重要的一步,否则会造成第一次烧录程序后续无法识别调试器

SYS 设置,选择 Debug 为 Serial Wire
在这里插入图片描述

4.配置所需要的输入和输出引脚
根据电路板硬件的实际情况配置LED灯引脚
在这里插入图片描述

5.选择时钟
HCLK (MHz)输入框中,改为频率为 72MHz,自动计算时钟分配。
在这里插入图片描述

6.工程文件的输出
输入项目名和项目路径和选择应用的 IDE 开发环境 MDK-ARM V5
在这里插入图片描述

7.工程文件代码生成
每个外设生成独立的 ’.c/.h’ 文件
不勾:所有初始化代码都生成在 main.c
勾选:初始化代码生成在对应的外设文件。 如 GPIO 初始化代码生成在 gpio.c 中。
在这里插入图片描述

8.点击 GENERATE CODE 生成代码
在这里插入图片描述

9.打开MDK-ARM V5 进行编译,无错误 无警告
在这里插入图片描述

二、Simulink 新建工程

打开MATLAB 的 Simulink (动态系统和嵌入式系统的多领域模拟和基于模型的设计工具)
在这里插入图片描述

在Simulink 新建 空白模型
在这里插入图片描述

similink库中的Stateflow下拉框选择“Chart”,拖到右侧空白框中。改名为“LED_STate”。
在这里插入图片描述

双击“Chart”进入里面的内容,拖动“状态”组件。后续作为状态转移。
在这里插入图片描述

在状态框中写入如下代码并状态与状态之间相连
在这里插入图片描述
after:after函数函数就是经过多长时间再到下一个状态,相当于延时

通过“建模”下的“符号窗格” 看到三个名称的状态有感叹是提示没有定义。
在这里插入图片描述

通过单击每个符号名称的类型进行修改,led_output 改为“Output Data”。
在这里插入图片描述

也可以通过选择符号名称右键-> 检查
在这里插入图片描述

属性检查器可查看属性信息
在这里插入图片描述

led_output 类型改为“uint8”
在这里插入图片描述

其他两个符号 改为“Parameter Data”类型。
在这里插入图片描述

类型设置完成后 无感叹号提示。
在这里插入图片描述

以上操作也可以通过汇总的方式查看,通过模块资源管理器。
在这里插入图片描述

“HIGH”和“ LOW”两个符号的Value值改成 “1”和“0”
在这里插入图片描述

返回上一层“Chart”。
在这里插入图片描述

在模型界面上单击输入“Output”。
在这里插入图片描述

修改Output信号名称为“LEDOutput”。
在这里插入图片描述

更新我们所设计的模型
在这里插入图片描述

为了方便观察和所设计的模型是否正常,在LED_STate增加“Scope”示波器,可以看到示波器正常输出高低电平。
在这里插入图片描述

在APP下的标签“Embedded oder”生成程序代码。
在这里插入图片描述

从下图中可以看出 编译不通过,下方有“建议的操作”,选择第一项弹出配置参数。
在这里插入图片描述

配置参数修改三个地方如下图所示。
在这里插入图片描述

修改完成后,继续点击“编译”。
在这里插入图片描述

可以看到右侧已经生成代码文件
在这里插入图片描述

生成的代码 .c和.h 保存路径如下图的提示。
在这里插入图片描述

三、MDK导入生成的代码

在Groups增加新的文件夹,名称为SimulinkCode
在这里插入图片描述

在Files项目下“Add Files…”导入Simulink生成的.c文件
在这里插入图片描述

增加.h头文件的引用路径
在这里插入图片描述

首先这个模型生成的初始化“untitled_initialize”是空的,我们可以不调用,但是后面如果模型比较大了,或者说初始化函数中有文件的话,这个是必须要调。
在这里插入图片描述

untitled_step()函数是我们Simulink生成的状态机,需要在main.c中while循环添加。
在这里插入图片描述

我们现在这个untitled_step()函数是在while中一直跑的,这样是没有固定的运行周期的。但是我们在模型仿真的时候,定步长是固定,0.001的采样时间。所以我们需要给他一个周期。在中断文件下添加“BalancecarTaskcount”变量来计数。
在这里插入图片描述

接下来我们看看这个,控制LED亮灭调用stm32函数的“HAL_GPIO_WritePin(LED2_GPIO_Port, LED2_Pin, GPIO_PIN_SET);”直接给“1”或“0”就行,但是下面如图所示,这里是结构不方便使用,需要改成一个全局变量。
在这里插入图片描述

在Simulink中的代码接口下的“默认代码映射”,下方就会弹出代码映射窗口。
在这里插入图片描述

单击“LEDOutpu”组件后在码映射窗口下选择“Outports”,有一个“Output”选项。
在这里插入图片描述

右侧弹出“属性检查器”在Storage Class字符下,下拉框选择“ExportedGlobal”。
在这里插入图片描述

可以看到Simulink代码显示窗口 的LEDoutput原结构体的形式改为全局变量。
在这里插入图片描述

修改代码,编译通过
在这里插入图片描述

untitled.c

/** Academic License - for use in teaching, academic research, and meeting* course requirements at degree granting institutions only.  Not for* government, commercial, or other organizational use.** File: untitled.c** Code generated for Simulink model 'untitled'.** Model version                  : 1.2* Simulink Coder version         : 9.8 (R2022b) 13-May-2022* C/C++ source code generated on : Fri May  3 15:00:42 2024** Target selection: ert.tlc* Embedded hardware selection: Intel->x86-64 (Windows64)* Code generation objectives: Unspecified* Validation result: Not run*/#include "untitled.h"
#include "rtwtypes.h"/* Named constants for Chart: '<Root>/LED_STate' */
#define untitled_IN_LED_OFF            ((uint8_T)1U)
#define untitled_IN_LED_ON             ((uint8_T)2U)/* Exported block signals */
uint8_T LEDOutput;                     /* '<Root>/Output' *//* Block states (default storage) */
DW_untitled_T untitled_DW;/* Real-time model */
static RT_MODEL_untitled_T untitled_M_;
RT_MODEL_untitled_T *const untitled_M = &untitled_M_;/* Model step function */
void untitled_step(void)
{/* Chart: '<Root>/LED_STate' */if (untitled_DW.temporalCounter_i1 < 511U) {untitled_DW.temporalCounter_i1++;}if (untitled_DW.is_active_c3_untitled == 0U) {untitled_DW.is_active_c3_untitled = 1U;untitled_DW.is_c3_untitled = untitled_IN_LED_ON;untitled_DW.temporalCounter_i1 = 0U;/* Outport: '<Root>/Output' */LEDOutput = 0U;} else if (untitled_DW.is_c3_untitled == untitled_IN_LED_OFF) {/* Outport: '<Root>/Output' */LEDOutput = 1U;if (untitled_DW.temporalCounter_i1 >= 500U) {untitled_DW.is_c3_untitled = untitled_IN_LED_ON;untitled_DW.temporalCounter_i1 = 0U;/* Outport: '<Root>/Output' */LEDOutput = 0U;}} else {/* Outport: '<Root>/Output' *//* case IN_LED_ON: */LEDOutput = 0U;if (untitled_DW.temporalCounter_i1 >= 500U) {untitled_DW.is_c3_untitled = untitled_IN_LED_OFF;untitled_DW.temporalCounter_i1 = 0U;/* Outport: '<Root>/Output' */LEDOutput = 1U;}}/* End of Chart: '<Root>/LED_STate' */
}/* Model initialize function */
void untitled_initialize(void)
{/* (no initialization code required) */
}/* Model terminate function */
void untitled_terminate(void)
{/* (no terminate code required) */
}/** File trailer for generated code.** [EOF]*/

相关文章:

使用MATLAB/Simulink点亮STM32开发板LED灯

使用MATLAB/Simulink点亮STM32开发板LED灯-笔记 一、STM32CubeMX新建工程二、Simulink 新建工程三、MDK导入生成的代码 一、STM32CubeMX新建工程 1. 打开 STM32CubeMX 软件&#xff0c;点击“新建工程”&#xff0c;选择中对应的型号 2. RCC 设置&#xff0c;选择 HSE(外部高…...

HDFS- DataNode磁盘扩缩容

HDFS- DataNode磁盘扩缩容 背景: 缩减/增加节点磁盘 方案介绍: 采用hdfs dfsadmin -reconfig 动态刷新配置实现,不停服扩缩容。 注意事项: 请在进行缩容之前,务必了解实际的数据量,并确保磁盘有足够的空间来容纳这些数据。还需要考虑未来的使用需求,要预留一定数量的空间…...

5.10.3 使用 Transformer 进行端到端对象检测(DETR)

框架的主要成分称为 DEtection TRansformer 或 DETR&#xff0c;是基于集合的全局损失&#xff0c;它通过二分匹配强制进行独特的预测&#xff0c;以及 Transformer 编码器-解码器架构。 DETR 会推理对象与全局图像上下文的关系&#xff0c;以直接并行输出最终的预测集。 1. …...

前端开发指导

前端开发指导 本文介绍了配置前端开发环境需要的软件、配置项等,指导如何开始进行UDM部门前端开发的全流程。本文以Windows系统下在Microsoft Virtual Studio Code中开发为基础。 一、综述 目标:零基础或者新员工依照此文档,能够完成开发环境的搭建及熟悉测试环境的搭建。…...

三方库的调用方法

系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 TODO:写完再整理 文章目录 系列文章目录前言三方库的调用方法1. **下载并安装Boost库(三方库)**2. **配置开发环境**3. **包含Boost(三方库)头文件**4. **编写代码**5. **链接Boost库(三…...

如何使用提示测试为LLMs构建单元测试?

原文地址&#xff1a;how-to-build-unit-tests-for-llms-using-prompt-testing 确保您的人工智能交付&#xff1a;快速测试完美生成应用程序的基本指南 2024 年 4 月 26 日 如果你曾经编写过软件&#xff0c;你就会知道测试是开发过程中必不可少的一部分。特别是单元测试&#…...

目前市面上堡垒机厂家有哪些?会帮忙部署吗?

随着大家对于网络安全的重视&#xff0c;越来越多的企业准备采购堡垒机了。不少企业在问&#xff0c;目前市面上堡垒机厂家有哪些&#xff1f;会帮忙部署吗&#xff1f;这里我们小编就来简单为大家回答一下&#xff0c;仅供参考哈&#xff01; 目前市面上堡垒机厂家有哪些&…...

【备忘】在使用php-ffmpeg/php-ffmpeg开发时遇到Unable to load FFProbe时如何处理?

执行FFProbe::create()时&#xff0c;提示Unable to load FFProbe&#xff0c;php-ffmpeg/php-ffmpeg版本是用的^0.19.0&#xff0c;安装位置/usr/bin/ffprobe&#xff0c;现在提示这个错误要怎么解决呢 说个小技巧&#xff1a; 当在开发跟视频相关的功能时&#xff0c;总是出…...

REFORMER: 更高效的TRANSFORMER模型

大型Transformer模型通常在许多任务上都能达到最先进的结果&#xff0c;但是训练这些模型的成本可能会非常高昂&#xff0c;特别是在处理长序列时。我们引入了两种技术来提高Transformer的效率。首先&#xff0c;我们用一种使用局部敏感哈希的点积注意力替换了原来的点积注意力…...

视频合并有妙招:视频剪辑一键操作,批量嵌套合并的必学技巧

在数字时代的今天&#xff0c;视频已经成为我们日常生活和工作中不可或缺的一部分。无论是记录生活点滴&#xff0c;还是制作专业项目&#xff0c;视频合并都是一个常见的需求。然而&#xff0c;对于许多人来说&#xff0c;视频合并却是一个复杂且繁琐的过程。现在有云炫AI智剪…...

安装SQL Server详细教程_sql server安装教程

一&#xff0c;SQL Server数据库安装 1.首先&#xff0c;下载安装程序 &#xff08;1&#xff09;从网盘下载安装exe 点击此处直接下载 &#xff08;2&#xff09;从官网下载安装exe文件 在官网选择Developer进行下载 2.开始安装 双击安装程序&#xff0c;开始安装 这里直…...

Git那些事-如何撤销暂存区的文件

在Git的操作中&#xff0c;有时在将本地仓库中已修改的文件添加到暂存区时&#xff0c;会出现添加了"错误"文件的情况&#xff08;这里的错误指的是这些文件我们并不需要上传到远程仓库&#xff09;。这就需要我们将添加到暂存区中"错误"的文件恢复到本地仓…...

记一次SQL和程序查询结果不一致的问题

使用的数据库 clickHouse 程序查询出来时14.4 直接执行Sql查询出来是14.2 select round(sum(current_play_time) / 60 / 60, 1) from (SELECT max(current_play_time) as current_play_timeFROM probe_recordsWHERE toDateTime(log_time, Asia/Shanghai) > 2024-05-11 00…...

Python 实战之量化交易

1. Python 实战之量化交易 2..Python量化交易实战-04.量化交易系统架构的设计 Python量化交易实战-04.量化交易系统架构的设计 - 知乎 3.Python量化交易实战-06.通过PythonAPI获取股票数据 Python量化交易实战-06.通过PythonAPI获取股票数据 - 知乎 3.Python量化交易实战…...

跟我学C++中级篇——封装对象的实践

一、对象封装 在面向对象编程中&#xff0c;首要的事情就是如何进行对象的封装。说的直白一些&#xff0c;就是如何设计类或者是结构体。许多开发者看过不少的书&#xff0c;也学过很多的设计方法&#xff0c;更看过很多别人的代码。那么如何指导自己进行对象的封装呢&#xf…...

iOS面试题链接汇总

iOS开发三年经验 靠这份面试题让我从15k到25k - 简书 2021年&#xff0c;整理的iOS高频面试题及答案&#xff08;总会有你需要的&#xff09; - 知乎 iOS面试&#xff08;内含面试全流程&#xff0c;面试准备工作面试题等&#xff09;-CSDN博客 runtime: 阿里、字节 一套高效…...

TEINet: Towards an Efficient Architecture for Video Recognition 论文阅读

TEINet: Towards an Efficient Architecture for Video Recognition 论文阅读 Abstract1 Introduction2 Related Work3 Method3.1 Motion Enhanced Module3.2 Temporal Interaction Module3.3 TEINet 4 Experiments5 Conclusion阅读总结 文章信息; 原文链接&#xff1a;https:…...

Navicat Data Modeler Ess for Mac:强大的数据库建模设计软件

Navicat Data Modeler Ess for Mac是一款专为Mac用户设计的数据库建模与设计工具&#xff0c;凭借其强大的功能和直观的界面&#xff0c;帮助用户轻松构建和管理复杂的数据库模型。 Navicat Data Modeler Ess for Mac v3.3.17中文直装版下载 这款软件支持多种数据库系统&#x…...

NSS刷题

[SWPUCTF 2021 新生赛]jicao 类型&#xff1a;PHP、代码审计、RCE 主要知识点&#xff1a;json_decode()函数 json_decode()&#xff1a;对JSON字符串解码&#xff0c;转换为php变量 用法&#xff1a; <?php $json {"ctf":"web","question"…...

CUDA专项

1、讲讲shared memory bank conflict的发生场景&#xff1f;以及你能想到哪些解决方案&#xff1f; CUDA中的共享内存&#xff08;Shared Memory&#xff09;是GPU上的一种快速内存&#xff0c;通常用于在CUDA线程&#xff08;Thread&#xff09;之间共享数据。然而&#xff0…...

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…...

MPNet:旋转机械轻量化故障诊断模型详解python代码复现

目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...

【WiFi帧结构】

文章目录 帧结构MAC头部管理帧 帧结构 Wi-Fi的帧分为三部分组成&#xff1a;MAC头部frame bodyFCS&#xff0c;其中MAC是固定格式的&#xff0c;frame body是可变长度。 MAC头部有frame control&#xff0c;duration&#xff0c;address1&#xff0c;address2&#xff0c;addre…...

PPT|230页| 制造集团企业供应链端到端的数字化解决方案:从需求到结算的全链路业务闭环构建

制造业采购供应链管理是企业运营的核心环节&#xff0c;供应链协同管理在供应链上下游企业之间建立紧密的合作关系&#xff0c;通过信息共享、资源整合、业务协同等方式&#xff0c;实现供应链的全面管理和优化&#xff0c;提高供应链的效率和透明度&#xff0c;降低供应链的成…...

linux arm系统烧录

1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 &#xff08;忘了有没有这步了 估计有&#xff09; 刷机程序 和 镜像 就不提供了。要刷的时…...

【项目实战】通过多模态+LangGraph实现PPT生成助手

PPT自动生成系统 基于LangGraph的PPT自动生成系统&#xff0c;可以将Markdown文档自动转换为PPT演示文稿。 功能特点 Markdown解析&#xff1a;自动解析Markdown文档结构PPT模板分析&#xff1a;分析PPT模板的布局和风格智能布局决策&#xff1a;匹配内容与合适的PPT布局自动…...

Keil 中设置 STM32 Flash 和 RAM 地址详解

文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...

第一篇:Agent2Agent (A2A) 协议——协作式人工智能的黎明

AI 领域的快速发展正在催生一个新时代&#xff0c;智能代理&#xff08;agents&#xff09;不再是孤立的个体&#xff0c;而是能够像一个数字团队一样协作。然而&#xff0c;当前 AI 生态系统的碎片化阻碍了这一愿景的实现&#xff0c;导致了“AI 巴别塔问题”——不同代理之间…...

基于Docker Compose部署Java微服务项目

一. 创建根项目 根项目&#xff08;父项目&#xff09;主要用于依赖管理 一些需要注意的点&#xff1a; 打包方式需要为 pom<modules>里需要注册子模块不要引入maven的打包插件&#xff0c;否则打包时会出问题 <?xml version"1.0" encoding"UTF-8…...

BCS 2025|百度副总裁陈洋:智能体在安全领域的应用实践

6月5日&#xff0c;2025全球数字经济大会数字安全主论坛暨北京网络安全大会在国家会议中心隆重开幕。百度副总裁陈洋受邀出席&#xff0c;并作《智能体在安全领域的应用实践》主题演讲&#xff0c;分享了在智能体在安全领域的突破性实践。他指出&#xff0c;百度通过将安全能力…...