本帖最后由 两只袜子 于 2023-11-14 15:50 编辑
使能Enable multi-threaded support,则在Thread-safe locking strategy下面提供5种不同的策略供选择配置。
- Default:mapping suitable strategy depending on RTOS selection 依据RTOS的配置自动适配合适的策略。如果STM32CubeMX配置中FreeRTOS没被使能,Strategy #2被自动选择;如果STM32CubeMX配置中FreeRTOS被使能,Strategy #4被自动选择;
- Generic Strategy #1:custom implementation 自定义策略
- Generic Strategy #2: allows lock usage from interrupts. 该种策略通过在执行库函数时禁止所有中断来保证Thread-safe
- Generic Strategy #3: denies lock usage from interrupts. 该种策略则假设所有执行为单线程执行,拒绝对任何中断服务程序(ISR)的锁定
- FreeRTOS Strategy #4: allows lock usage from interrupts: Depends on FreeRTOS™. 该策略通过FreeRTOS锁来实现。通过在调用C库函数时禁止低优先级的中断和任务调度来实现。但是高优先级的中断不能保证Thread-safe。
- FreeRTOS Strategy #5: denies lock usage from interrupts. 该策略通过FreeRTOS锁来实现。通过在调用C库函数时挂起所有任务调度来实现Thread-safe,但未禁止中断,需要注意中断中对C库函数的调用。
关于Thread-Safe更详细的技术指导请参考AN5713:STM32CubeMX and STM32CubeIDE thread-safe solution
代码生成所有的参数配置完成后,就可以让STM32CubeMX来生成初始化的工程了。
在”Project Manager”标签页下,有三大类配置,分别在三个子标签页下。在“Project”页下,可以设定项目名称,项目位置,选择工具链和固件版本等;在“Code Generator”页下,可以设置生成代码的相关选项,比如是否拷贝相关的库文件,重新生成代码时,如何处理之前生成的文件等;
在“Advanced Settings”页面下,可以对要生成的初始化代码做进一步的设置,比如使用HAL还是LL驱动,生成的初始化代码是否是静态函数,是否在主函数里调用等。
所有的参数都设置好后,点击“GENERATE CODE”,STM32CubeMX就开始创建工程了。
下面我们来看一下在“Project Manager”标签页下需要注意的一些配置项。
1. 选择不同的项目结构
“Project”页的“Application structure”项可以设置两种不同的项目工程文件结构。
“Basic”结构:适合没有使用中间件或者只使用了一种中间件的项目。用户代码分为Src和Inc两个文件夹,和IDE文件夹位于同一层,这种结构跟Cube库中的例程的文件结构类似。
“Advanced”结构的构成如下图中所示,用户应用逻辑代码放在Core文件夹下,每个中间件的适配文件各自放在独立的文件夹内(比如图中的USB_HOST),并分为和硬件平台相关的Target部分以及和应用相关的App部分,这种结构适合使用了多个中间件的项目,使得项目的集成更加容易。
2. 选择不同的Cube库版本
STM32CubeMX生成工程的时候,默认会使用当前最新的Cube库。如果想使用不同的Cube库版本,可以取消勾选“Use Default Firmware Location”,然后,点击Browse,在本地电脑中选择另一个版本的Cube库。
3. 设置代码相关选项
下图是“Code Generator”标签页的默认设置。
STM32CubeMX默认会将Cube库中HAL文件夹的所有文件,和使用到的中间件文件都拷贝到用户项目中。如果不想拷贝这么多文件,可以选择“Copy only the necessary library files”,让STM32CubeMX仅拷贝必须的文件,比如用户代码只用到了SPI,就只拷贝HAL文件夹中的SPI驱动文件。甚至可以选择“Add necessary library files as reference in the toolchain project configuration file”,不拷贝任何文件,仅建立和Cube库中文件的链接。
在STM32CubeMX生成的工程中,添加用户自己的代码,必须将代码放在由/*USER CODE BEGIN */和/* USER CODE END */标识的用户代码区,这样当再次通过STM32CubeMX生成代码的时候,用户添加的代码才不会被清除,并且一定要保证“Keep User Code when re-generating”项处于勾选状态。
通过“Generate peripheral initialization as a pair of .c/.h files per peripheral”可以选择是否将所有外设初始化的代码放在一个文件,还是分开放在独立的.c/.h文件。
当修改配置后重新生成工程时,默认会删除不再需要的文件,也可以通过取消勾选“Delete previously generated files when not re-generated”,在下次重新生成工程时,保留这些文件。
为了优化系统的功耗,我们一般建议将MCU未使用的GPIO口初始化为模拟输入,在STM32CubeMX中,可以通过勾选“Set all free pins as analog to optimize power consumption ”,让其自动生成这部分代码。
4. 高级设置
STM32Cube库里提供有HAL和LL两类底层驱动接口,HAL驱动的移植性更好,但代码量大,而LL驱动提供高度优化,寄存器层面的访问,代码量小,效率高。使用LL驱动接口需要密切结合用户参考手册,与底层硬件结合度高,移植工作量也会增加。这两类驱动接口,可以在“Advanced Settings”标签页下进行选择。
在该标签页下,还列出了STM32CubeMX将会生成的初始化函数,可以在这里设置是否将该函数定义为静态函数,是否在main函数中调用该初始化函数。
在最右边一列中,还可以设置是否使用某个外设的callback函数,如果设置为enable,则stm32xxxx_hal_conf.h 文件中对应的宏定义为1。
功耗计算STM32CubeMX还有一个有用的功能:功耗评估。在”Tools-PCC“标签页下,功耗评估工具页面中:选择电池的容量,添加运行模式及持续时间,CubeMX将会计算出系统的平均功耗以及电池的寿命。此为理论计算值,可作为产品设计的参考。
关于该工具的具体使用方法可以参考以下培训内容中的功耗测量部分:
•STM32 低功耗产品培训:03- 动手实验 使用STM32CubeMX建立低功耗工程以及功耗实测
• CubeMX生成BLE应用(一)
相关资源最后,我们为大家整理了关于STM32CubeMX使用的官方文档,以及ST本地工程师们准备的和STM32CubeMX使用相关的培训材料和实战经验。从这些与具体应用相关的技术文档中,大家可以了解到更多的STM32CubeMX使用方法和技巧。
1. STM32CubeMX自带视频教程
STM32CubeMX中自带了不少关于STM32CubeMX使用方法和技巧的小视频,比如如何配置时钟树,FreeRTOS配置等等。后续还在不断增加中。
从Help菜单进入,选择Tutorial Videos菜单,就可以看到所有视频教程。
中国区的用户,需要在左上方的下拉菜单中,选择[color=rgb(60, 180, 230) !important]www.stmcu.com.cn服务器,然后就可以直接点击进行观看了。
|