应用笔记 | 使用STM32CubeMX生成配置代码的文件结构

关键字:.extsettings,文件结构,bsp
目录预览
1.前言
2..extsetting文件的作用
3.使用实例
4.小结
01  前言  
在阅读um1718文档的时候,发现cubemx有个比较好的功能,可以用“.extsettings文件一次,后续不管使用哪个ide(只要是cubemx支持的),都不需要再手动配置文件结构或包含头文件路径了,并且可以保持对各个ide(只包括cubemx支持的)配置的一致性,减少工作量。也有客户询问怎么添加工程文件的问题,考虑到可能有些同学不太了解这个功能,所以本文对这个功能进行介绍。
02   .extsettings文件的作用
.extsettings文件是对cubemx配置的补充,是在cubemx配置的基础上进行的额外配置,不是替换cubemx的配置,这点需要注意。
总体来说,.extsettings文件中的配置包含三部分,分别是[projectfiles],[groups]和[others],下面分别对这三个部分的功能进行介绍。
2.1. [projectfiles]
[projectfiles]这个部分主要是用来包含一些目录,例如头文件存放的目录。
语法:headerpath=;
示例:headerpath=../bsp/stm32h735g-dk
说明:这里的路径是相对于“*.cproject”或 “*.project”文件(如果生成的是cubeide的工程代码的话)的相对路径。如果生成的是其他ide的工程代码,则这个路径是相对于其他工程文件的相对路径,例如“*.eww”文件(iar)或“*.uvprojx”文件(keil)
效果:在.extsettings文件中添加示例中的内容,重新生成代码后,效果如图1,红框部分是通过.extsettings文件包含的目录,可以看到已经被包含到工程中。
图1 配置[projectfiles]后cubeide工程包含的目录
2.2. [groups]
这个部分主要是用来在工程中创建文件组并且将文件添加到文件组中,用来组织工程的文件结构。
语法:=;
示例:drivers/bsp/stm32h735g-dk=.. /bsp/stm32h735g-dk /stm32h735g_discovery.c;
说明:是工程中的文件组名(若不存在则会自动创建);是文件路径。示例中语句的作用是,嵌套创建“drivers/bsp/stm32h735g-dk”这个文件组(可以多级嵌套创建),并且将“stm32h735g_discovery.c”文件添加进这个文件组中。可以在一个文件组中添加多个文件,只要多个之间通过分号(“;”)隔开即可。
效果:在.extsettings文件中添加示例中的内容,重新生成代码后,效果如图2。
图2 配置[groups]后cubeide工程的文件结构
2.3. [others]
[others]这个部分主要是用来使能一些hal模板和添加一些预处理定义语句。
2.3.1. 添加hal模板
语法:halmodule=;;
示例:halmodule=spi;adc;
效果:在.extsettings文件中添加示例中的内容,重新生成代码后,如果使用h7系列的芯片创建的工程,则会自动在“stm32h7xx_hal_conf.h”文件(如果是其他系列的芯片的话,名字会略有区别)中添加”hal_spi_module_enabled和“hal_adc_module_enabled这两个宏定义,作用是在这个文件中包含spi与adc的头文件。如图3所示:
图3 配置[other]的halmodule后hal的配置文件中自动添加的内容
2.3.2. 添加预处理定义语句
语法:define=;
示例:define=test_stm32h735g_demo
效果:在.extsettings文件中添加示例中的内容,重新生成代码后,可以看到.extsettings文件中配置的预定义语句已经被添加到工程中了。
图4 配置[other]的define后自动在工程中添加的预处理语句
03  使用实例  
下面的实例基于stm32h735g-dk板,使用“stm32cube_fw_h7_v1.10.0”中的bsp驱动。要达到的目的是使板子上的led1每隔0.5s切换一次亮/灭状态。下面是实现的步骤:
3.1.1. 创建cubemx配置文件
使用stm32cubemx创建stm32h735igk6(stm32h735g-dk)的工程,其他配置都使用默认值即可,并保存这个配置文件。如图5所示:
图5 保存cubemx产生的配置文件
3.1.2. 添加bsp文件
将“stm32cube_fw_h7_v1.10.0/drivers”路径下的“bsp”目录及其文件都复制到工程目录下(这里是复制到.ioc文件相同目录下,您也可以根据自己需要复制到其他地方,只要在.extsettings文件中包含即可)。如图6所示:
图6 复制“bsp”到工程目录下
修改bsp中 “stm32h735g_discovery_conf_template.h文件的文件名,修改为“stm32h735g_discovery_conf.h”
图7 添加bsp的配置文件
3.1.3. 创建.extsettings文件
在.ioc文件同级目录下创建.extsettings文件。如下图所示:
图8 添加.extsettings文件
注意:.extsettings文件一定要放在.ioc文件的同一目录下
3.1.4. 修改.extsettings文件的内容
(1)因为要对gpio进行操作,bsp文件是基于hal库的,所以需要使用gpio的hal库(避免gpio模块尚未使能,这里使能gpio模块)。在[others]部分需要添加的内容为:halmodule=gpio
(2)添加bsp中需要包含的目录。所以在[projectfiles]中需要添加的内容为:headerpath=../bsp/stm32h735g-dk
(3)将bsp中的文件添加到工程中,因为只需要操作led,所以需要添加“stm32h735g_discovery.c”文件即可,并创建文件组“stm32h735g-dk”。所以在[groups]中需要添加的内容为:drivers/bsp/stm32h735g-dk=../bsp/stm32h735g-dk /stm32h735g_discovery.c;
综合上面三点,在.extsettings文件中需要添加的内容为:
3.1.5. 使用cubemx生成适用不同ide的工程代码
使用cubemx生成代码(generage code),分别生成cubeide,iar和keil的工程代码。
图9 使用cubemx生成代码
生成代码后,可以看到不同ide的工程文件结构如下图:
图10 stm32cubeide
图11 iar
图12 keil
可以从上面图中看到,“stm32h735g_discovery.c”文件已经被添加到工程中,bsp的目录也已经被包含到工程中。
3.1.6. 添加代码实现功能
1.包含“stm32h735g_discovery.h”头文件。
图13 包含“stm32h735g_discovery.h”
2.使用bsp初始化led1的配置。
图14 使用bsp初始化led1的配置
3.添加led1的翻转操作。
图15 添加led的翻转操作
结果:使用这三种ide进行编译下载后都可以实现led1每隔0.5s切换亮/灭状态的操作。
04  小结  
  使用.extsettings文件配置工程的文件机构,可以做到一次配置,多种平台可用的效果,并可以保持配置的一致性。
