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

【动手学电机驱动】STM32-MBD(3)Simulink 状态机模型的部署

STM32-MBD(1)安装 Simulink STM32 硬件支持包
STM32-MBD(2)Simulink 模型部署入门
STM32-MBD(3)Simulink 状态机模型的部署

【动手学电机驱动】STM32-MBD(3)Simulink 状态机模型部署

    • 1. Simulink/STM32 代码生成的软硬件条件和环境测试
      • 1.1 软硬件条件
      • 1.2 开发环境测试
    • 2. 基于状态机的 Simulink 闪灯模型
      • 2.1 创建 Simulink 仿真模型
      • 2.2 创建 STM32CubeMX 工程
      • 2.3 搭建 Simulink 仿真模型
      • 2.4 配置 STM32CubeMX 工程
    • 3. Simulink 状态机模型的仿真
    • 4. 从 Simulink 模型生成 STM32 代码
    • 5. 附录:嵌入式系统的状态机(State Machine)
      • 5.1 状态机的基本概念
      • 5.2 Simulink Stateflow 的使用

通过安装MATLAB 硬件支持包,可以将 STM32 微处理器与 MATLAB/Simulink 结合使用,让开发者可以直接在MATLAB环境中进行嵌入式系统的设计和调试。

状态机是常用的嵌入式软件设计模式,可以描述系统在不同状态下的行为,定义事件和状态之间的转移条件,实现复杂的逻辑和条件。

上一篇采用 NUCLEO-G431RB 开发板, 以 LED 点灯实验为例,使用 Matlab/Simulink 建模仿真后直接生成 STM32 项目工程代码。本文还是采用 NUCLEO-G431RB 开发板,使用 Simulink Stateflow 设计状态机实现控制逻辑,来实现 LED 点灯实验。在建模仿真后使用 Simulink 直接生成 STM32 项目工程代码,将状态机仿真模型部署到基于 STM32 处理器的硬件板。


1. Simulink/STM32 代码生成的软硬件条件和环境测试

Simulink/STM32 代码生成对于软硬件和开发环境的要求非常严格,很容易由于版本不匹配或路径错误而失败。作者已经踩过了很多的坑,可以说是我在所有开发项目中都从未经历过的。


1.1 软硬件条件

关于所需的软硬件条件和安装过程,详见 【STM32-MBD】(1)安装 Simulink STM32 硬件支持包。
强烈建议安装相关软件时使用推荐版本。
请严格按照文中介绍的步骤安装和配置软件。

必需的硬件:

  • STM32 开发板(如:NUCLEO-G431RB 开发板,也可以选择其它 STM32 开发板,但需要安装对应的固件包)。
  • Micro-micro USB 数据线,或 USB Type-A 至 Micro-B 连接线缆,用于将STM32 Nucleo 板连接到 PC。

必需的软件:

  • STM32 开发工具(建议首先严格使用推荐版本跑通本文项目)

    • STM32CubeMX (推荐使用 V6.4.0)
    • STM32CubeProgrammer (推荐使用 V2.6.0)
    • STM32CubeIDE(或 Keil,MDK-ARM 等 IDE 工具)
    • STM32Cube_FW_G4 固件包(推荐采用 V1.5.0)
      如果使用其它 STM32 MCU,则需选择对应的固件包。例如使用 STM32F4 时则要选择STM32Cube_FW_F4_V1.26.0 固件包。
  • MATLAB/Simulink(本文使用 MATLAB R2022b,可以采用更新版本)

    • Simulink Coder:从 Simulink 模型、Stateflow 图和 MATLAB 函数生成并执行 C 和 C++ 代码,用于实时和非实时应用,包括仿真加速、快速原型构建和硬件在环测试
    • STM32 嵌入式硬件支持包,Embedded Coder Support Package for STMicroelectronics STM32 Processors,STM32 处理器的嵌入式硬件支持包

1.2 开发环境测试

