概述
前言
入职一段时间了,需要不断充实自己的技能树,现在汽车行业控制器的开发大都基于“V”流程,采用基于模型开发的方式,此系列文章作为自己的学习记录
一、MBD概述
基于模型的设计(Model-Based Design,MBD),是一种围绕模型搭建展开的项目开发方法。该方法可避免繁琐的代码编写及调试过程,可极大提高项目开发效率,目前在汽车行业应用普遍
本文只是通过一个简单的示例来展示MBD的开发过程
设计需求:通过按键控制LED的亮灭状态,即按一次按键LED亮,再按一次按键LED灭
控制器:STM32F407ZG
应用层开发:MATLAB/Simulink
底层开发:STM32CubeMX
工程编译环境:Keil,在Keil环境中完成应用层与底层代码的集合,并通过编译下载到控制器
二、硬件设计
控制器:STM32F407ZG
MCU引脚:KEY0按键输入PE4;LED0输出PF9
三、软件设计
3.1底层配置
1、RCC设置为外接时钟,配置为168MHz
2、PE4设置为输入,上拉电阻;PF9设置为输出,上拉电阻,高速模式,初始化值为1;
3、设置IDE为Keil,生成代码
3.2应用层与底层的接口开发
Get_KEY0State()获取引脚PE4的状态;Set_LED0State(uint_8 PinState)通过LED0_State的值来设置PF9的状态,控制LED0的亮灭
3.3应用层开发
编程思路:检测按键状态,通过按键状态控制LED灯的状态切换
3.3.1按键处理函数
当检测到Get_KEY0State连续两个状态为0,则认为按键按下
3.3.2状态切换
每检测按键按下,切换一次状态
3.3.3仿真验证
模拟按键按下5次,LED的状态变化(初始状态为0:1 0 1 0 1
仿真结果符合设计需求
3.3.4输入输出信号类型设置
输入输出的信号名称及数据类型已经在Keil接口开发中配置好,设置输入输出信号为如下类型:
3.3.5代码生成配置
设置为离散求解器
STM32F407ZG为ARM CortexM4内核
3.3.6代码生成
Ctrl+B生成代码
3.4应用层与底层的代码集成
将Matlab生成的文件夹复制到底层生成的工程中:APP_LED
将APP_LED中的.c文件都添加进工程
添加APP_LED的头文件
添加APP_LED.h头文件
在主函数中调用APP_LED_initialize()初始化函数;调用APP_LED_step()函数,根据该函数的计算结果进行LED驱动
注:APP_LED_step()函数运行一次,相当于Matlab模型被运行了一次,在Matlab中设置该模型10ms运行一次,因此该函数在工程中也要确保10ms运行一次,为了方便在While循环中加入了10ms延时来近似模拟10ms运行一次的环境,实际工程中要用跟精确的延时,确保APP_LED_step()函数10ms运行一次
四、下载验证
五、总结
通过一个简单的示例,展示了STM32CubeMX+Keil+Matlab/Simulink工具链的使用方法,如果是复杂的逻辑运算及算法,在Matlab/Simulink中进行应用层开发,优势将非常明显。
最后
以上就是安静烤鸡为你收集整理的MATLAB/Simulink&&STM32CubeMX&&Keil工具链完成基于模型的设计开发(一)前言一、MBD概述二、硬件设计三、软件设计四、下载验证五、总结的全部内容,希望文章能够帮你解决MATLAB/Simulink&&STM32CubeMX&&Keil工具链完成基于模型的设计开发(一)前言一、MBD概述二、硬件设计三、软件设计四、下载验证五、总结所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复