用CubeMX开发HAL学习记录(一)
前言
笔者还是一名大二学生,目前正在学习CubeMX的开发,自己想通过写博客来加深自己的学习印象,如有不妥请指正。
一、CubeMX基本特点
1、集成MCU Finder功能,便于用户进行芯片选型
STM的芯片种类众多引脚封装也不尽相同,用户可以更具自己需要的内核,引脚封装类型和开发型号选择自己所需要的那一款MCU。
2、图形化方式配置时钟、片内外设,自动生成初始化代码
STM的时钟树都十分庞大且复杂,不同的外设对应着不同的时钟源,因此对照技术手册一面面的寻找总线,和时钟倍频设置是十分复杂的,而CubeMX可以直接越过这些基础操作,只对逻辑层进行编辑,极大的节省了时间成本。但不需要配置寄存器或库函数不代表你不需要去了解时钟树,学习STM的人必须先经过时钟树的洗礼(本文建议结合CubeMX的时钟树和B站正点原子的时钟树对比学习)
B站原子哥时钟树:https://www.bilibili.com/video/BV1Rx411R75t?p=18
3、具有强大的适应性
可以生成工程框架,支持MDK,EWARM等多种开发环境
不过现在作为一名学生,我一般使用可破解的MDK作为我的开发环境,破解资源(注册机好像上传不了可以私聊给,注册年限到2032年)和软件资源可以前往我的主页寻找相关软件下载
4、提高开发效率
CubeMX极大的节省了我们在软件上的开发时间,可以专心聚焦于算法设计和逻辑层的搭建
二、CubeMX下载
1.CubeMX软件下载
CubeMX软件可以从官网直接下载,但官网下载比较麻烦且下载速度很慢,因此我上传了相关安装包
我上传的资源:https://download.csdn.net/download/weixin_45826783/14975406
官网的资源:https://www.st.com/en/development-tools/stm32cubemx.html?sc=stm32cubemx
2.安装环境
因为CubeMX比较特殊它依赖于JAVA环境才能运行,因此还需要给CubeMX配置一个相应的java环境,我这里使用的是jdk,下载途径我也放在了下面(我实在不想到官网下了,太慢了,我下载了某位博主的)
网址太长了就不粘了,直接在CSDN中的下载位置搜索jdk-8u102-windows-x64.exe,匹配度最高的那个就是啦。
3.注意事项
CubeMX在安装的时候要注意不要安装在中文路径下,否则你的CubeMX生成的代码将会无法运行(惨痛的经验教训)。再其次你的Windows的账户名千万别是中文,这应该是开发者的大忌。很多的应用软件是不兼容中文的,例如CubeMX。。。如果是那就乘早改了吧。
4.固件包导入
打开CubeMX软件在最顶层的那一栏中找到help,如下选择进行操作。
然后就可以看见要的芯片包了,选择自己对应的MCU芯片,下载芯片包,我用的是f4的芯片包所以选择下载了STM32F4最新版本的资源包,其他的包可以暂时不下载,等到需要的时候再下载。
三、CubeMX生成文件介绍
1.MCU固件包
STM32微控制器各个产品系列都有独立的MCU固件包,且HAL库也属于MCU固件包的一部分。
STM32Cube_FW_F4_1.24.2 | 内容 |
---|---|
Document | 关于MCU固件包和HAL库使用的官方文档 |
Drivers | 核心驱动 |
Middleware | USB的驱动和FreeRTOS相关文件 |
Projects | 官方例程 |
Utilities | 各类支撑文件,如字体文件和图形应用例程中使用的图片文件等 |
Drivers | 内容 |
---|---|
CMSIS | ARM公司提供的内核微控制器接口标准,如定义和启动文件等 |
STM32F4xx_HAL_Driver | STM32微控制器片内外设的HAL库驱动文件主要由.c和.h组成,同时也是学习控制的核心 |
BSP | 基于HAL库开发的官方开发板的板级支持包 |
2.界面介绍
打开软件可以看见如上界面,其具体功能图中都已经标出。一般在不使用ST官方开发板的情况下我们会选择基于芯片开发的选项去,这样我们可以拥有更多可以自己配置的自由引脚。
在芯片选择界面我们可以根据自己的需求在筛选器中选择符合自己要求的MCU用来开发,但如果你不打算自己设计开发板的话,就好好看看自己买的开发板MCU是什么型号的,然后从筛选器中输入你的型号既可,在列表框选中相应的MCU。
选中自己的MCU之后会在主界面出现相应MCU的引脚配置图,不同的MCU其引脚的封装数不一样,且对应的外设功能可以能会有所不同,点击引脚可以查看对应的功能
在想用相应的外设却找不到对应引脚的时候可以使用搜索功能,直接搜索对应引脚的引脚号
类别栏罗列了大量的外设和中间件的配置
system core:用于配置GPIO、时钟源、中断系统以及系统相关的外设
analog:用于配置A/D和D/A转换外设
timers:用于配置定时器和实时时钟外设
connectivity:用于配置I2C、SPI和UART等连接外设
multimedia:用于配置I2S等音频数据传输外设
computing:用于配置CRC校验外设
middleware:用于配置RTOS和GUI等中间件
3.常规配置
在配置中一般要优先使能其时钟,我们一般使用BYPASS或者Crystal作为我们的时钟源,由于内部时钟采用RC振荡产生,所以导致其精度不高,所以很少使用。在使能了时钟以后对应的PH0和PH1引脚会被配置为OSC_IN和OSC_OUT模式。
其次,为了方便我们调试,还要配置我们的调试接口,调试方法如下,在Debug中选择Serial Wire,CubeMX会自动分配PA13和PA14引脚。
由于时钟树的原理有点过于复杂,可以到B站正点原子的视频中学习,但一般而已我的习惯配置如下,时钟源的频率视情况改动。
后面就是对生成的文件去名了,和之前一样,文件名字不要有中文的出现,也不要放在中文路径下。IDE根据自己安装的型号去选择就好了,版本好像没什么影响。
为了时我们生成的配置文件容易找寻,我们一般会再下面设置生成独立的.c和.h文件
在完成这一系列的操作之后点击生成代码就可以了(之前没有设置任何外设,所以生成的代码没有初始化外设和GPIO,只有相关的时钟源使能和调试接口设置选项)
如果生成的窗口如下图所示,那说明成功生成。
总结
以上就是自己在学习HAL库开发第一天的学习结果,尝试配置了环境和代码。学进度比较缓慢,慢慢来,学一点写一点。来源:oschina
链接:https://my.oschina.net/u/4385631/blog/4941335