完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
手把手教你从零开始使用Matlab联合STM32CubeMX以及Keil开发一个STM32的简单程序-LED循环点亮
开篇语 之前的时候一直使用keil单独的做STM32的程序,或者结合STM32CubeMX生成一些底层的驱动,但是这种方法应用层的代码几乎需要完全的手写,其效率和可视化程度是比较低的,正好前一段之间也在使用Matlab做一些应用层的逻辑开发,所以就想到能不能把两者结合起来,这样的话就能实现底层和应用层都能自动生成代码的目的,于是开始了这样的一个探索,经过了一天的不懈奋斗,终于把一个简单的程序调通了,有了这样的方法论的东西,后边增加功能就是小菜一碟了,这个后边会逐步的提到。 看到网上不少的朋友也遇到了很多的坑,所以今天打算把这个整理出来,供大家参考,如果觉得还不错的话,记得点赞哦! 基础软件环境搭建 工欲善其事必先利其器,首先我们需要准备好所有需要的软件环境,正如标题中提到的,需要安装以下的几个: 第一:Matlab,版本可以自己选择,我这边安装的是2018b,大家可以自行去网上下载,我这边也给大家提供一个可以下载的地址,有需要的可以联系; 第二:STM32CubeMX,这个软件在ST的官网就可以下载,而且可以下载任意版本的 根据自己的系统选择,再选择合适的版本即可,这里重点说明以下,如果使用的matlab2018b的版本,STM32CubeMX的版本可以使用5.3.0的版本,小编在一开始就入了这样的一个坑,STM32CubeMX使用的最新的版本,最后生成代码的时候总是有问题,后来更换了版本之后,才把问题解决。 第三:STM32的matlab的toolbox,这个在ST的官网上也有提供,直接下载即可,非常的方便 如果不晓得如何查找,也可以通过如下的链接直接访问: 第四:MDK开发环境,也就是Keil,相信玩过STM32单片机的朋友应该都比较熟悉这个软件,入门必备啊,当前安装的话基本都是5.0以后的版本了,就安装最新的版本就行。如果找不到资源的话可以联系小编,我有自己的私货,但是毕竟不适于广泛传播,所以有需要的朋友单独联系吧,相信你们都是可以找到资源的。 以上的四个是必须需要使用的软件,每个软件都有自己的软硬件安装要求,比如STM32CubeMX需要有java的运行环境,Matlab需要有足够的硬盘空间等等,这个大家自己探索,我这里就不详细的说了。总之,先把这四个软件准备好,不然后续的工作没有办法开展。 硬件准备 前边一个章节主要是需要准备的软件环境,玩单片机没有硬件也不行,我们今天讲解的实例所使用的硬件主要有两个: 第一:调试下载器J-Link 第二:STM32的开发板 这个是跑程序必须的硬件,开发板的等级自由选择,只要有相应的文档资料就行,我这边使用的是正点原子的精英板。 这里给点建议,如果你想要深入学习STM32就需要买一块类似于这样的功能比较丰富的开发板,为以后的使用铺好路,毕竟一块开发板用个三五年也坏不了,太过于简单的开发板会成为你后边学习道路的绊脚石,而且你可能还需要继续购买新的开发板,小编就是前前后后买了三四块板子,基于惨痛的教训,给你的经验。 当然,如果你购买的是类似于正点原子精英板这样的开发板,你也可以不买上面的调试器,他这个开发板有串口下载程序的功能,可以通过一个串口线把程序下载进去,缺点就是只能下载程序,不能调试,这个没有问题,可以在以后编写大程序的时候再购置调试器也是可以的。 正式开始 软硬件都准备到位之后,我们就进入正题 STM32CubeMX配置 第一,打开STM32CubeMX程序,进入界面之后可以在首页通过以下任何一个方式开始创建一个工程 我一般喜欢从选择型号开始 然后会进入到如下的界面,在这个界面的左侧你需要选择大的型号是哪个,然后右侧就会出现具体的型号,你在根据自己的开发板的芯片类型,选择对应的,双击即可进入配置界面。 这里需要提醒一下,你可以选择型号的前提是,已经在STM32CubeMX里面安装了对应的package,这个可以通过help菜单下的“Embedded Software Package Manager”查看和安装,比如我的这个就只安装了F1的package 所以,在这一步我也只能选择F1的MCU型号。 进入到配置界面之后,我们首先配置一下RCC,配置成为外部时钟 然后,再配置GPIO,我这边是按照正点原子的精英板设计配置的,LED0对应的是PB5,LED1对应的是PE5 将PB5配置为GPIO_OUTPUT 将PE5也配置为GPIO_OUTPUT 在GPIO的配置界面分别对参数进行如下配置: GPIO配置完成之后,进行时钟配置,通过上方的菜单可以自由切换 在时钟配置里,我们把外部时钟设置为开发板的晶振大小,我这里是8M,所以填写8,总线时钟配置为72M,这个可以通过中间的倍频自己调整,我的调整如下: 时钟配置结束之后进行项目的配置 项目的路径啥的自己设置就好了,但是这里要记住自己的路径哦,后边matlab设置的时候是需要的,而且需要保持一致,后边会提到。 toolchain的选择,我们就选择MDK-V5 好了,到此为止,STM32CubeMX的项目设置结束了 注意:这里不需要生成代码,这里不需要生成代码,这里不需要生成代码 把工程保存即可,保存的.ioc文件会在Matlab中使用到。 Matlab配置 打开matlab,首先设置路径 通过这个菜单进入设置路径 通过添加并包含子文件夹的功能,把STM32-MAT安装路径下的所有文件添加到这里 可以看到这里需要添加的很多,但是一定要添加,需要使用。 然后将Matlab的工作路径切换到上一章节讲到的STM32CubeMX的工程路径下 打开simulink,创建一个空白的模板 打开空白模板后,首先对simulink进行配置 网上的教程一般都说先配置解释器,参数如下,可以参考这个配置一下 小编觉得这个不是特别重要,毕竟参数只影响解释器的工作频率和方式,并不影响逻辑。下面的是比较重要的 Code Generation需要选择stm32.tlc 这个通过后边的浏览就可以找到相应的选项 选完之后,下边的内容就会自动发生变化,不需要再单独设置,确认和这里展示的一样即可。 然后,设置STM32 Options,如下图所示,一定确定勾选这几项,并且保证这里的路径是你对应程序的安装路径,否则会影响后边的代码生成。 .ioc文件的路径这里如果没有也不要着急,后边会有设置。 设置完成以后,下一步,想simulink模型中添加一个STM32的MCU配置模块 通过如下菜单打开library 在library内找到相应的模块 将其直接拖拽到simulink模型中即可 双击模型中的STM32MCU配置,打开如下界面 在这里添加我们在STM32CubeMX中创建的.ioc文件,添加完成后,相应的单片机型号就会被展示在模块上 接着我们在matlab中搭建逻辑模型,需要点亮LED灯,只需要相应的IO输出低电平即可,这个是和LED的电路设计有关的,比如我使用的这个LED设计如下: IO输出低电平的时候,LED才会亮,不过无所谓,不管是高还是低电平,都是需要向IO写状态,我们这里需要调用GPIO的write模块 还是拖拽进来,这里有可能会出现如下的错误 这个没有问题的,不需要担心,点击ok过去就可以,这里出现错误是因为还没定义IO,定义了IO就好了。 然后,我们设计一个逻辑,让数值等于1的时候写GPIO PB5,数值等于3的时候写GPIO PE5,逻辑框图如下: 可以自行搭建一下,这里不再细说。 搭建完成以后,可以在simulink内仿真一下,仿真之后如下所示: 这个和我们期望的结果是一样的,逻辑没有问题,就可以编译simulink模型,生成代码了,可以通过CTRL+B,或者菜单按钮,都是可以的 这里成功编译之后,进入到关键的一步。 再次回到STM32CubeMX软件(非常重要,我这里栽了坑,我看很多网友也遇到了这个问题) 点击右上角的生成代码 只有在这里才可以生成MDK的工程,matlab里面可以生成的只是应用层逻辑代码。 在这里生成代码以后,就有了MDK的工程,生成的文件夹结果如下: 在Keil中打开的工程文件结构如下: 在keil中编译工程,针对我使用的这一款片子,不需要做任何修改,即可编译成功。 然后下载程序到开发板,效果如下所示 LED 循环点亮 至此,一个完全自动化代码生成的程序就完成了。 遇到的最大的坑 在文中提到了一些注意事项,就是为了避免大家出现同样的问题,这其中最大的坑就是软件版本的问题。 最早的时候我使用的是Matlab2018b加上STM32CubeMX6.2.0版本,过程中没有任何问题,就是最后生成不了可以调用matlab应用层逻辑的MDK工程,自动手动添加可以不能实现功能,所以后来又把STM32CubeMX降到5.3.0版本,这个问题就解决啦! 相信很多小伙伴会遇到这个问题,遇到了之后可以尝试以下版本切换,按照小编本文的版本搭配试一下,一般应该是可以解决问题的。 码字真的好累啊!调试这个工程花费了一天的时间,把这个工程分享给大家码字也码了半天,啥时候可以自动生成这样的文章就好了,就像代码自动生成一样,准确又高效! |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1537 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1490 浏览 1 评论
909 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
653 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1537 浏览 2 评论
1843浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
593浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
496浏览 3评论
494浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
475浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-5 02:28 , Processed in 0.788215 second(s), Total 76, Slave 61 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号