为了确定 Simulink/STM32 代码生成 的开发环境安装配置成功,首先要逐项进行检查测试。具体步骤详见 【STM32-MBD】(2)Simulink 模型部署入门。

  1. 运行 STM32CubeMX,菜单选择 Help–About,检查版本为 V6.4.0。

  2. 在 STM32CubeMX 菜单选择 Help–Manage embedded software packages,检查已安装 STM32Cube MCU Package for STM32G4 Series V1.5.0 固件包。

  3. 运行 STM32CubeProgrammer,测试与 STM32 开发板的连接。
    (1)用 USB 连接线连接计算机与 NUCLEO-G431RB 开发板,确保连接正常。
    (2)运行 STM32CubeProgrammer,点击右上角 “Connect” 按钮连接设备。
    如下图所示,检查与 STM32 开发板的连接:
    (a) 右上角的状态灯为绿色并显示 “Connected”;
    (b) 右侧信息栏 “Target information” 显示目标设备 STM32 MCU和开发板的信息;
    © 在 “Device memory” 信息栏显示设备内存地址和对应的内存信息。
    在这里插入图片描述

  4. 运行 Matlab,菜单选择 主页–附加功能–管理附加功能,弹出“附加功能管理器”窗口,检查已安装 STM32 嵌入式硬件支持包 “Embedded Coder Support Package for STMicroelectronics STM32 Processors”。

  5. 点击齿轮图标“设置” STM32 嵌入式硬件支持包:
    (1)选择所使用的 MCU 型号(本文为 STM32Gxx Based MCUs)。
    (2)提示必需的 STM32 工具及版本(STM32CubeMX、STM32CubeProgrammer)。
    (3)对 STM32CubeMX 进行验证:点击 “Browse” 选择 STM32CubeMX 的安装路径,点击 “Validate” 进行验证。
    (4)对 STM32CubeProgrammer 进行验证:点击“Browse”选择 STM32CubeProgrammer 的安装路径,点击 “Validate” 进行验证。
    在这里插入图片描述


2. 基于状态机的 Simulink 闪灯模型

实验名称:2. 基于状态机实现 LED 闪灯

在 【STM32-MBD】(2)Simulink 模型部署入门中,我们先使用 STM32CubeMX 创建 STM32 工程,再到 Simulink 配置项目文件。另一种方法是从 Simulink 创建一个STM32CubeMX 工程文件(.ioc),这使项目的路径设置更方便。本文采用这种方法来实现 Simulink 代码生成。


2.1 创建 Simulink 仿真模型

  1. 为仿真模型新建一个子目录,例如:“D:\SimulinkProjects\STM32G431_MBD02”。

  2. 运行 MATLAB 软件,打开 Simulink。点击 “空白模型” 创建新的 Simulink 模型,保存到本项目路径下:STM32G431_MBD02.slx。

  3. 在 Simulink 菜单选择 “建模” - “模型设置” (也可以用 CTRL+E),打开“配置参数”对话框。
    左侧边栏中选择“求解器”,如下图所示。
    (1)在右侧 “仿真时间” 设置为 “inf”。
    (2)在 “求解器选择” 选项设置类型为 “定步长”,“固定步长(基础采样时间)” 设为 “1e-4” (对应于 MCU 的 ADC 采样频率为 10kHz)。
    (3)可选地,在 "任务和采样周期选项"下勾选:“将每个离散速率视为单独任务”和“自动处理数据传输的速率转换”。

在这里插入图片描述


