软件集成:Simulink与STM32联合开发

文章目录

  • 1 问题引入
  • 2 集成方案
  • 3 建模与编程过程
    • 3.1 Simulink模型搭建
    • 3.2 代码生成配置
    • 3.3 STM32工程搭建
    • 3.4 STM32的main.c文件修改
      • 3.4.1 #include “demo.h”
      • 3.4.2 float Demo_Input;
      • 3.4.3 demo_initialize()
      • 3.4.4 Demo_Input = Demo_Input + 1;
      • 3.4.5 demo_step();
      • 3.4.6 printf()
    • 3.5 软件编译、串口打印
  • 4 多模型的集成
    • 4.1 多模型集成方案
    • 4.2 新增Demo2模型
    • 4.3 修改Stm32工程
    • 4.4 软件编译、串口打印
  • 5 总结与注意点

1 问题引入

博主在《Simulink代码生成》专栏的博客中,通过将模型生成代码,然后研究C代码的逻辑和结构。但是,在汽车ECU软件开发的过程中,代码并不是最终产物,还需要将代码编译成可执行文件,刷入控制器中。过程如下示意图:

3 建模与编程过程

本章节会详细地讲解博主从零开始建模和编程,直到控制器跑起来,并打印出正确的结果。

3.1 Simulink模型搭建

根据上一章的方案介绍,Simulink模型里面就是简单实现了将输入放大两倍的功能。具体搭建过程如下:
1)打开Simulink模型,建立一个Inport模块、一个Outport模块和一个Gain模块。将Gain模块的放大系数设置为2,并用信 线将三者连接。

2)Ctrl + B生成代码后,可以简单地看一下接口和step函数。在demo.c文件中先是定义了输出接口Demo_Output变量,然后在step函数中将Demo_Inport乘以2再赋值给Demo_Output。

3.4.1 #include “demo.h”

#include “demo.h”是为了让main.c文件能够通过demo的头文件访问到demo.c的函数。因为在后面的代码中,main函数中要调用demo_step函数和Demo_Output全局变量。

3.4.2 float Demo_Input;

在main.c中定义了全局变量Demo_Input,使得demo.c可以通过demo_private.h中访问到。这样的话,Demo_Input全局变量就传递到了demo.c中进行计算了。

3.4.3 demo_initialize()

在while(1)循环之前先调用一下demo_initialize();初始化函数,将Demo_Output初始化为0.

3.4.4 Demo_Input = Demo_Input + 1;

让每个while循环中,Demo_Input的值加1。

3.4.5 demo_step();

调用了step函数,对Demo_Input的数值做乘以2的计算,再赋值给Demo_Output。那么通过模型的放大2倍,Demo_Output应该一直是Demo_Input的两倍。也就是说,Demo_Input的输出值是0,1,2,3…,Demo_Output的输出值是0,2,4,6…。

3.4.6 printf()

printf把输入Demo_Input和输出Demo_Output通过串口打印到电脑上。

3.5 软件编译、串口打印

将STM32工程重新编译,并通过ST-LINK下载到硬件中。

通过串口,可以打印出输入和输出的值:

4.3 修改Stm32工程

1)首先将demo2.c文件加入Stm32的项目中。

将修改后的工程编译并下载到Stm32中,通过串口打印出如下内容:

软件集成:Simulink与STM32联合开发
通过Demo2_Output返回的数值,可以看出新增的demo2.slx也在while循环中不断地运行。

5 总结与注意点

  • 注意目标硬件要选择正确,因为这背后是该控制器所规定的不同数据类型的字长。
  • 不要手动修改模型生成的代码,即使是策略上的一点小的修改,也应该先改模型,再生成代码,否则模型与代码上的管理会非常混乱,或者在复杂的项目中容易导致代码的重大缺陷。
  • 由于Simulink本身也只是一个工程软件,自身也有bug,因此生成的代码也有可能与模型的策略不一致。但是这是一个概率极低的事件,如果出现了不符合预期的测试结果,还是应该先去寻找建模过程中的逻辑错误。

以上很多概念在博主的其他博客中也都有更详细的说明。

>>返回个人博客总目录

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2020年7月20日
下一篇 2020年7月20日

相关推荐