IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> MATLAB/Simulink&&STM32CubeMX&&Keil工具链完成基于模型的设计开发(MBD) -> 正文阅读

[嵌入式]MATLAB/Simulink&&STM32CubeMX&&Keil工具链完成基于模型的设计开发(MBD)

前言

入职一段时间了,需要不断充实自己的技能树,现在汽车行业控制器的开发大都基于“V”流程,采用基于模型开发的方式,此文章作为记录自己不断的学习过程

一、MBD是什么?

基于模型的设计(Model-Based Design,MBD),是一种围绕模型搭建展开的项目开发方法。该方法可避免繁琐的代码编写和调试过程,可极大提高项目开发效率,目前在汽车行业应用普遍。

二、概述

本文只是通过一个简单的示例来展示MBD的开发流程。
设计需求很简单,通过按键控制LED的亮灭状态,即按一次按键LED亮,再按一次按键LED灭。
控制器:STM32F407ZG
应用层开发:MATLAB/Simulink
底层开发:STM32CubeMX
工程编译环境:Keil,在Keil环境中完成应用层与底层代码的集合,并通过编译下载到控制器;

三、软件架构

应用层开发:MATLAB/Simulink,建好模型后通过Emmodded Coder生成C代码;
底层开发:ST公司的CubeMX,配置好时钟及GPIO,可直接生成完整的底层工程代码;
应用层与底层的接口开发:Keil

1-底层代码生成

开发板:STM32F407ZG
1-配置时钟源为外部晶振
!blog.csdnimg.cn/74bd26ef7b114a42a8ee6c43f7390dee.png)
2-配置时钟
在这里插入图片描述
3-配置GPIO
在这里插入图片描述
通过KEY0控制LED0的亮灭,KEY0为PE4引脚,LED0为PF9引脚。配置PE4引脚为输入,PF9引脚为输出;
在这里插入图片描述
在这里插入图片描述

4-配置工程名及存储位置,生成底层代码
在这里插入图片描述

2-底层代码与应用层代码接口开发

Keil打开STM32CubeMX生成的工程,编写应用层与底层的接口函数
在这里插入图片描述
接口函数Get_Key0State()读取按键KEY0引脚PE4的状态,返回1表示按键按下,返回0表示按键未按下;
接口函数Set_Led0State(unsinged char state)用来设置LED0的状态,传入的数值为1,LED0灭,传入的数值为0,LED0亮;

在main.h中声明一下两个函数,用于接口函数调用

3-应用层代码生成

整体思路:通过调用Get_Key0State()函数读取KEY0的状态从而检测按键是否按下。若检测到按键KEY0按下,LED0的状态发生转换;
MATLAB/Simulink中搭建模型如下:
在这里插入图片描述
1-按键处理:
![在这里插入图片描述](https://img-blog.csdnimg.cn/47d5114bd23044dd8afc9d2ff365ee6a.png
按键处理设置了两个延时,即当第一个周期Get_Key0State为0,之后连续两个周期Get_Key0State为1则认为按键被按下,用于请求转换LED0的状态;
2-LED状态转换
在这里插入图片描述
按键按下一次,LED0的状态变换一次;
3-设置Singnal对象,并设置 Storage Class和头文件
在这里插入图片描述
输入信号线Storage Class设置为GetSet,头文件设置为main.h,表示从main.h中调用Get_Key0State函数;
在这里插入图片描述
传递信号线Storage Class设置为ExportedGlobal全局变量
在这里插入图片描述
输出信号线Storage Class设置为ExportedGlobal全局变量
4-MATLAB生成代码配置
在这里插入图片描述求解器设置为离散
在这里插入图片描述
硬件设置为ARM Cortex,开发板为STM32F407ZG,ARM Cortex内核
在这里插入图片描述
Code Generation:设置为ert.tlc,仅生成代码
在这里插入图片描述
设置不用再生成额外的主函数
5-配置完成后Ctrl+B生成代码
在这里插入图片描述
6-将生成的.c和.h文件拷贝到底层工程中
在这里插入图片描述
7-将生成的应用层代码加入到工程中
在这里插入图片描述
在这里插入图片描述
8-加入头文件
在这里插入图片描述
9-调用应用层函数
MATLAB/Simulink生成的应用层函数model_step()功能就是调用main.h中的Get_Key0State()函数,判断按键是否按下,按键按下后变换LED的状态;
在这里插入图片描述
在主函数中调用model_step(),根据model_step()函数中LEDState值得状态设置LED的亮灭;
在这里插入图片描述
10-编译,下载到开发板,观察现象

实验现象

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2022-05-19 12:00:56  更:2022-05-19 12:01:17 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 0:46:25-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码