1. 前言 在阅读 UM1718 文档的时候,发现 CubeMX 有个比较好的功能,可以用“.extSettings”文件配置生成代码的工程文件结构。只需要要配置“.extSettings”文件一次,后续不管使用哪个IDE(只要是 CubeMX 支持的),都不需要再手动配置文件结构或包含头文件路径了,并且可以保持对各个 IDE(只包括 CubeMX 支持的)配置的一致性,减少工作量。也有客户询问怎么添加工程文件的问题,考虑到可能有些同学不太了解这个功能,所以本文对这个功能进行介绍。 2. .extSettings 文件的作用 “.extSettings”文件是对 CubeMX 配置的补充,是在 CubeMX 配置的基础上进行的额外配置,不是替换 CubeMX 的配置,这点需要注意。 4 C1 d3 t9 i$ t% z- a5 B 总体来说,“.extSettings”文件中的配置包含三部分,分别是[ProjectFiles], [Groups]和[Others],下面分别对这三个部分的功能进行介绍。 1 C; i+ ]+ w: f5 B0 P . Y: c' ?: Q: d 2.1. [ProjectFiles] ) v$ q2 O( e- A# r8 H! a [ProjectFiles]这个部分主要是用来包含一些目录,例如头文件存放的目录。 * o$ ? ^) U% x/ X4 r0 k( A 语法:HeaderPath= ; 示例:HeaderPath=../BSP/STM32H735G-DK 说明:这里的路径是相对于“*.cproject”或“*.project”文件(如果生成的是 CubeIDE 的工程代码的话)的相对路径。如果生成的是其他 IDE 的工程代码,则这个路径是相对于其他工程文件的相对路径,例如“*.eww”文件(IAR)或“*.uvprojx”文件(KEIL)。7 m6 |) B/ K( r8 S. R F) ] 效果:在“.extSettings”文件中添加示例中的内容,重新生成代码后,效果如图 1,红框部分是通过 “.extSettings”文件包含的目录,可以看到已经被包含到工程中。8 O! y Y) F& e0 p3 [ 8 C" N9 K* X. I1 J- U9 | 2.2. [Groups] 这个部分主要是用来在工程中创建文件组并且将文件添加到文件组中,用来组织工程的文件结构。 & Y% `8 e; R3 a# ?3 m Q, [) g; A 语法: = ;< file pathname2> 示例:Drivers/BSP/STM32H735G-DK=../BSP/STM32H735G-DK/stm32h735g_discovery.c; 说明:是工程中的文件组名(若不存在则会自动创建);是文件路径。示例中语句的作用是,嵌套创建“Drivers/BSP/STM32H735G-DK”这个文件组(可以多级嵌套创建),并且将“stm32h735g_discovery.c”文件添加进这个文件组中。可以在一个文件组中添加多个文件,只要多个之间通过分号(“ ;”)隔开即可。 效果:在“.extSettings”文件中添加示例中的内容,重新生成代码后,效果如图 2。 . l5 E- }8 G( F ; A. `# A5 C- t) ^2 @ 2.3. [Others] [Others]这个部分主要是用来使能一些 HAL 模块和添加一些预处理定义语句。 2 S" o# B$ c. r) u0 h ' j" p) `2 ^* t' f" D 2.3.1. 添加 HAL 模块。; j+ Y- P C9 d 语法:HALModule = ; ; % v; `5 K5 L# l. e) p 示例:HALModule=SPI;ADC; ; }3 \" `" ~1 m6 z; o# K 效果:在“.extSettings”文件中添加示例中的内容,重新生成代码后,如果使用 H7 系列的芯片创建的工程,则会自动在 “stm32h7xx_hal_conf.h”文件(如果是其他系列的芯片的话,名字会略有区别)中添加“HAL_SPI_MODULE_ENABLED”和HAL_ADC_MODULE_ENABLED”这两个宏定义,作用是在这个文件中包含 SPI 与 ADC 的头文件。如图 3 所示: % k' q A1 A" u; U 2.3.2. 添加预处理定义语句 " I2 O( r8 k0 R% a3 @; W6 W, y2 l 语法:Define = ; 示例:Define=TEST_STM32H735G_DEMO - r2 v/ x7 R- x8 y5 u1 M) P( R2 o) i 效果:在“.extSettings”文件中添加示例中的内容,重新生成代码后,可以看到在“.extSettings”文件中配置的预定义语句已经被添加到工程中了。 ' {# D. ]' }8 g: c3 i! I4 I6 a7 [ " q* m" _; X8 G& M 9 t! Q$ k# m( [: u ) s8 O8 n3 t& ~$ q4 p \7 r 3. 使用实例 下面的实例基于 STM32H735G-DK 板,使用“STM32Cube_FW_H7_V1.10.0”中的BSP 驱动。要达到的目的是使板子上的 LED1 每隔 0.5S 切换一次亮/灭状态。下面是实现的步骤:9 w8 y" a+ ?! |8 T1 p1 R4 o7 e" G ! ], @- C$ F/ w' d% s8 ?9 ? ) Q4 h' A' X7 n+ ?2 `/ m% n/ v6 m 3.1.1. 创建 CubeMX 配置文件 使用 STM32CubeMX 创建 STM32H735IGK6(STM32H735G-DK)的工程,其他配置都使用默认值即可,并保存这个配置文件。如图 5 所示:1 @/ B" A. E( u & K# r! [ }9 R/ \+ D9 F- { / R/ X! O6 g0 E/ Z# i8 D + U* g* P# m$ d$ ]1 r + x, B6 `: n- { 3.1.2. 添加 BSP 文件 将“STM32Cube_FW_H7_V1.10.0/ Drivers”路径下的“BSP ”目录及其文件都复制到工程目录下(这里是复制到.ioc 文件相同目录下,您也可以根据自己需要复制到其他地方,只要在“.extSettings”文件中包含即可)。如图 6 所示:7 V* T8 w" d0 a* k/ V: h4 y1 d8 o 1 Y$ O) n* |% v3 U0 g7 k 修改 BSP 中“stm32h735g_discovery_conf_template.h”文件的文件名修改为“stm32h735g_discovery_conf.h”, `. B* B2 S& Y. X2 b ! O$ w* N% n- g3 x% _2 Z ; F7 w) N' V8 I7 U 完整版请查看:附件 ; P2 {4 a. K( B' Z. L+ }) l 0 j1 V3 Z# q ^/ ~5 d |
X-NUCLEO-IKS4A1实现手势滑动
stm32使用定时器触发dma传输,启动dma没反应的几种情况的解决方法
【Wio Lite AI视觉开发套件】+cube.ai与食物识别
刘氓兔的杂谈【001】-片上USB 高速PHY
【STM32H7S78-DK评测】CoreMark移植和优化--兼记printf重定向实现方法及常见问题
实战经验 | 从CubeMX下载生成STM32元件封装库
【STEVAL-STWINKT1B测评】1、点亮LED
【STM32H7S78-DK评测】移植AI框架TensorFlow Lite【上篇】
【STM32H7S78-DK评测】移植边缘AI推理框架——TFLM(TensorFlow Lite for Microcontrollers)上篇
【STM32H7S78-DK评测】搭建基于ST官方VSCode扩展的STM32开发环境
楼主,附件在哪里?能不能给一个写好的模板参考一下?