扫码加入

  • 正文
  • 相关推荐
申请入驻 产业图谱

FreeRTOS:看这一篇就够了

8小时前
453
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

嵌入式开发的浪潮中,​​STM32H7系列​​凭借其彪悍的性能与灵活的应用场景,迅速成为工业控制无人机飞控、电机驱动等高算力领域的核心引擎18。本文基于野火推出的​​STM32H743XI开发板​​,详解FreeRTOS,希望能给大家一些帮助。

一、快速开始

1、资料下载

野火电子论坛 - Powered by Discuz!

1.1 STM32库

《STM32库开发实战指南》等实体书籍附件资料 , - STM32讨论区 - 野火电子论坛 - Powered by Discuz!

1.2 野火STM32H743XI开发板(含原理图、HAL库学习资料)

野火STM32H750XB_H743XI Pro — 野火产品资料下载中心 文档

1.3 freertos

[野火]《FreeRTOS内核实现与应用开发实战指南》系列 — 野火产品资料下载中心 文档

1.4 STM32CubeIDE

keil5是个不错的选择,但STM32CubeIDE免费啊。。。

STM32CubeIDE:多操作系统开发工具 - 意法半导体STMicroelectronics

1.5 芯片数据手册

DS12110_STM32H743xI单片机数据手册 | STMCU中文官网

2、环境搭建

2.1 开发环境

采用STM32CubeIDE + cursor的方案,即使用 STM32CubeIDE 作为主要开发环境,用 Cursor 作为代码编辑的补充工具,两个工具配合使用,发挥各自优势。

可以使用 Cursor 的部分: 代码编写、代码补全、代码重构、 版本控制、AI 辅助编程;

其他部分使用 STM32CubeIDE:如芯片配置、编译功能、调试功能。

前提条件:

安装java,参考win10安装部署Jenkins_win10部署jenkins-CSDN博客

2.2 安装STM32CubeIDE

官方下载直接安装,报错如下:

需要在非中文路径下安装:

安装成功后双击选择默认工作空间(非中文路径):

2.3 新建stm工程

注意:这里的工具链选择STM32Cude,最后会改为其它,所以这里也可以选择空!

2.4 安装STM32CubeMX

STM32CubeMX用于生成代码

STM32CubeMX: Graphical tool - STMicroelectronics

2.5 使用cursor

cursor:看这一篇就够了_cursor pycharm-CSDN博客

3、配置FreeRTOS

3.1 参考视频进行配置

STM32Cubemx配置FreeRTOS快速入门(使用STM32Cubemx创建一个基础工程)_哔哩哔哩_bilibili

3.2 配置系统时间源

需要配置为TIM1,因为SysTick默认被FreeRTOS使用。

3.3 配置CMSIS_V2

CMSIS_V2(CMSIS-RTOS API Version 2)是ARM公司为​​基于Cortex-M处理器嵌入式系统​设计的一套标准化实时操作系统(RTOS)接口规范。它旨在为开发者提供统一的API,屏蔽不同RTOS内核(如FreeRTOS、RTX5、ThreadX等)的底层差异,提升代码的可移植性和复用性

3.4 设置高速时钟与时钟源为最大值

3.5 选择工具链

项目对​​代码效率/实时性要求严苛​​(无人机飞控、电机驱动),​选 MDK-ARM。

​对比维度​ ​STM32CubeIDE​ ​MDK-ARM​
​厂商与授权​ ST官方免费开源,跨平台(Win/Linux/macOS) ARM商业软件,需付费授权,仅支持Windows
​架构基础​ 基于Eclipse + GCC工具链,插件扩展性强 自有μVision IDE + ARM Compiler,闭源生态
​核心优势​ 图形化配置(集成CubeMX)+ HAL库无缝支持 编译器优化更强,代码执行效率高(适合资源敏感场景)
​调试能力​ 基础调试+GDB支持,FreeRTOS任务视图 高级调试功能(实时变量跟踪、内存分析)
​适用场景​ ST芯片快速原型开发、跨平台团队、成本敏感项目 对性能/代码体积要求严苛、复杂算法或大型项目

3.6 设置C文件与h文件分开

3.7 使用STM32CubeIDE生成代码(失败!)

方式一:点击保存所有,此时自动弹窗提示是否生成代码,点击OK!

方式二:或者,点击project生成代码!

但是,在使用STM32CubeIDE,以上两种方式始终没能生成代码,原因不详。

生成工程时出现警告

应用utf-8来消除告警

3.8 使用STM32CubeMX生成代码(成功!)

操作与STM32CubeIDE大同小异,部分配置相关的步骤略过,有差异的地方,我会在下面标注!

3.9、其实使用STM32CudeIDE也能成功!

因为有了3.8步骤安装环境依赖的步骤,现在使用STM32CudeIDE也能生成工程了!

4、编译烧录

4.1 编译

4.2 运行

(1)无法连接ST-LINK调试器,因为我用的是DAP-Link(野火提供的fireDAP)

(2)调试器换成DAP-Link

注意:这里有两个文件对应两个运行,即如下图所示,我们在该运行的环境时,需要该对文件,以下步骤是Debug和运行环境的混合示例,更改项都是相同的,因此混在一起说明。

(3)重新运行后报错依旧

排查硬件连接,视乎没有问题。

看起来报错像是缺少OpenOCD运行环境?

