1
完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
本文首先通过一个简单的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++以及目标硬件即可。 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1777 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1621 浏览 1 评论
1080 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
728 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1678 浏览 2 评论
1937浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
730浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
570浏览 3评论
595浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
553浏览 3评论
小黑屋| 手机版| Archiver| 德赢Vwin官网 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-23 00:26 , Processed in 0.762480 second(s), Total 48, Slave 42 queries .
Powered by 德赢Vwin官网 网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
德赢Vwin官网 观察
版权所有 © 湖南华秋数字科技有限公司
德赢Vwin官网 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号