2.2 创建 STM32CubeMX 工程

  1. **检查 PC 与 STM32G431 开发板连接正常。**然后在“配置参数”窗口的左边栏中选择“硬件实现”,在右侧 “硬件板(Hardware board)” 选项的下拉框中选择 “STM32G4xx Based”。
    如下图所示,系统识别到目标设备为 STM32G4 系列,设备 ID为 STM32G431R(6-8-B)Tx。
    说明:
    (1)必须确保 PC 与 STM32G431 开发板连接正常,才能进行硬件配置。
    (2)根据使用的 STM32 的型号,从 “Hardware board” 中选择适当的硬件板选项,配合 STM32CubeMX 配置外设来实现对 STM32 硬件板的支持。本项目使用 STM32G431RB MCU,因此选择 “STM32G4xx Based”。

  2. 在右侧 “Hardware board settings” 配置 “Target hardware resources” ,创建一个STM32CubeMX 工程文件。
    (1)点击 “Create” 创建一个STM32CubeMX 工程文件 STM32G431_MBD02.ioc。
    (2)点击 “Browse” 选择当前项目的目录,即仿真模型 .slx 与 CubeMX 项目 .ioc 要保存在同一个目录下。
    (3)在 “Project name” 输入 CubeMX 工程文件的文件名,如 STM32G431_MBD02.ioc。
    (4)在 “Select hardware” 选择硬件开发板的型号,如本文使用 NUCLEO-G431RB。如果使用用户开发板,选择 “Custome STM32G4xx Based”。
    点击 “确定”,就在指定项目目录下创建 STM32CubeMX 工程文件 STM32G431_MBD02.ioc。

在这里插入图片描述

  1. 选择硬件在环通信串口。
    点击 “Target hardware resources–Groups–Connectivity”,将 “USART/UART" 设为 “USART3”,将 “Serial port" 设为 电脑上的 COM 端口。具体端口号可以查看电脑”设备管理器“中的”端口(COM和LPT)“。
    注意:这是针对 NUCLEO-G431RB 开发板集成了 STLINK-V3E 串口一体调试器。如果使用单独的 USB 转串口模块,要注意连线正确(USART3:PB10, PB11)。

2.3 搭建 Simulink 仿真模型

回到 Simulink 仿真窗口,搭建仿真模型。

  1. 点击菜单栏的 “库浏览器” 打开库浏览器,搜索 “Stateflow” 并选择 “chart” 模块,将其拖动到右侧,在仿真模型中添加一个状态机。

在这里插入图片描述

  1. 双击 “Chart” 模块,进入 Stateflow 编辑界面,建立一个 LED 闪灯的状态机。
    (1)从工具栏拖拽一个状态块 “State”,创建一个状态,将其命名为 “LED_on”,并填写其状态信息。
    (2)创建另一个状态,将其命名为 “LED_off”,并填写其状态信息。
    (3)创建状态转换传输线(Transition),并填写状态转换条件。
    (4)点击 “建模–符号窗格”,右键点击 “检查”,设置 LD2_output 的类型为 uint8。

在这里插入图片描述

  1. 回到 Simulink 仿真窗口,在仿真模型中添加 STM32G4xx MCU 的 “Digital Write” 模块。
    (1)点击菜单栏的 “库浏览器” 打开库浏览器,展开 “Embedded Coder Support Package for STMicroelectronics STM32 Processors – STM32G4xx Based Boards”。
    (2)选择 “Digital Port Write” 模块,将其拖动到右侧的模型。
    (3)设置 “Digital Write” 模块参数。按照 CubeMX 项目中的 GPIO 管脚配置,将 Port name 设为 “GPIOA”,将 Pin number 设为 “[5]”,即将 PA5 管脚设置为 GPIO_Output。

在这里插入图片描述

  1. 完成搭建仿真模型,保存为文件 STM32G431_MBD02.slx。注意仿真模型 .slx 与 CubeMX 项目 .ioc 要保存在相同的路径下。

2.4 配置 STM32CubeMX 工程

