本次更新内容为STM32CubeMX生成STM32H7 工程项目应用中自动生成代码浅析、配置小窍门部分说明,文中Tips是比较易出错的点,多多关注。欢迎关注本公众“硬件开发不完全攻略”,上传可能中可能有些图片可能分辨率有降低,后台回复“STM32”,获取源文档。
配置主界面
1Pinout&Configuration
1.1System Core
1.2Analog
1.3Timers
1.4Connectivity
1.5Computing
1.6Middleware
1.7Trace and Debug
1.8Power and Thermal
2Clock Configuration
3Project Manager
4Configuration Tips(配置小窍门)
4.1模块配置顺序
由于GPIO很多都可以复用为不同的功能,例如我配置UART1时,CubeMx默认使用的是PA.5/PA.6,但是我们设计用的实际上是PB.5/PB.6,我们就需要在“Pinout View”中,手动指定PB.5/PB.6的功能为UART,造成配置效率低下。
为了尽可能提高配置的效率,建议配置各个模块时,按照如下顺序:
ØSTEP1:GPIO(做为普通输入输出功能的管脚,例如:DI、DO、KEY、LED、各外设的硬复位管脚、液晶背光等);
ØSTEP2:ADC、VREF
ØSTEP3:ETH、USB
ØSTEP4:FDCAN、SPI、I2C、UART
ØSTEP5:QSPI
注:STEP1、STEP2一定要先做,后面几步可根据需要依次进行配置。
4.2不同选型产品管脚功能复用冲突解决方法
在iRelay 60X、PMC-751X、PMC-550M-S的实践中,已经碰到过如下几种冲突情况:
ØETH管脚与ADC管脚冲突(ETH没有使用MDIO,但是CubeMX默认使能MDIO,并且不能修改,实际上我们不需要MDIO,对应的MDIO管脚要做为ADC)
ØUART与FDCAN共用相同的管脚,但是CubeMX配置时只能选择其中一个
当前的解决方案是:对于有冲突的部分,再新建一个CubeMX工程,单独配置ETH、FDCAN,再将自动生成的代码添加到工程中。同时,对于ETH,还需要手动修改自动生成的INIT函数,将MDIO的管脚配置删除。
5自动生成代码浅析
5.1工程代码结构
自动生成的工程结构如下图所示,主要有三个文件夹:
Core:各模块配置后,自动生成的代码及头文件,包括main.c;
Drivers:STM32H7XX的HAL、LL驱动库文件,以及与CPU核相关的CMSIS文件;
MDK-ARM:KEIL工程文件
Core包括Src、Inc两个文件夹,分别存放.c .h文件
Drivers也包含两个文件夹
MDK-ARM:
5.2各模块自动生成代码分析
Tips1:各模块自动生成的代码,只有Init、Deinit函数,没有基本的功能函数。基本的功能函数,还必须要通过HAL实现。这是其不太友好、不太便利的地方;
Tips2:为了便于对比自动生成的代码,尤其是在开发过程中,可能会频繁修改CUBEMX的配置,我们自己重新建立工程时,建议最小化改动Core文件夹中的文件内容。
Tips2:HAL库中的函数都支持多任务、多线程,内部都设计了类似于锁的机制,在操作系统上也可以使用。