Open On-Chip Debugger 0.12.0+dev-00608-gd8ed48fef (2025-02-06-11:17) [https://github.com/STMicroelectronics/OpenOCD]Licensed under GNU GPL v2For bug reports, read	http://openocd.org/doc/doxygen/bugs.htmlstm32h7x_cti_prepare_restart_oneInfo : Listening on port 6666 for tcl connectionsInfo : Listening on port 4444 for telnet connectionsError: open failed

扫描一下openocd看起来没问题

4.3 重置环境运行成功!

(1)重装STM32CubeIDE

(2)重建工程

(3)按照之前的步骤排配置运行环境

之前的配置如下,并运行:

# This is an genericBoard board with a single STM32H743XIHx chip## Generated by STM32CubeIDE# Take care that such file, as generated, may be overridden without any early notice. Please have a look to debug launch configuration setup(s)# source [find interface/stlink-dap.cfg]source [find interface/cmsis-dap.cfg]set WORKAREASIZE 0x8000# transport select "dapdirect_swd"transport select "swd"set CHIPNAME STM32H743XIHxset BOARDNAME genericBoard# Enable debug when in low power modesset ENABLE_LOW_POWER 1# Stop Watchdog counters when haltset STOP_WATCHDOG 1# STlink Debug clock frequencyset CLOCK_FREQ 8000# Reset configuration# use hardware reset, connect under reset# connect_assert_srst needed if low power mode application running (WFI...)reset_config srst_only srst_nogate connect_assert_srstset CONNECT_UNDER_RESET 1set CORE_RESET 0# ACCESS PORT NUMBERset AP_NUM 0# GDB PORTset GDB_PORT 3333set DUAL_BANK 1# BCTM CPU variablessource [find target/stm32h7x.cfg]

(3)以下运行结果表明运行正常

调试器连接正确

目标芯片识别正确

Flash配置正确

调试会话正常建立和结束

Open On-Chip Debugger 0.12.0+dev-00608-gd8ed48fef (2025-02-06-11:17) [https://github.com/STMicroelectronics/OpenOCD]Licensed under GNU GPL v2For bug reports, read	http://openocd.org/doc/doxygen/bugs.htmlstm32h7x_cti_prepare_restart_oneInfo : Listening on port 6666 for tcl connectionsInfo : Listening on port 4444 for telnet connectionsInfo : CMSIS-DAP: SWD supportedInfo : CMSIS-DAP: JTAG supportedInfo : CMSIS-DAP: Atomic commands supportedInfo : CMSIS-DAP: Test domain timer supportedInfo : CMSIS-DAP: FW Version = 2.0.0Info : CMSIS-DAP: Interface Initialised (SWD)Info : SWCLK/TCK = 0 SWDIO/TMS = 1 TDI = 0 TDO = 1 nTRST = 0 nRESET = 0Info : Connecting under resetInfo : CMSIS-DAP: Interface readyInfo : clock speed 8000 kHzInfo : SWD DPIDR 0x6ba02477Info : [STM32H743XIHx.ap2] Examination succeedInfo : [STM32H743XIHx.cm7] Cortex-M7 r1p1 processor detectedInfo : [STM32H743XIHx.cm7] target has 8 breakpoints, 4 watchpointsInfo : [STM32H743XIHx.cm7] Examination succeedInfo : gdb port disabledInfo : starting gdb server for STM32H743XIHx.cm7 on 3333Info : Listening on port 3333 for gdb connectionsInfo : [STM32H743XIHx.cm7] external reset detectedInfo : accepting 'gdb' connection on tcp/3333[STM32H743XIHx.cm7] halted due to breakpoint, current mode: Thread xPSR: 0x01000000 pc: 0x0800053c msp: 0x2000e838Info : Device: STM32H74x/75xInfo : flash size probed value 2048kInfo : STM32H7 flash has dual banksInfo : Bank (0) size is 1024 kb, base address is 0x08000000Info : Device: STM32H74x/75xInfo : flash size probed value 2048kInfo : STM32H7 flash has dual banksInfo : Bank (1) size is 1024 kb, base address is 0x08100000Info : New GDB Connection: 1, Target STM32H743XIHx.cm7, state: haltedInfo : SWD DPIDR 0x6ba02477[STM32H743XIHx.cm7] halted due to breakpoint, current mode: Thread xPSR: 0x01000000 pc: 0x0800053c msp: 0x2000e838Info : Padding image section 0 at 0x0800039c with 4 bytes (bank write end alignment)Info : SWD DPIDR 0x6ba02477[STM32H743XIHx.cm7] halted due to breakpoint, current mode: Thread xPSR: 0x01000000 pc: 0x080002e0 msp: 0x24080000Info : dropped 'gdb' connectionshutdown command invoked

4.4 调试

按照配置运行环境的方法配置调试环境。但是,运行环境配置后,调试环境直接使用了运行环境的配置,因此无需再配置!

4.5 小结

之前使用freeRTOS一直没有调试成功,可能是freeRTOS工程路径问题,具体原因还有待后续进一步查明。

5、调试脚本

5.1 示例程序

/** ****************************************************************************** * @file           : main.c * @author         : Auto-generated by STM32CubeIDE * @brief          : Main program body ****************************************************************************** * @attention * * Copyright (c) 2025 STMicroelectronics. * All rights reserved. * * This software is licensed under terms that can be found in the LICENSE file * in the root directory of this software component. * If no LICENSE file comes with this software, it is provided AS-IS. * ****************************************************************************** */#include <stdint.h>#if !defined(__SOFT_FP__) && defined(__ARM_FP)  #warning "FPU is not initialized, but the project is compiling for an FPU. Please initialize the FPU before use."#endif/* 定义一个全局变量用于GDB交互 */volatile int gdb_input = -1;volatile char gdb_output[32];int main(void){    /* Loop forever */    while(1) {        /* 等待GDB设置输入值 */        if(gdb_input == 0) {            /* 设置输出字符串 */            const char* msg = "从零开始!";            int i;            for(i = 0; msg[i] != '�'; i++) {                gdb_output[i] = msg[i];            }            gdb_output[i] = '�';            /* 重置输入值 */            gdb_input = -1;        }        else if(gdb_input == 1) {            /* 设置输出字符串 */            const char* msg = "hello world!";            int i;            for(i = 0; msg[i] != '�'; i++) {                gdb_output[i] = msg[i];            }            gdb_output[i] = '�';            /* 重置输入值 */            gdb_input = -1;        }    }}

5.2 调试

以debug运行程序,调试方式示例如下:

二、FreeRTOS的初步使用

1、使用stm32cudeMX配置FreeRTOS点亮LED灯

(1)根据原理图找到LED灯对应芯片的引脚 PB1

(2)设置引脚为GPIO_OUT并设置标签为LED_B

(3)配置GPIO

(4)使用stm32CudeIDE打开工程

(5)使用cursor编程

  while(1){    HAL_GPIO_WritePin(LED3_GPIO_Port, LED3_Pin, GPIO_PIN_RESET);  //熄灭    HAL_Delay(500);    HAL_GPIO_WritePin(LED3_GPIO_Port, LED3_Pin, GPIO_PIN_SET);    //点亮    HAL_Delay(500);  }

(6)编译失败,因为要配置很多东西

(7)使用stm32CudeIDE重建工程

还是得按照如下方式重建,并按照之前的方式配置运行环境。

运行成功后,如下灯会间隔0.5秒闪烁:

2、当前工程分析

2.1 工程结构

FreeREEL/├── Core/                 # 核心应用代码├── Drivers/              # STM32 HAL驱动库├── Middlewares/          # 中间件(FreeRTOS)├── Debug/                # 编译输出文件└── 配置文件

2.2主要文件描述

1. 主程序文件main.c - 程序入口点作用: 系统初始化和主程序逻辑功能:系统时钟配置(480MHz)MPU内存保护配置HAL库初始化GPIO初始化FreeRTOS调度器启动当前包含LED闪烁循环(需要修复)freertos.c - FreeRTOS任务管理作用: 实时操作系统任务定义和管理功能:默认任务创建和配置LED闪烁功能实现使用osDelay()进行任务延时2. 硬件抽象层文件gpio.c - GPIO配置作用: 通用输入输出端口配置功能:PB1引脚配置为LED输出外部晶振引脚配置(PH0/PH1)GPIO时钟使能stm32h7xx_hal_timebase_tim.c - 时间基准作用: 为HAL库提供时间基准功能:配置TIM1为1ms定时器为HAL_Delay()提供时间基准支持FreeRTOS的tick中断stm32h7xx_hal_msp.c - MSP初始化作用: 微控制器支持包初始化功能: 外设底层初始化配置3. 中断处理文件stm32h7xx_it.c - 中断服务程序作用: 处理所有硬件中断功能:异常处理(HardFault、MemManage等)TIM1中断处理系统异常保护startup_stm32h743xihx.s - 启动文件作用: 系统启动和向量表功能:设置堆栈指针初始化数据段清零BSS段跳转到main函数定义中断向量表4. 系统支持文件sysmem.c - 内存管理作用: 动态内存分配支持功能:实现_sbrk()函数为malloc/free提供支持堆内存管理syscalls.c - 系统调用作用: 标准C库系统调用实现功能:文件操作函数(read, _write等)进程管理函数为printf等函数提供支持system_stm32h7xx.c - 系统配置作用: 系统级配置和初始化功能:系统时钟配置外设时钟管理系统复位处理5. 配置文件FreeRTOSConfig.h - FreeRTOS配置作用: 实时操作系统参数配置功能:任务优先级设置(56级)堆大小配置(15KB)时钟频率设置功能开关配置stm32h7xx_hal_conf.h - HAL库配置作用: 硬件抽象层功能配置功能:外设使能/禁用时钟配置中断优先级设置STM32H743XIHX_FLASH.ld - 链接脚本作用: 内存布局和链接配置功能:定义Flash和RAM区域设置堆栈大小内存段布局

2.3 一个问题

main函数中添加了LED闪烁循环,这个循环会阻止FreeRTOS调度器启动,因为程序永远不会执行到osKernelStart()。

3、使用FreeRTOS任务

(1)在main.c中删除while代码

(2)在freertos.c中增加任务代码

/* USER CODE BEGIN Header *//**  ******************************************************************************  * File Name          : freertos.c  * Description        : Code for freertos applications  ******************************************************************************  * @attention  *  * Copyright (c) 2025 STMicroelectronics.  * All rights reserved.  *  * This software is licensed under terms that can be found in the LICENSE file  * in the root directory of this software component.  * If no LICENSE file comes with this software, it is provided AS-IS.  *  ******************************************************************************  *//* USER CODE END Header *//* Includes ------------------------------------------------------------------*/#include "FreeRTOS.h"#include "task.h"#include "main.h"#include "cmsis_os.h"#include "gpio.h"/* Private includes ----------------------------------------------------------*//* USER CODE BEGIN Includes *//* USER CODE END Includes *//* Private typedef -----------------------------------------------------------*//* USER CODE BEGIN PTD *//* USER CODE END PTD *//* Private define ------------------------------------------------------------*//* USER CODE BEGIN PD *//* USER CODE END PD *//* Private macro -------------------------------------------------------------*//* USER CODE BEGIN PM *//* USER CODE END PM *//* Private variables ---------------------------------------------------------*//* USER CODE BEGIN Variables *//* USER CODE END Variables *//* Definitions for defaultTask */osThreadId_t defaultTaskHandle;const osThreadAttr_t defaultTask_attributes = {  .name = "defaultTask",  .stack_size = 128 * 4,  .priority = (osPriority_t) osPriorityNormal,};/* Private function prototypes -----------------------------------------------*//* USER CODE BEGIN FunctionPrototypes *//* USER CODE END FunctionPrototypes */void StartDefaultTask(void *argument);void MX_FREERTOS_Init(void); /* (MISRA C 2004 rule 8.1) *//**  * @brief  FreeRTOS initialization  * @param  None  * @retval None  */void MX_FREERTOS_Init(void) {  /* USER CODE BEGIN Init */  /* USER CODE END Init */  /* USER CODE BEGIN RTOS_MUTEX */  /* add mutexes, ... */  /* USER CODE END RTOS_MUTEX */  /* USER CODE BEGIN RTOS_SEMAPHORES */  /* add semaphores, ... */  /* USER CODE END RTOS_SEMAPHORES */  /* USER CODE BEGIN RTOS_TIMERS */  /* start timers, add new ones, ... */  /* USER CODE END RTOS_TIMERS */  /* USER CODE BEGIN RTOS_QUEUES */  /* add queues, ... */  /* USER CODE END RTOS_QUEUES */  /* Create the thread(s) */  /* creation of defaultTask */  defaultTaskHandle = osThreadNew(StartDefaultTask, NULL, &defaultTask_attributes);  /* USER CODE BEGIN RTOS_THREADS */  /* add threads, ... */  /* USER CODE END RTOS_THREADS */  /* USER CODE BEGIN RTOS_EVENTS */  /* add events, ... */  /* USER CODE END RTOS_EVENTS */}/* USER CODE BEGIN Header_StartDefaultTask *//**  * @brief  Function implementing the defaultTask thread.  * @param  argument: Not used  * @retval None  *//* USER CODE END Header_StartDefaultTask */void StartDefaultTask(void *argument){  /* USER CODE BEGIN StartDefaultTask */  /* Infinite loop */  for(;;)  {    // LED闪烁功能    HAL_GPIO_WritePin(LED_B_GPIO_Port, LED_B_Pin, GPIO_PIN_RESET);  // 熄灭    osDelay(1000);  // 使用FreeRTOS延时函数,延时1000ms    HAL_GPIO_WritePin(LED_B_GPIO_Port, LED_B_Pin, GPIO_PIN_SET);    // 点亮    osDelay(1000);  // 使用FreeRTOS延时函数,延时1000ms  }  /* USER CODE END StartDefaultTask */}/* Private application code --------------------------------------------------*//* USER CODE BEGIN Application *//* USER CODE END Application */

三、浅谈STM32CudeIDE

说实在的,STM32CudeIDE没有keil5好用,但免费啊!

1、代码补全

这个软件好像没有代码补全,这是我第一次用的感觉。

(1)手动代码补全

2、文件复制

(1)编辑器禁止拖动文件到项目文件夹中

(2)即使复制文件到项目文件夹中,编辑器也不显示这些文件

(3)目前看,默认情况下只能手动添加文件夹和文件

(4)解决办法:拷贝文件,右键文件夹,粘贴

可能需要如下配置:

①关闭 STM32CubeIDE打开 IDE 的配置文件:

{安装目录}/STM32CubeIDE/configuration/.settings/org.eclipse.ui.prefs

②添加以下配置:

enable_drag_and_drop=true

dragAndDropEnabled=true

③保存文件并重启 IDE

3、编译器

(1)没有安装STM32CudeMX生代码失败,但不会有提示,画面一闪而过

(2)STM32CudeIDE使用自带的CudeMX生成代码时,不能选择其他编译器

(3)STM32CudeIDE手动配置其他编译器如MDK还挺麻烦

四、初探STM32H743

1、封装【底层驱动】的流程

1.1 蜂鸣器的外设时钟

(1)以蜂鸣器为例,找到原理图(通过板卡原理图查找)

从原理图我们知道,板卡使用引脚 PI8 开控制蜂鸣器通断。

(2)蜂鸣器在总线上的位置(通过H7X3参考手册查找)

查找方式:CPU内核》总线矩阵》系统总线》外设

GPIO由总线AHB4控制其使能与否,只要控制指定GPIO的时钟打开就能使能。

了解AHB4

找到AHB4的时钟,需要找到蜂鸣器所在的GPIO端口时钟的使能方式。

那蜂鸣器在哪个GPIO上? PI8拆解一下为GPIO I 8,所以是GPIOI的8号引脚。

找到RCC 的基地址为x58024400

使能偏移地址为x0E0

RCC AHB4 时钟寄存器 (RCC_AHB4ENR) =基地址+偏移地址

1.2 蜂鸣器的地址

(1)模式

(2)端口配置表

(3)GPIO寄存器

(4)端口对应关系

注意寄存器的编号,从小编号开始一一对应。

(5)根据端口配置表找地址

找到GPIOI的基地址为x58022000

MODE偏移地址为0x00

OTYPER偏移地址为0x04

OSPEEDR偏移地址为 0x08

PUPDR偏移地址为0x0C

1.3 编写代码

对指定多个寄存器按照手册赋值即可。

2、封装【板级支持包】的流程

1.1 查看原理图

例:蜂鸣器,见上一小节

1.2 使用hal库构建

如图是gpio的使用流程,需要按照这个步骤执行,可实现初始化。

如图是GPIO的控制流程

3 裸机移植LwIP

3.1 下载lwip包

Index of /releases/lwip/

3.2 源码裁剪

先确保工程编译通过,再在工程中新建对应目录

接着不完全添加api、core、include、netif文件

3.3 编译排查错误

增加编译文件,继续编译

提示缺失lwipopts.h ,这个文件定义了是无系统移植,还是有系统移植等配置。现在源码中搬运该文件,并添加进编译器中:

接着报cc.h文件没有,cc.h是选择小端模式,涉及到网络字节序,人类以大端序来读数据,即高地址存高字节,低地址存低字节,小端模式刚好反过来,因此该文件用于大端序与小断续转换。现在继续添加unix看看(unix不确定是否靠谱,但肯定不是win32):

突然提示hal库有问题:

需要启用以太网模块:

我们可以通过手动的方式安装依赖,也可以借助软件生成代码的工具来实现,即CubeMX,也可以手动迁移:

下载对应版本的安装包:

https://www.st.com/en/embedded-software/stm32cubeh7.html#get-software

赋值以太网文件到工程中(注意:这里不标准,应该迁移到Driver那个位置下对应的文件夹中):

现在又提示了errno.h文件冲突,直接使用STM的头文件

通过上述处理,最终结果表明,我们已经将lwip初步移植到了工程中,接下来我们得考虑一下,咋们该如何使用lwip了。

3.4 编写网卡驱动

(1)原理图

(2)相关文件

ethernetif.c是 LWIP 官方推荐的以太网接口驱动实现文件,用于实现以下几个核心函数: low_level_init():初始化硬件(MAC、PHY、DMA 等) low_level_output():发送数据包 low_level_input():接收数据包 ethernetif_input():数据包输入钩子,供 LWIP 调用

LAN8720A.c 是特定 PHY(物理层芯片)LAN8720A 的硬件驱动封装文件。即上述原理图的实现。

可以按照以下方式设计:

  • LAN8720A.c:提供PHY操作函数
  • ethernetif.c:负责HAL库初始化、数据收发、链路状态检查
  • bsp_eth.c:负责PHY初始化、LwIP初始化、网络接口管理

3.5成果展示

(1)目录结构

(2)httpserver

可通过浏览器进行访问。

五、了解STM32H743芯片

我们可以通过STM32CubeMX了解STM32H743芯片。

1、Pinout & Configuration

STM32CubeMX 中 “Pinout & Configuration” 选项卡下的各个配置类别可以总结如下:

配置类别 (Category) 主要功能描述 举例说明
​System Core​ 配置微控制器的核心系统功能和外设。 配置 ​​GPIO​​ 引脚的电平、速度、模式(输入/输出);配置 ​​NVIC​​(嵌套向量中断控制器)以设置中断优先级;配置 ​​DMA​​(直接内存访问)通道等。
​Analog​ 配置所有模拟信号相关的外设。 配置 ​ADC​(模数转换器)的采样时间、通道和分辨率;配置 ​​DAC​​(数模转换器)的输出通道和触发源;配置 ​​COMP​​(比较器)等。
​Timers​ 配置各类定时器/计数器外设。 配置 ​​TIMx​​(通用定时器)生成PWM信号控制电机;配置 ​​RTC​​(实时时钟)设置日期和时间;配置 ​​IWDG/WWDG​​(独立/窗口看门狗)防止程序跑飞。
​Connectivity​ 配置各种有线通信接口外设。 配置 ​I2C​ 与传感器通信;配置 ​SPI​ 连接存储芯片显示屏;配置 ​​USART/UART​ 进行串口通信;配置 ​​USB​​、​​Ethernet​​ 等。
​Multimedia​ 配置与图形、音频等多媒体相关的接口。 配置 ​​LTDC​​(LCD-TFT显示控制器)驱动RGB接口屏幕;配置 ​​SAI​​(串行音频接口)处理音频数据流。
​Security​ 配置与芯片安全相关的功能和外设。 配置 ​​HASH​​(哈希算法单元)、​​CRYP​​(加密处理器)用于数据加密/解密;配置 ​​RNG​​(随机数发生器)等。
​Computing​ 配置用于加速数学计算的专业硬件外设。 配置 ​​FMAC​​(滤波器数学加速器)进行滤波计算;配置 ​​CORDIC​​ 用于三角、双曲函数等数学运算。
​Middleware and Software Packs​ ​启用和配置​​中间件组件(如FreeRTOS、FATFS、LWIP等)及其参数。 ​启用FreeRTOS​​并配置其内核频率、任务栈大小、是否使用互斥量/消息队列等;启用​​FATFS​​并设置其与SDIO或SPI的关联。
​Trace and Debug​ 配置芯片的调试和性能分析功能。 启用 ​​SWD/JTAG​​ 调试接口;配置 ​​ITM​​(指令跟踪单元)用于printf重定向和事件日志;配置性能计数器等。
​Power and Thermal​ 配置芯片的电源管理和热保护功能。 配置电源域、低功耗模式(睡眠、停机、待机);配置过温保护等。

​总结说明:​​ 此表格是STM32CubeMX进行硬件抽象层(HAL)配置的核心。通过图形化界面选择这些类别,用户可以直观地​​分配引脚功能​​、​​初始化外设参数​​、​​启用中间件​​,而无需手动编写繁琐的底层初始化代码,极大地提高了开发效率。

1.1 System Core

“System Core” 是配置芯片最基础、最核心的系统功能,是几乎所有项目都必须配置的部分。下图展示了其包含的子模块:

配置子模块 (Sub-module) 主要功能描述 为何至关重要? 典型配置举例
​SYS​​ (System) 配置​​调试接口​​和​​系统定时器​​(如SysTick)。 ​必须配置​​。调试接口(如SWD)是下载程序和调试的基础。系统定时器是HAL库和操作系统的心跳。 ​Debug​​: 选择Serial Wire(SWD) 以保留调试引脚并允许连接调试器。 ​​Timebase Source​​: 选择除SysTick外的定时器(如TIM1),若使用RTOS,以避免冲突。
​RCC​​ (Reset and Clock Control) 配置​​时钟树​​。设置系统时钟源(HSE/HSI)、主频、以及各外设(如USB、定时器)的时钟源和分频。 ​必须配置​​。决定了芯片运行的“速度”和“节奏”。性能和省电都基于此。 启用 ​​HSE​​(外部高速晶振),选择其为系统时钟源,并配置PLL将主频提升至芯片的最高运行频率(如480MHz)。
​GPIO​​ (General Purpose Input/Output) 配置​​引脚功能​​。设置每个引脚的工作模式(输入/输出/模拟/复用功能)、输出类型、上下拉电阻、速度等。 ​最常用​​。芯片与外部世界交互的直接通道。 配置一个引脚为Output Push-Pull,用于点亮LED;配置另一个引脚为External Interrupt,用于检测按键。
​NVIC​​ (Nested Vectored Interrupt Controller) 配置​​中断优先级​​和​​使能​​。管理所有外设中断的触发和响应顺序。 ​核心机制​​。高效处理异步事件的关键。 使能UART的“接收中断”和“空闲中断”,并设置其优先级高于定时器中断,以确保串口数据能及时被处理。
​CORTEX_M7​​ (或 M4/M3等) 配置​​处理器内核​​特性。如缓存(I-Cache/D-Cache)、浮点单元(FPU)、内存保护单元(MPU)。 ​性能关键​​。充分释放内核性能,优化系统。 使能 ​​I-Cache​​ 和 ​​D-Cache​​ 以加速代码执行;使能 ​​FPU​​ 以硬件加速浮点运算。
​DMA / BDMA / MDMA​​ (Direct Memory Access) 配置​​直接内存访问​​控制器。让数据在外设和内存间自动搬运,无需CPU参与,极大节省CPU资源。 ​高效数据搬运​​。处理大量数据(如ADC、UART、SPI/I2C通信)的必备利器。 配置DMA通道,将ADC的转换结果自动传输到内存中的数组;配置SPI的DMA来自动发送显示数据到屏幕。
​IWDG1 / WWDG1​​ (Independent/Window Watchdog) 配置​​看门狗​​定时器。用于检测和恢复来自软件故障的系统故障。如果未定期“喂狗”,芯片将复位。 ​系统可靠性​​。防止程序跑飞,提高产品在恶劣环境下的稳定性。 启用 ​​IWDG​​(独立看门狗),并设置约1秒的超时时间。在主循环中定期执行“喂狗”操作。
​RAMECC​​ (RAM Error Correction Code) 配置RAM的​​错误检测与纠正​​功能。用于高可靠性应用,能检测和修正内存中的位错误。 ​安全与可靠性​​。适用于汽车、工业等对错误零容忍的领域。 在安全关键型应用中使能此功能,以监控内存完整性。

1.2 Analog

“Analog” 部分负责配置所有与模拟信号处理相关的片上外设,是连接真实模拟世界与数字处理核心的桥梁。下图展示了其包含的子模块列表。

配置子模块 (Sub-module) 主要功能描述 为何重要? 典型配置与应用举例
​ADC1, ADC2, ADC3​​ (Analog-to-Digital Converter) ​模数转换器​​。将连续的模拟电压信号(如来自传感器的信号)转换为微处理器可以处理的数字值。 ​感知世界的关键​​。绝大多数用于检测物理量(温度、压力、光强、位置)的传感器都需要通过ADC来读取。 配置 ​​ADC1​​ 的通道1(IN1)为单次转换模式,12位分辨率,启用规则组。用于​​读取电位器的电压​​或​热电偶放大后的信号​​。
​COMP1, COMP2​​ (Comparator) ​模拟电压比较器​。比较两个模拟输入电压的大小,并输出一个高或低的数字电平信号。响应速度极快。 ​高速决策​​。用于需要快速反应的场合,如过流保护、信号触发、窗口检测等,无需CPU参与。 配置 ​​COMP1​​,将内部参考电压(如1.2V)设为反相输入,一个待检测信号(如电池电压)设为同相输入。当电池电压低于参考值时,输出翻转,可​​触发中断进行低电量报警​​。
​DAC1​​ (Digital-to-Analog Converter) ​数模转换器​​。将微处理器输出的数字值转换为连续的模拟电压信号。 ​控制模拟设备​​。用于驱动需要模拟信号控制的设备,生成特定的波形。 配置 ​​DAC1​​ 输出到指定引脚,使用定时器触发,在缓冲区中存入正弦波数据表。用于​​生成正弦波、音频信号​​或作为精密可调电压源
​OPAMP1, OPAMP2​​ (Operational Amplifier) ​片内运算放大器​。可用于放大、缓冲、滤波传感器传来的微小模拟信号,无需外部芯片。 信号调理集成化​​。简化外部电路设计,提高可靠性,节省成本和PCB空间。 配置 ​​OPAMP1​​ 为PGA(可编程增益放大器)模式,增益设置为16倍,用于​​放大麦克风信号​​或​​称重传感器的微弱输出​​,再送给ADC进行采样。
​VREFBUF​​ (Voltage Reference Buffer) ​内部电压参考缓冲器​。可以产生一个高精度、稳定的电压参考源,既可提供给内部ADC/DAC使用,也可输出到芯片引脚。 ​提高转换精度​​。为ADC/DAC提供一个比电源电压更稳定、更洁净的参考电压,是其精确工作的基础。 启用 ​​VREFBUF​​,设置输出参考电压为2.048V,并选择其为ADC和DAC的参考电压源。这可以​​显著提高电池供电设备中ADC采样精度​​的稳定性。

1.3 Timers

定时器是微控制器的“心脏”和“节拍器”,负责精确地计时、生成波形、捕获信号等,是嵌入式系统中用途最广泛的外设之一。STM32的定时器种类繁多,功能各异,下图清晰地列出了芯片上所有可用的定时器资源。

定时器类型 (Timer Module) 主要功能与特点 为何重要? 典型应用举例
​TIM1, TIM8​​ (Advanced-control) ​高级控制定时器​​。功能最全,带​​死区插入​​和​​刹车​​功能的互补PWM输出,是电机控制数字电源的核心。 用于驱动三相电机开关电源等需要高可靠性PWM的场合。 生成 ​​6路互补PWM​​ 驱动三相无刷电机,并配置死区时间防止上下桥臂直通短路。
​TIM2, TIM3, TIM4, TIM5​​ (General-purpose) ​通用定时器​​。最常用的定时器,具备基本的定时、输入捕获、输出比较、PWM生成等功能。 ​全能选手​​,适用于绝大多数需要定时、计数和PWM的场景。 ​TIM2​​ 用于周期性中断(每1ms执行一次任务);​​TIM3​​ 的PWM模式控制LED亮度;​​TIM4​​ 的输入捕获模式测量脉冲宽度。
​TIM6, TIM7​​ (Basic) ​基本定时器​​。功能最简单,仅用于​​定时​​和​​触发DAC​​。 为DAC转换提供精确的触发时钟,或作为简单的时基。 ​TIM6​​ 配置为定时触发 ​​DAC​​,以固定的采样率输出音频波形。
​TIM12, TIM13, TIM14​​ (General-purpose) ​通用定时器​​(通常位于APB1总线)。功能与TIM2~5类似,但通道数可能更少。 作为额外可用的通用定时资源。 当主要通用定时器被占用后,可用 ​​TIM14​​ 生成一个额外的PWM信号。
​TIM15, TIM16, TIM17​​ (General-purpose) ​通用定时器​​(通常位于APB2总线)。常带有​​互补输出​​和​​刹车​​功能,可视为简化版的高级定时器。 适合驱动步进电机、生成带死区的简单互补PWM。 ​TIM16​​ 生成一路带死区控制的互补PWM来驱动半桥电路
​HRTIM​​ (High Resolution) ​高分辨率定时器​​。精度远超普通定时器(可达皮秒级),用于需要极高PWM频率和精度的领域。 用于数字电源、LLC谐振控制、高频照明驱动等高端应用。 在开关电源中,生成频率高达MHz级、占空比调节精度极高的PWM信号。
​LPTIM1, LPTIM2, ...​​ (Low Power) ​低功耗定时器​​。可在芯片的低功耗模式(如停止、待机)下保持运行,由低速时钟(LSI/LSE)驱动。 ​节能关键​​。在系统休眠时依然能进行计时、唤醒或触发事件。 配置 ​​LPTIM1​​ 在待机模式下每2秒唤醒一次芯片,采集传感器数据后再次休眠。
​RTC​​ (Real-Time Clock) ​实时时钟​​。独立的日历时钟,带闹钟和周期性唤醒功能,通常由后备电池供电。 ​记录真实时间​​。用于需要记录日期、时间的设备,如数据记录仪、智能家居 设置 ​​RTC​​ 日历,并配置闹钟在每天特定时间触发事件,或配置唤醒定时器周期性唤醒系统。

1.4 Connectivity

“Connectivity” 是配置芯片与外部其他芯片、模块或网络进行​​通信​​的所有外设,是物联网(IoT)和复杂控制系统的核心。下图清晰地列出了该芯片支持的丰富通信接口。

通信接口 (Interface Module) 主要功能与特点 为何重要? 典型应用举例
​FDCAN1, FDCAN2​​ (Flexible Data Rate CAN) ​控制器局域网​​。一种​​可靠​​的工业级串行总线,具有错误检测和容错能力,适用于嘈杂的工业环境。FD版本支持更高的数据速率。 ​汽车和工业网络骨干​​。用于连接汽车中的ECU或工业现场的各种设备,实现可靠的数据交换。 连接 ​​汽车仪表盘​​ 和 ​​发动机控制单元​​;在工厂中,连接 ​​PLC​​ 和多个 ​​传感器/执行器​。
​ETH​​ (Ethernet) 以太网控制器​。提供标准的​​有线网络​​连接能力,通常支持TCP/IP协议栈。 ​高速有线连接​​。用于需要高速、稳定网络通信的设备,如网络摄像头数据采集网关、工业控制器。 为设备赋予联网功能,使其可以​​通过网线接入局域网或互联网​,进行远程数据传输或控制。
​I2C1 ~ I2C4​​ (Inter-Integrated Circuit) ​两线式串行总线​​。用于连接​​短距离、低速​​的外设芯片,如传感器、EEPROM、RTC时钟等。 ​连接片上系统​。引脚占用少,非常适合与板载的各种外围芯片通信。 读取 ​温湿度传感器​ (如SHT3x) 的数据;读写 ​​EEPROM存储器​;配置 ​​音频编解码器​ 芯片。
​LPUART1​​ (Low Power UART) ​低功耗通用异步收发器​。标准的串口,但优化了在低功耗模式下的运行。 ​休眠模式下通信​​。允许设备在深度休眠时仍能通过串口接收数据并被唤醒,极大节省功耗。 连接 ​GPS模块​ 或 ​​无线透传模块​​ (如LoRa),设备大部分时间休眠,仅在收到数据时被唤醒处理。
​QUADSPI​​ (Quad-SPI) ​四线串行外设接口​​。高速接口,用于连接​​外部串行Flash​​或​​串行RAM​​等存储器,数据传输速率远高于标准SPI。 ​扩展内存​​。允许程序在外部Flash中执行(XIP),或存储大量数据(如图片、字体、音频)。 连接 ​​大容量QSPI Flash​​ 芯片,用于存储GUI的图片和字体库,或作为额外存储盘(类似硬盘)。
​SDMMC1, SDMMC2​​ (SD/MultiMediaCard) ​安全数字/多媒体卡接口​​。用于直接连接​​SD卡​​、​​TF卡​​或​​eMMC​​芯片。 ​移动存储​​。提供了一种通用、大容量、可移动的数据存储解决方案。 读写 ​​SD卡​​,用于数据日志记录、存储配置文件、升级固件;在消费电子产品中播放SD卡中的音乐或视频。
​SPI1 ~ SPI6​​ (Serial Peripheral Interface) ​串行外设接口​​。高速全双工同步串行总线,用于连接​​高速外设​​,如显示屏、无线模块、Flash芯片等。 ​高速板级通信​​。通信速率高,是连接各种复杂外设的首选。 驱动 ​​TFT液晶显示屏​ (如ILI9341);与 ​​Wi-Fi/BT模块​​ (如ESP8266) 通信;读写 ​​SPI Flash​​ 芯片。
​UART4/5/7/8, USART1/2/3/6​​ (Universal Asynchronous/Synchronous Receiver-Transmitter) ​通用异步/同步收发器​​。最经典的串行通信协议,硬件流控(USART支持同步模式)。 ​最通用的调试和控制接口​​。用于连接PC、调试日志输出、与各种模块(GPS、蓝牙)通信。 ​USART1​​ 用于 ​​printf打印调试信息​​ 到PC终端;​​UART4​​ 连接 ​​蓝牙串口模块​​ 与手机通信。
​USB_OTG_FS, USB_OTG_HS​​ (USB On-The-Go Full Speed/High Speed) ​通用串行总线​​控制器。支持主机(Host)和设备(Device)模式,可用于连接U盘、鼠标或作为设备被电脑识别。 ​通用PC连接和外设扩展​​。提供了与计算机标准化的高速连接方式。 ​USB_FS​​ 配置为 ​​CDC设备​​(虚拟串口),方便与上位机通信;​​USB_HS​​ 配置为 ​​Host​​,用于读取U盘中的数据。

1.5 Multimedia

“Multimedia” 部分集中了所有与​​图形、图像、音频、视频​​处理相关的专用外设,是打造高性能人机交互(HMI)和多媒体设备的核心。下图清晰地列出了该芯片支持的强大多媒体功能。

多媒体模块 (Multimedia Module) 主要功能与特点 为何重要? 典型应用举例
​DCMI​​ (Digital Camera Interface) ​数字摄像头接口​​。用于直接接收并处理来自并行输出摄像头模块(如OV5640)的图像数据。 机器视觉与图像采集​​。为嵌入式设备添加“眼睛”,实现拍照、扫码、人脸识别等功能。 连接 ​​OV7670摄像头​​,实现实时视频预览或定时抓拍图片,用于安防监控或智能门铃。
​DMA2D​​ (Direct Memory Access 2D) ​二维直接内存访问​​,专为图形设计的DMA。硬件加速图像复制、填充、混合(Alpha混合)、格式转换。 ​图形界面性能核心​​。极大减轻CPU在绘制UI时的负担,实现流畅的图形显示效果。 在LCD上显示图片时,用DMA2D将ARGB8888格式的图片数据快速混合到帧缓冲区,实现半透明、叠加等特效。
​HDMI_CEC​​ (Consumer Electronics Control) ​消费电子控制协议​​。通过HDMI线缆传输控制命令,实现设备间的联动(如用电视遥控器控制机顶盒)。 ​智能家居与影音联动​​。简化用户操作,提升不同HDMI设备间的交互体验。 电视通过CEC命令​​唤醒​​连接的STB(机顶盒);STB关机时通过CEC命令​​一并关闭​​电视。
​I2S1/2/3​​ (Inter-IC Sound) 集成电路内置音频总线​​。标准数字音频接口,用于传输​​单声道或立体声​​PCM音频数据。 ​高质量音频传输​​。连接音频编解码器(Codec)、数字麦克风、音频放大器等,实现录音和放音。 连接 ​​音频Codec芯片​​(如CS42L51),播放SD卡中的MP3解码后的音频数据,或录制来自麦克风的声音。
​JPEG​​ (JPEG Accelerator) ​JPEG编解码加速器​​。硬件单元,专用于快速编码和解码JPEG图片,速度远超软件实现。 ​高效图像处理​。极大节省CPU资源,实现图片的快速显示、存储和传输。 摄像头采集的图像通过​​JPEG编码器​压缩后存入SD卡;从SD卡读取的JPEG图片通过​​JPEG解码器​​解压后由LTDC显示。
​LTDC​​ (LCD-TFT Display Controller) ​液晶显示控制器​​。直接驱动RGB接口的LCD屏幕,自动从内存读取帧数据并输出到屏幕。 ​驱动高性能显示屏​​。是实现复杂GUI界面的硬件基础,可驱动高分辨率、真彩色的屏幕。 驱动 ​​480x272或800x480等分辨率的RGB接口TFT屏​​,显示由GUI软件(如LVGL、TouchGFX)渲染的复杂用户界面。
​SAI1/2/3/4​​ (Serial Audio Interface) ​串行音频接口​​。STM32特有的​​灵活​​音频接口,支持多种音频协议(I2S、AC97、TDM等),可传输多声道(>2)音频。 ​高端与多声道音频​​。比I2S更灵活,适合需要传输4/6/8声道或自定义音频格式的应用。 连接​​多通道数字麦克风阵列​​进行声源定位;与​​高端音频DAC​​连接播放多声道高清音频。
​SPDIFRX1​​ (Sony/Philips Digital Interface Receiver) ​S/PDIF音频接口接收器​。用于接收来自CD机、数字电视、游戏机等设备的​​数字音频信号​​。 ​接收专业数字音源​​。实现与专业音频设备的数字直连,保证音质无损传输。 接收​​电视盒子​​通过光纤或同轴输出的S/PDIF数字音频信号,并将其解码为I2S/SAI格式送给后续处理器。

1.6 Security

“Security” 部分集中了与芯片​​安全、加密、真随机数生成​​相关的硬件外设。这些功能是构建安全物联网设备、防止固件被克隆、保护通信数据机密性的基石。当前支持持RNG:

安全模块 (Security Module) 主要功能与特点 为何重要? 典型应用举例
​RNG​​ (Random Number Generator) ​真随机数发生器​​。基于物理噪声源生成​​高质量的真随机数​​,而非软件算法生成的伪随机数。 ​安全基础​​。加密协议(如密钥生成、盐值、初始化向量)离不开高质量的随机数,否则会存在被破解的风险。 为 ​​TLS/SSL连接​​ 生成随机密钥;为 ​​加密算法​​(如AES)提供安全的初始化向量(IV)。
​HASH​​ (Hash Accelerator) ​哈希算法加速器​​。硬件单元,专用于快速计算数据的​​哈希值​​(如MD5, SHA-1, SHA-256等)。 ​数据完整性验证​​。用于生成数字签名、验证固件或数据的完整性,防止数据被篡改。 对 ​​待升级的固件包​​ 计算SHA-256校验和,与官方提供的摘要对比,确认固件完整无误后再烧录。
​CRYP​​ (Cryptographic Processor) ​加密处理器​​。硬件单元,支持多种​​对称加密算法​​(如AES, DES, TDES)和​非对称加密算法​(如RSA)。 ​高性能加解密​​。硬件实现加解密速度极快,极大减轻CPU负担,保障通信数据的机密性。 对通过 ​​LoRaWAN​​ 或 ​​Wi-Fi​​ 传输的敏感数据,在发送前用AES-256进行硬件加密。
​PKA​​ (Public Key Accelerator) ​公钥加速器​​。专用于加速​​非对称加密​​(如RSA, ECC)中的大数运算(模幂、点乘等)。 ​高效安全连接​​。大幅提升SSL/TLS握手、数字签名等需要公钥运算的速度,使安全连接建立更快。 在设备与云平台建立 ​​MQTTS连接​​ 时,加速其RSA密钥交换或ECC签名验证过程。
​OTP​​ (One-Time Programmable) ​一次性可编程存储器​​。用于存储​​密钥、证书​​等极度敏感的信息,一旦写入即无法更改或读取,提供最高级别的保护。 ​根信任源​​。安全地存储设备的唯一身份标识(如私钥),是构建硬件信任根(Root of Trust)的基础。 将设备的 ​​X.509证书私钥​​ 烧录到OTP区域,确保私钥永远无法被软件读取或导出,实现硬件的唯一身份认证。
​TAMP​​ (Tamper Protection) ​防篡改检测​​。监测指定的引脚电平,一旦发现异常(如外壳被打开),可立即触发安全擦除或中断。 ​物理安全​​。防止攻击者通过物理方式接触设备来窃取敏感信息。 连接一个​微动开关​到TAMP引脚,当设备外壳被非法打开时,触发中断立即​​擦除密钥存储器​​。
​RDP​​ (Read Protection) ​读保护等级​​。通过选项字节(Option Bytes)设置芯片的访问级别,防止通过调试接口(如SWD)读取内部Flash。 ​保护知识产权​​。防止固件被轻易读取、复制和反汇编。 在产品量产时,将RDP等级设置为Level 1,这样调试器就无法直接连接到芯片并导出固件程序。

1.7 Computing

“Computing” 部分提供了用于​​加速特定数学计算和信号处理​​的专用硬件外设。这些模块能够以极高的效率执行特定任务,从而将主CPU内核(Cortex-M7)解放出来处理更复杂的逻辑,极大提升系统性能并降低功耗:

计算模块 (Computing Module) 主要功能与特点 为何重要? 典型应用举例
​CRC​​ (Cyclic Redundancy Check) ​循环冗余校验计算单元​​。用于快速计算数据的CRC校验值,验证数据传输或存储后的​​完整性​​。 ​数据完整性验证​​。硬件CRC计算速度极快,是通信(如CAN, Ethernet)和存储中错误检测的标配。 对 ​​通过CAN总线接收到的数据帧​​ 进行实时CRC校验,确保数据在传输过程中没有出错。
​DFSDM1​​ (Digital Filter for Sigma-Delta Modulators) ​Σ-Δ调制器数字滤波器​。专用于直接连接​​Σ-Δ型ADC​​(通常是MEMS麦克风或高精度ADC芯片),并硬件解调(滤波/抽取)其输出的1-bit位流。 ​高效数字音频/信号采集​​。将复杂的Σ-Δ解调过程由硬件完成,CPU只需读取最终结果,效率极高。 连接 ​​数字MEMS麦克风​​,直接采集并解调其PDM(脉冲密度调制)信号,转换为16-bit PCM音频数据供后续处理或存储。

1.8 Milddleware and Software Packs

这个类别是STM32CubeMX生态系统的​​软件灵魂​​。它与前面的硬件配置(Pinout)相辅相成,用于​​集成和配置​​丰富的软件库、实时操作系统(RTOS)、协议栈和高级算法包。这些组件极大地加速了复杂功能的开发。

以下是核心组件的总结:

软件包类型 (Software Pack) 主要功能描述 为何重要? 典型应用举例
​FREERTOS​ ​一款开源的实时操作系统(RTOS)内核​​。用于管理多个任务(线程)、处理任务间的通信(队列、信号量)、内存和定时器。 ​复杂应用的核心​​。当程序需要同时处理多个循环(如GUI刷新、网络通信、数据采集)时,RTOS是必不可少的,它使程序结构更清晰、响应更及时。 创建三个任务:Task_LED(控制指示灯)、Task_Comm(处理串口数据)、Task_GUI(刷新触摸屏界面),由FreeRTOS内核调度执行。
​LWIP​​ (Lightweight IP) ​轻量级的TCP/IP协议栈​​。使STM32能够实现完整的以太网(ETH)或Wi-Fi通信功能,如TCP、UDPDHCP、DNS、HTTP等。 ​网络连接的基础​​。是设备接入局域网或互联网,实现物联网(IoT)功能的软件核心。 配置LWIP,使设备能够通过ETH接口​​获取DHCP动态IP​​,并作为一个HTTP服务器,允许用户通过浏览器访问设备网页。
​FATFS​ ​一个通用的FAT文件系统模块​​。用于在SD卡、SPI Flash、USB磁盘等存储设备上实现文件的创建、读取、写入和管理。 ​数据存储与管理​​。为设备提供了类似电脑的文件系统功能,便于存储日志、配置文件、音频视频等大量数据。 与 ​​SDMMC​​ 驱动结合,将传感器采集的数据以CSV文件格式​​写入SD卡​​;从SD卡​​读取图片文件​​并通过LTDC显示。
​USB_DEVICE​​ / ​​USB_HOST​ ​USB设备栈​​ 和 ​​USB主机栈​​。提供实现USB通信所需的软件协议层。 ​强大的USB功能​​。无需深入理解复杂的USB协议细节,即可快速开发USB应用。 ​USB_DEVICE​​: 将芯片配置为​​虚拟串口(CDC)​​ 或 ​​U盘(MSC)​​。 ​​USB_HOST​​: 连接并读取​​U盘​​中的文件,或连接​​USB鼠标/键盘​​。
​MBEDTLS​ ​一个开源、轻量级的SSL/TLS加密库​​。提供各种加密算法(如AES, SHA, RSA)和SSL/TLS协议支持,用于保障通信安全。 ​通信安全的核心​​。是实现HTTPS、MQTTS等安全连接,防止数据被窃听或篡改的关键。 与 ​​LWIP​​ 结合,实现​​安全的Web服务器(HTTPS)​​;与 ​​MQTT​​ 客户端结合,实现​​安全的物联网云连接(MQTTS)​​。
​X-CUBE-AI​ ​STM32Cube的人工智能扩展包​​。可将训练好的神经网络模型(如TensorFlow, Keras)转换为优化后的C代码,并部署到STM32上运行。 ​让微控制器拥有AI​​。 enables tinyML,实现本地的语音识别、图像分类、异常检测等AI功能,无需联网。 将一个​​关键词识别(Keyword Spotting)​​ 模型部署到芯片上,使其能本地识别“开灯”、“关灯”等语音指令。
​X-CUBE-TOUCHGFX​​ / ​​STemWin​ ​高级图形用户界面(GUI)软件库​​。提供丰富的控件、动画和图形功能,用于在显示屏上开发炫酷的用户界面。 ​打造专业人机界面(HMI)​​。与硬件图形加速器(LTDC, DMA2D)协同工作,高效开发出吸引人的UI。 开发一个智能家居​​控制面板界面​​,包含按钮、图表、滑动条和动画效果,用于控制灯光、空调并显示状态。
​各种X-CUBE-​​* ​ST提供的垂直应用解决方案包​​。每个包都针对特定应用(如蓝牙、运动传感器、飞行控制、NFC等)提供了完整的软件驱动和示例。 ​快速原型开发​​。大幅减少特定领域功能的开发时间和难度,让你站在巨人的肩膀上。 ​X-CUBE-BLE1​​: 快速开发一个通过​​蓝牙​​传输数据的智能手环原型。 ​​X-CUBE-MEMS1​​: 快速使用板载的​加速度计陀螺仪​等传感器。

1.9 Trace and Debug

这个类别用于配置微控制器的​​调试接口​​和​​性能分析功能​​,是开发者进行代码调试、优化和监控的硬件基础,只有“DEBUG”选项。

1.10 Power and Thermal

这个类别用于配置芯片的​​电源管理、低功耗模式、热保护​​等与能耗和温度相关的关键功能。这对于电池供电设备、高可靠性工业应用至关重要。当前只有核心子模块 ​​PWR​​。

配置子模块 (Sub-module) 主要功能描述 为何重要? 典型配置与应用举例
​PWR​​ (Power) 电源控制器​。配置芯片的​​电源域、功耗模式、唤醒源、电压调节​​等。是所有电源管理的核心。 ​能耗控制的核心​​。决定了芯片如何平衡性能与功耗,是实现长续航电池设备的关键。 配置​调压器模式​​:主模式(高性能)和低功耗模式(LPR)以适应不同运行状态;使能 ​​ULP​​(超低功耗)模式并选择由 ​​WKUP​​ 引脚唤醒。
​LPM​​ (Low Power Modes) ​低功耗模式管理​​(通常集成在PWR中)。具体配置进入​​睡眠(Sleep)、停止(Stop)、待机(Standby)​​ 等模式的条件和行为。 ​实现超低功耗​​。让设备在空闲时进入极低功耗状态,仅在需要时被唤醒,极大延长电池寿命。 在设备空闲时,软件触发进入 ​​Stop 2 模式​​,在此模式下大部分外设和核心时钟关闭,仅保留SRAM内容,由RTC定时每10分钟唤醒一次采集数据。
​VOS​​ (Voltage Scaling) ​电压调节缩放​​(通常集成在PWR中)。动态调整核心电压以匹配运行频率,实现能效优化。 ​动态能效优化​​。在高性能和高能效模式间动态切换,实现“要性能时给性能,要省电时真省电”。 设置 ​​VOS​​ 等级,当系统需要以480MHz全速运行时,使用等级0(较高电压);当降频至80MHz处理轻任务时,自动切换到等级2(较低电压)。
​BOR​​ (Brown-out Reset) ​欠压复位​​。监测电源电压,当电压低于指定阈值时,自动产生系统复位,防止芯片在低压下工作不稳定。 ​系统可靠性​​。防止因电池电量不足或电源干扰导致程序跑飞或数据损坏。 启用 ​​BOR Level 2​​,当检测到供电电压低于2.5V时,强制芯片复位,直到电压恢复稳定。
​PVD​​ (Programmable Voltage Detector) ​可编程电压检测器​。监测电源电压,可在电压低于或高于指定阈值时产生中断,让程序有机会进行紧急处理。 ​预警式电源管理​​。为系统提供预警,以便在完全断电前保存关键数据或安全关机。 配置 ​​PVD​​ 阈值在3.6V,并启用中断。当检测到电池电压降至该阈值时,触发中断,程序立即将当前系统状态​​保存到非易失性存储器(如Flash)​​ 中。
​TEMP​​ / ​​TS​​ (Temperature Sensor) ​内部温度传感器​。监测芯片​​结温​​(Die Temperature)。 ​热管理与过温保护​​。防止芯片因过热而损坏,或用于环境温度检测。 周期性启动内部温度传感器和ADC进行采样。当温度超过85°C时,自动​​降低主频​​或​​关闭非必要外设​​以降温;或通过PWM​​控制风扇转速​​。
​VBAT​ ​后备电池域​​。为​​RTC​​和​​备份寄存器​​提供独立供电,在主电源断开时保持计时和关键数据不丢失。 ​维持关键信息​​。保证实时时钟持续运行,为系统提供“记忆”。 连接一个​纽扣电池​到VBAT引脚。当主电源断开时,RTC时钟和备份寄存器由纽扣电池供电,确保时间信息不丢失,上电后可直接读取。

持续更新中。。。

相关推荐