要支持在基于 STM32 处理器的板上运行 Simulink 模型,需要使用 STM32CubeMX 图形化工具。STM32CubeMX 工具采用图形界面,可用于配置 STM32 处理器的外设,并为所选的 STM32 处理器生成外设初始化代码。


  1. 运行 STM32CubeMX,打开通过 Simulink 创建的 CubeMX 工程文件 STM32G431_MBD02.ioc。
    由于在 Simulink 中创建 CubeMX 工程文件时,在硬件选择时已经选择 NUCLEO-G431RB 开发板,该工程文件已经根据 NUCLEO-G431RB 开发板的要求完成了一些基本配置。但考虑对其它硬件开发板需要用户来配置,下面仍按一般步骤进行设置。

  2. 点击菜单栏 “Project Manager” 进入工程配置界面,如下图所示。——非常重要!
    (1)在 Project 中检查项目路径,确认CubeMX 项目文件 .ioc 与 Simulink 仿真模型 .slx 在相同的路径。
    (2)在 Toolchain/IDE 选择 IDE 工具为 “STM32CubeIDE”(也可以根据需要选择其它 IDE 工具 )。
    (3)在 Project 中勾选 “Do not generate the main()”,在生成代码时不生成 main.c 文件中的 main() 函数。
    (4)在 Project 中取消选中 “Generate Under Root”。
    (5)在 “Project” 中继续向下拉,“在 MCU and Firmware Package” 栏中,取消选中 “Use latest available version”,根据所安装的 G4 固件版本,选择 “STM32Cube FW_G4 V1.5.0”;
    如果固件包不是安装在默认路径,则要取消选中 “Use Default Firmware Location”,通过 Browse 选择固件包的安装路径。

在这里插入图片描述

  1. 在 Pinout Configuration 视图进行系统配置。
    (1)选择 “System Core – SYS” 设置调试器类型,将 Debug 设为 “Serial Wire”,
    (2)选择 “System Core – SYS” 设置基础时钟源,将 Timebase Source 设为 “TIM2”——非常重要!
    Timebase Source 默认为 “SysTick”,需要留作它用,因此必须修改为其它定时器。
    (3)选择 “System Core – RCC” 配置时钟模式,设置高速晶振为外部时钟,将 High Speed Clock (HSE) 设为 “Crystal/Ceramic Resonator”。
    在这里插入图片描述

  1. 在 Clock Configuration 视图进行时钟配置。本实验使用 NUCLEO-G431RB 默认设置,如下图所示。
    在这里插入图片描述

  2. 在 Pinout Configuration 视图中,搜索 PA5 管脚(在 NUCLEO 开发板中 连接LD2 灯),将其设置为 GPIO_Output。如下图所示。

在这里插入图片描述


  1. 点击菜单栏 “Project Manager” 进入工程配置界面。
    (1)在 Code Generator 中,勾选 “Generate peripheral initialization as a pair of ‘.c/.h’ files per peripheral”,让每个外设生成独立的’.c/.h’文件。
    在这里插入图片描述

(2)在 Advanced Settings 中,将 “Driver Selector” 全部设置为 “LL”(默认为 “HAL”),为外设选择低级 (LL) 驱动–非常重要! 否则编译会报错。

(3)在 Advanced Settings 中,将 “Generated Function Calls” 的 “Visibility(Static)” 勾选项全部取消,对所有外设初始化函数调用取消选择可见性(静态)。

在这里插入图片描述


  1. 完成以上配置后,使用快捷键 “CTL+S” 或点击 File–Save Project,保存 CubeMX 项目文件。
    注意:在 STM32CubeMX 中配置完成后,不要点击 “GENERATE CODE” 生成代码,而是保存 .ioc 项目文件。

3. Simulink 状态机模型的仿真

  1. 在 Simulink 打开仿真模型 STM32G431_MBD02.slx。
  2. 为输出信号添加一个示波器。
  3. 在 “仿真” 窗口点击 “运行”,观察示波器的输出波形。如下图所示,示波器显示周期为 400 msec 的方波。
  4. 打开状态机 LD2_state 修改状态转换条件,可以得到不同周期和脉宽的波形。

在这里插入图片描述


4. 从 Simulink 模型生成 STM32 代码

  1. 在 Simulink 打开仿真模型 STM32G431_MBD02.slx。

  2. 在 “硬件(Hardware)” 窗口点击 “编译、部署和启动”(Ctrl+B 快捷键),就启动模型 STM32G431_MBD02 的编译过程,为模型生成代码,并加载到 NUCLEO-G431RB 开发板。

模型编译过程的主要信息显示在 “诊断查看器” 中,编译摘要如下。
如果编译中发生错误,错误信息也将显示在 “诊断查看器” 。

 顶层模型编译  
