STM32
直播中

泡芙奶昔

12年用户 716经验值
私信 关注
[问答]

怎样将Simulink生成出的代码加入到STM32工程中编译呢

怎样将Simulink生成出的代码加入到STM32工程中编译呢?其过程有哪些?

回帖(1)

张红玲

2021-11-22 15:14:59
  本文首先通过一个简单的Simulink模型生成代码,然后将代码copy到一个Arduino路径中去编译软件。最后将软件下载到Arduino Uno中,通过串口输出Simulink计算的结果。
  阅读本文需要有一定的Arduino IDE开发调试经验和Simulink代码生成经验。关于Simulink代码生成可以参考博主的专栏《Simulink代码生成》。部分内容参照上一篇博客《集成与验证:Simulink与STM32联合开发》,本文就不再赘述。
  1 问题引入
  在上一篇博客《集成与验证:Simulink与STM32联合开发》中,成功地将Simulink生成出地代码加入到STM32工程中编译,并通过下载到STM32F407中验证了方案的正确性。
  对于创客朋友们来说,还有一个常用的硬件就是知名的Arduino。Arduino的封装程度很高,并且有自己的一个专门的IDE供开发。但是Arduino的并成语言是C++,和STM32有些区别。所以本文会研究通过同样的方案、同样的Simulink模型生成C++的代码,并放在Arduino中运行。
  2 集成方案
  本文的集成方案与《集成与验证:Simulink与STM32联合开发》相同,只不过主函数变成了main.ino文件。所以集成方案参照《集成与验证:Simulink与STM32联合开发》的第2章即可。
  3 建模与编程过程
  3.1 Simulink模型搭建
  模型的搭建、Storage Class的建配置与《集成与验证:Simulink与STM32联合开发》的第3.1章相同。
  3.2 代码生成配置
  搭建好模型,配置好信号线的Storage Class后,进行代码生成配置。这里和STM32的配置略有不同。
  1)打开Simulink配置,配置离散求解器、代码生成的目标文件,以及目标硬件。
  
  
  
  这里的目标文件还是ert.tlc,但是语言要选为C++。目标硬件要配置为AVR。
  2)点击左侧的Interface,把Code Interface packaging选为Nonreusable function。默认的选项是C++ Class,会生成C++类的接口,不支持一部分Storage Class。Nonreusable function生成的代码就会和C代码差不多了。
  
  3)Ctrl + B生成代码后会发现生成了一个demo.cpp的C++源文件,而不是demo.c的C源文件。
  
  内容基本上和C源文件一样,这里就不再解析代码内容。
  3.3 Arduino项目搭建
  1)新建一个空白的Arduino项目main.ino,将如下代码拷贝进去。
  #include “demo.h”
  float Demo_Input; //在main.ino文件中定义全局变量Demo_Input
  void setup() {
  // put your setup code here, to run once:
  Demo_Input = 0; //初始化Demo_Input为0
  demo_initialize(); //demo模型的初始化函数
  Serial.begin(9600); //串口初始化
  }
  void loop() {
  // put your main code here, to run repeatedly:
  Demo_Input = Demo_Input + 1; //Demo_Input每个循环加1
  demo_step(); //执行模型的step函数,给Demo_Output赋值为Demo_Input的两倍
  Serial.print(Demo_Input); //打印输入变量和输出变量
  Serial.print(“;”);
  Serial.print(Demo_Output);
  Serial.println(“;”);
  delay(1000); //延时1s
  }
  2)将Simulink生成的源文件和头文件拷贝到main.ino目录下。
  
  在Arduino开发中,只要把源文件和头文件放在项目目录里,就可以调用到了,不需要像STM32的环境中那样配置一番。
  3.4 串口打印、验证结果
  通过Arduino IDE编译、上传,再通过串口打印可以得出Demo_Input和Demo_Output全局变量的数值。
  
  从图中可以看出,串口打印的输入每隔1秒钟会加1,输出一直是输入的2倍。从而验证了模型的2倍增益效果已经体现在Arduino项目中了。
  4 总结
  通过Simulink生成适用Arduino的代码其实也比较简单,主要是注意配置C++以及目标硬件即可。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分