注意:.extsettings文件一定要放在.ioc文件相同的目录下
完整内容请点击“阅读原文”下载原文档。
订阅号 关注stm32
视频号  
b站账号 ▽点击“阅读原文”,可下载原文档
原文标题:应用笔记 | 使用stm32cubemx生成配置代码的文件结构
文章出处:【微信公众号:stm32单片机】欢迎添加关注!文章转载请注明出处。

分享一个简单的低范围收发器电路
港口电气自动化PLC如何进行数据采集和远程监控
广西电信联合华为开通了全国首个5G SA独立组网的200MHz示范站
一加6T发布 采用了号称解锁速度全球最快的屏幕指纹
腾讯重磅推出“腾讯视频+”计划
应用笔记 | 使用STM32CubeMX生成配置代码的文件结构
基于51单片机的蜂鸣器设计
罗德与施瓦茨的ATC语音质量保证系统增强安全性、可靠性和效率
ICT在线测试机
一位电气工程师的十大忠告
iPhone8什么时候上市?iPhone8最新消息:iPhone8机型正式确定,iPhone8屏幕支架照片曝光辨别真伪
星空家园通过四步建设计划实现社区生态系统的搭建
Vishay无源元件在OBC设计中的应用
可以实现的JTAG调试器的嵌入式系统
关于MPS电源EMI分析与优化介绍
微软带你了解,AI 加持下的未来产业新形态
笔记本如何野外手机上网
未来铁路应用的安全解决方案
嵌入式linux启动时运行的inittab文件
顺势而谋!龙磁科技金属磁粉芯进入快车道