### 正在启动 STM32G431_MBD02 的编译过程
### 正在为 '模型特定' 文件夹结构生成代码和工件
### 正在将代码生成到编译文件夹中: D:\MATLAB\SimulinkProjects\STM32G4\STM32G431_MBD02\STM32G431_MBD02_ert_rtw
### Invoking Target Language Compiler on STM32G431_MBD02.rtw
### Using System Target File: D:\Program Files\MATLAB\R2022b\rtw\c\ert\ert.tlc

### 使用工具链: GNU Tools for ARM Embedded Processors
### 正在创建 'D:\MATLAB\SimulinkProjects\STM32G4\STM32G431_MBD02\STM32G431_MBD02_ert_rtw\STM32G431_MBD02.mk'...
### 正在编译 'STM32G431_MBD02': "D:\Program Files\MATLAB\R2022b\bin\win64\gmake" MATLAB_ROOT=%MATLAB_ROOT% ALT_MATLAB_ROOT=%ALT_MATLAB_ROOT% MATLAB_BIN=%MATLAB_BIN% ALT_MATLAB_BIN=%ALT_MATLAB_BIN%  -j5  -f STM32G431_MBD02.mk all
MW_GNU_ARM_TOOLS_PATH = C:/PROGRA~3/MATLAB/SUPPOR~1/R2022b_1/3P778C~1.INS/GNUARM~1.INS/win/bin
...
 
### Successful completion of build procedure for: STM32G431_MBD02
### 'STM32G431_MBD02' 的 Simulink 缓存工件是在 'D:\MATLAB\SimulinkProjects\STM32G4\STM32G431_MBD02\STM32G431_MBD02.slxc' 中创建的。
编译过程已成功完成

 编译摘要  
编译的顶层模型目标:

模型               操作           重新编译原因     
=========================================
STM32G431_MBD02  代码已生成并完成编译。  生成的代码已过期。  

编译了 1 个模型,共 1 个模型(0 个模型已经是最新的)
编译持续时间: 0h 1m 55.953s

在这里插入图片描述

  1. Simulink 通过调用 STM32CubeProgrammer 将编译的目标文件加载到 STM32 开发板,NUCLEO-G431RB 开发板上的 LD2 会闪烁,表明代码正在运行。

  2. 在 Simulink 模型中打开状态机 LD2_state 修改状态转换条件,重新点击 “编译、部署和启动”,NUCLEO-G431RB 开发板上的 LD2 就以相应的周期和脉宽闪烁,表明基于 Simulink 的模型开发成功。

在这里插入图片描述

  1. 检查代码生成的文件目录,主要内容如下。

在这里插入图片描述

在这里插入图片描述


5. 附录:嵌入式系统的状态机(State Machine)

状态机是一种基于状态转移的程序设计模式,它通过将程序的执行过程分成一系列状态,以及描述状态转移的规则,实现复杂问题的分步解决。

状态机将对象的行为和状态进行解耦,使得对象在不同状态下可以有不同的行为,具有易于理解和维护、独立性强、灵活性好和可扩展的优点。


5.1 状态机的基本概念

