当前位置: 首页 > 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…...

【根据当天日期输出明天的日期(需对闰年做判定)。】2022-5-15

缘由根据当天日期输出明天的日期(需对闰年做判定)。日期类型结构体如下&#xff1a; struct data{ int year; int month; int day;};-编程语言-CSDN问答 struct mdata{ int year; int month; int day; }mdata; int 天数(int year, int month) {switch (month){case 1: case 3:…...

Spark 之 入门讲解详细版(1)

1、简介 1.1 Spark简介 Spark是加州大学伯克利分校AMP实验室&#xff08;Algorithms, Machines, and People Lab&#xff09;开发通用内存并行计算框架。Spark在2013年6月进入Apache成为孵化项目&#xff0c;8个月后成为Apache顶级项目&#xff0c;速度之快足见过人之处&…...

椭圆曲线密码学(ECC)

一、ECC算法概述 椭圆曲线密码学&#xff08;Elliptic Curve Cryptography&#xff09;是基于椭圆曲线数学理论的公钥密码系统&#xff0c;由Neal Koblitz和Victor Miller在1985年独立提出。相比RSA&#xff0c;ECC在相同安全强度下密钥更短&#xff08;256位ECC ≈ 3072位RSA…...

Python爬虫(二):爬虫完整流程

爬虫完整流程详解&#xff08;7大核心步骤实战技巧&#xff09; 一、爬虫完整工作流程 以下是爬虫开发的完整流程&#xff0c;我将结合具体技术点和实战经验展开说明&#xff1a; 1. 目标分析与前期准备 网站技术分析&#xff1a; 使用浏览器开发者工具&#xff08;F12&…...

[Java恶补day16] 238.除自身以外数组的乘积

给你一个整数数组 nums&#xff0c;返回 数组 answer &#xff0c;其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法&#xff0c;且在 O(n) 时间复杂度…...

华硕a豆14 Air香氛版,美学与科技的馨香融合

在快节奏的现代生活中&#xff0c;我们渴望一个能激发创想、愉悦感官的工作与生活伙伴&#xff0c;它不仅是冰冷的科技工具&#xff0c;更能触动我们内心深处的细腻情感。正是在这样的期许下&#xff0c;华硕a豆14 Air香氛版翩然而至&#xff0c;它以一种前所未有的方式&#x…...

从面试角度回答Android中ContentProvider启动原理

Android中ContentProvider原理的面试角度解析&#xff0c;分为​​已启动​​和​​未启动​​两种场景&#xff1a; 一、ContentProvider已启动的情况 1. ​​核心流程​​ ​​触发条件​​&#xff1a;当其他组件&#xff08;如Activity、Service&#xff09;通过ContentR…...

MySQL的pymysql操作

本章是MySQL的最后一章&#xff0c;MySQL到此完结&#xff0c;下一站Hadoop&#xff01;&#xff01;&#xff01; 这章很简单&#xff0c;完整代码在最后&#xff0c;详细讲解之前python课程里面也有&#xff0c;感兴趣的可以往前找一下 一、查询操作 我们需要打开pycharm …...

第一篇:Liunx环境下搭建PaddlePaddle 3.0基础环境(Liunx Centos8.5安装Python3.10+pip3.10)

第一篇&#xff1a;Liunx环境下搭建PaddlePaddle 3.0基础环境&#xff08;Liunx Centos8.5安装Python3.10pip3.10&#xff09; 一&#xff1a;前言二&#xff1a;安装编译依赖二&#xff1a;安装Python3.10三&#xff1a;安装PIP3.10四&#xff1a;安装Paddlepaddle基础框架4.1…...

在 Visual Studio Code 中使用驭码 CodeRider 提升开发效率:以冒泡排序为例

目录 前言1 插件安装与配置1.1 安装驭码 CodeRider1.2 初始配置建议 2 示例代码&#xff1a;冒泡排序3 驭码 CodeRider 功能详解3.1 功能概览3.2 代码解释功能3.3 自动注释生成3.4 逻辑修改功能3.5 单元测试自动生成3.6 代码优化建议 4 驭码的实际应用建议5 常见问题与解决建议…...