在嵌入式系统中,状态机常用来实现复杂的控制逻辑、事件处理和通信协议等功能,其简单灵活的设计在嵌入式系统应用中得到了广泛的运用。

  1. 状态机的组成
    • 状态(State):状态是指系统的某种运行状态,如 “就绪状态”、“工作状态”、“停止状态” 等表示对象所处的状态。
      每个状态都会定义一组可能的行为,并且这些行为只能在该状态下执行。
    • 上下文(Context):指状态机的主要逻辑,负责根据当前状态调用相应的行为,并维护当前状态和处理状态转换。如“当接收到数据时,从就绪状态转移至工作状态”。
    • 事件(Event):事件是指触发状态转移的外部或内部条件,如“按下按钮”、“接收到数据”等。
      当事件发生时,状态机会根据当前状态和事件类型执行相应的操作,可能导致状态的变化。
    • 行为(Action):与每个状态相关联的具体操作。每个状态可以定义一组行为,用于在特定状态下执行相应的逻辑。

  1. 状态机的实现方式
    状态机的实现方式主要包括:表驱动方式、条件语句方式和函数指针方式。
    • 表驱动方式,是指通过查表实现状态转移和执行相应操作,其主要实现方式为二维数组或查找表。
    • 条件语句方式,是指通过条件语句实现状态转移和执行相应操作,其主要实现方式为 if 语句和 switch 语句。
      if 语句常用于状态转移和操作较少的情况,switch 语句常用于状态和事件均较多的情况。
    • 函数指针方式,是指通过函数指针实现状态转移和执行相应操作,其主要实现方式为将状态和触发事件作为函数指针的参数,状态转移和操作函数通过函数指针调用完成。
      函数指针方式适用于状态转移和操作多且异构的情况。

  1. 状态机的工作原理:
    • 初始化:将对象的初始状态设置为合适的状态。
    • 处理事件:当外部事件发生时,上下文将会根据当前状态和事件类型触发相应的行为。
    • 状态转换:在行为执行后,状态机可能会根据一定的条件决定是否需要进行状态转换。状态转换可以将对象的状态从一个状态转变为另一个状态。
    • 执行行为:根据新的状态,上下文将调用相应状态下定义的行为。

  1. 状态机的实例
    业务场景:有一个灯和一个按钮。初试状态 LD2 关闭。当 LD2 点亮时,按下按键就会关闭 LD2;当 LD2 关闭时,按下按键就会点亮 LD2。
    (1)确定状态:只有开灯和关灯两种确定的状态。
    (2)上下文:封装处理状态流转和执行状态改变后的行为。
    (3)事件:把用户按下按钮视为触发事件。
    (4)行为:执行状态改变后的方法,按下按钮后需要去执行开灯/关灯的动作。

5.2 Simulink Stateflow 的使用

Stateflow是集成于Simulink中的图形化设计与开发工具,适用于面向事件的响应系统,主要用于针对控制系统中的复杂控制逻辑进行建模与仿真。

  1. 状态块的内容包括:

    • (1) 状态名称:每个状态的名称置于状态块编辑区首行,其命名规则和一般变量名一样。
    • (2) 入口关键词:在编辑区中键入“entry:”或者“en:”,在下一个关键词出现之前,关键词以下的代码段都是该状态被激活时(或者说进入该状态)执行的动作。
    • (3) 出口关键词:在编辑区中键入“exit:”或者“ex:”,在下一个关键词出现之前,关键词以下的代码段都是该状态退出时执行的动作。
    • (4) during关键词:在编辑区中键入“during:”或者“du:”,在下一个关键词出现之前,关键词以下的代码段都是该状态下重复执行的动作,重复频率取决于仿真步长。
  2. 每个状态由 entry,during,exit 三部分组成,它们之间的动作执行时序满足如下约束:

    • (1) 对于某一确定的仿真步长,系统总是在某一确定的状态下(对于若干互斥的状态)。
    • (2) during 中的动作是在 entry 动作后一个采样步长执行的,在转移条件发生同时执行的动作应放置在 entry 中。
    • (3) during 必须判断处于当前状态下才会执行,而且是在 entry 后的下一个步长运行。当状态a通过状态b 直接进入状态c 时,会执行状态b 的 entry 动作,但不会执行其 during 动作,因为其无法停留在 during。所以一些条件判断(如涉及到转移到下一状态的条件)不可放在当前状态的 during,否则可能永远不会执行。
  3. 状态块与状态块之间需要依靠转移线连接,转移线代表状态的转换路径,其编辑区中提供了一对方括号和一对花括号。

    • (1) 方括号内需要填写转移条件,在有触发事件的前提下也可以不填写,当状态机处于转移线首端的状态,且转移条件为真时(如果有触发事件,事件需要已发生),状态会根据该条转移线进行状态的切换,也就是退出上一个状态并进入下一个状态。(缺省转移没有转移条件)
    • (2) 花括号内填写的是转移发生时执行的动作(也称条件动作),条件动作可以不填写。
    • (3) 括号之外可填写触发事件,在有转移条件的前提下也可以不填写,当状态机处于转移线首端的状态,且事件发生时(如果有转移条件,转移条件需要为真),状态会根据该条转移线进行状态的切换。(缺省转移没有触发事件)
    • (4) 除了缺省转移外,如果转移线不填写转移条件和触发事件,仿真时也能运行,但因为转移没有任何限制,转移线首端的状态仅会持续一个仿真步长就会退出。
    • (5) 点击状态块的边界(除了四个角以外),按住鼠标拖动,即可从状态块引出一条转移线,拖住转移线的末端即可将其连接到其它状态块上(转移线两端可以连在同一个状态块上)。
  4. 常用的触发事件有时间触发事件after,它有两个参数,第一个是时间参数,第二个是时间单位参数,当进入转移线首端的状态时,after开始计时,当达到计时时间后事件发生。

    • (1) 当一个状态块引出两条转移线时,转移线上会有编号,Chart模块会优先判断编号较小的转移线是否满足转移条件(以下提到的“满足转移条件”均指的是转移条件为真且事件触发)。
    • (2) 当转移线两端连接同一个状态块时,有两种情况:
      ① 转移线在状态块外部:如果转移线生效,当前状态会先退出再重新进入,也就是要执行关键词entry下的代码段。
      ② 转移线在状态块内部:内部的转移线优先判断,如果转移线生效,当前状态不会退出,不会执行关键词entry下的代码段。

更多内容可以参考以下内容:
Simulink之State Flow
实例讲解Simulink/Stateflow使用方法详细步骤


(本节完)

参考资料:

  1. 基于 STMicroelectronics STM32 处理器的板快速入门, (https://ww2.mathworks.cn/help/ecoder/stmicroelectronicsstm32f4discovery/ug/Getting-started-stm32cubemx.html?searchHighlight=STM32&s_tid=srchtitle_support_results_2_STM32)

  2. 安装 STMicroelectronics STM32 处理器的支持程序,(https://ww2.mathworks.cn/help/ecoder/stmicroelectronicsstm32f4discovery/ug/install-support-for-stm32-board-processors.html)

  3. 使用 STM32CubeMX 和 Simulink 配置基于 STM32 处理器的板,(https://ww2.mathworks.cn/help/ecoder/stmicroelectronicsstm32f4discovery/ug/STM32-CubeMX-Configuration.html?searchHighlight=STM32&s_tid=srchtitle_support_results_5_STM32)


版权声明:
youcans@xidian 原创作品,转载必须标注原文链接:(https://blog.csdn.net/youcans/article/details/144325556)
Copyright@youcans 2025
Crated:2025-01


http://www.kler.cn/a/469152.html

相关文章:

  • STM32 软件I2C读写
  • C# 服务生命周期:Singleton、Scoped、Transient
  • Flutter 鸿蒙化 flutter和鸿蒙next混和渲染
  • Java实现下载excel模板,并实现自定义下拉框
  • Android 绘制学习总结
  • 《数据结构》期末考试测试题【中】
  • Qt之屏幕录制设计(十六)
  • 系统架构师考试-ABSD基于架构的设计方法
  • python 实现贪心算法(Greedy Algorithm)
  • 2025 年前端新技术如何塑造未来开发生态?
  • 解决CentOS 8 YUM源更新后报错问题:无法下载AppStream仓库元数据
  • SMMU软件指南之使用案例(Stage 2使用场景)
  • MySQL第四弹----数据库约束和数据库设计
  • 【连续学习之LwM算法】2019年CVPR顶会论文:Learning without memorizing
  • STM32拓展 低功耗案例1:睡眠模式 (register)
  • JavaScript系列(8)-- Array高级操作
  • javaEE-网络编程-3 UDP
  • LabVIEW 实现自动对焦的开发
  • 编译与汇编
  • kubelet状态错误报错
  • linux 逻辑卷挂盘
  • F.interpolate函数
  • [Linux]redis5.0.x升级至7.x完整操作流程
  • 使用MySQL APT源在Linux上安装MySQL
  • spring mvc源码学习笔记之五
  • 【华为OD-E卷 - 九宫格按键输入 100分(python、java、c++、js、c)】