STM32CubeMX 初学者指南:从零开始配置STM32
引言:揭开嵌入式开发的神秘面纱
在当今高度智能化的世界里,嵌入式系统无处不在,从智能家居设备到工业自动化,从医疗器械到航空航天,它们构成了现代科技的基石。而ARM Cortex-M 系列微控制器,特别是STMicroelectronics(意法半导体)的STM32系列,凭借其高性能、低功耗、丰富的外设以及极高的性价比,成为了嵌入式开发领域的事实标准和广大工程师的首选。
然而,对于初学者而言,直接从STM32微控制器的数据手册和参考手册入手,配置多达上百个寄存器来驱动一个简单的外设,往往是一项令人望而却步的任务。繁琐的初始化过程、复杂的时钟树配置、以及潜在的引脚冲突,都可能成为阻碍学习的“拦路虎”。
幸运的是,STMicroelectronics推出了一款革命性的图形化配置工具——STM32CubeMX。它极大地简化了STM32微控制器的初始化和配置过程,让开发者能够以图形化的方式选择和配置微控制器的各种外设、时钟树、中间件,并自动生成C语言初始化代码。这不仅节省了大量手动配置的时间,降低了出错率,更重要的是,它为初学者打开了一扇通往STM32嵌入式开发世界的便捷之门。
本指南将带领您从零开始,一步步掌握STM32CubeMX的使用,从软件安装到项目创建,从外设配置到代码生成,再到最终的编程与烧录,让您轻松地驾驭STM32微控制器。
第一章:踏上征途前的准备工作
在正式进入STM32CubeMX的奇妙世界之前,我们需要做好一些必要的准备,确保您的开发环境能够顺利搭建。
1.1 硬件准备
- 一块STM32开发板: 对于初学者,强烈推荐使用ST官方的开发板,如Nucleo系列(例如Nucleo-F446RE, Nucleo-L476RG)或Discovery系列。这些板载有ST-Link调试器,无需额外购买调试器,且引脚布局清晰,资料丰富。如果您有自定义的STM32最小系统板,也可以使用,但可能需要额外购买J-Link或ST-Link调试器。
- USB数据线: 用于连接开发板到PC进行供电、通信和调试。
- (可选)杜邦线、面包板、LED、按钮等: 用于连接外部器件进行实验。
- (可选)串口转USB模块: 如果您的开发板没有集成虚拟COM口功能,或者您需要通过独立的串口与PC通信,这会很有用。
1.2 软件准备
- Java Runtime Environment (JRE): STM32CubeMX是基于Java开发的,因此您的PC上需要安装JRE 8或更高版本。如果未安装,请访问Oracle官网下载并安装。
- STM32CubeMX: 这是本文的主角。请访问STMicroelectronics官方网站(www.st.com)下载最新版本的STM32CubeMX。下载后按照提示安装即可。安装过程中,它可能会提示您下载或更新STM32的固件包(Firmware Package),请务必同意并等待其完成,这是CubeMX生成代码所需的基础库。
-
集成开发环境 (IDE): 您需要一个IDE来编写、编译和烧录代码。对于STM32CubeMX生成的项目,有多种选择:
- STM32CubeIDE: ST官方推荐的IDE,基于Eclipse,集成了CubeMX功能,可直接导入CubeMX生成的项目,甚至可以直接在IDE内部启动CubeMX。它包含了GCC编译器和GDB调试器,是目前最方便、功能最全面的选择,强烈推荐给初学者。
- Keil MDK (Microcontroller Development Kit): 广泛使用的商业IDE,尤其在公司和高校中很流行。其标准版本对STM32F0/G0/L0/L1系列有代码大小限制。
- IAR Embedded Workbench: 另一个强大的商业IDE,性能和调试功能出色。
- GCC-based IDEs (如TrueSTUDIO, VS Code + PlatformIO): 开源免费的GCC工具链。STM32CubeIDE本质上就是基于GCC。
本指南将以STM32CubeIDE作为后续代码编写和烧录的示范环境,因为它是最无缝且免费的官方解决方案。 您可以从ST官网下载并安装STM32CubeIDE。
-
ST-Link驱动: 如果您使用的是ST-Link调试器(板载或独立),确保其驱动程序已正确安装。通常,安装STM32CubeIDE或STM32CubeProgrammer时会自动安装这些驱动。
第二章:STM32CubeMX核心概念速览
在深入操作之前,了解STM32CubeMX的几个核心概念,将有助于您更好地理解其工作原理和功能。
2.1 Pinout & Configuration(引脚配置与外设管理)
这是STM32CubeMX最直观的界面。它以图形化的方式展示了微控制器的所有引脚,您可以直观地点击引脚,选择其功能(如GPIO输入/输出、AFN复用功能等),或者在外设列表中勾选需要使用的外设(如USART、SPI、I2C、ADC、定时器等)。CubeMX会自动检查引脚冲突,并在配置不合理时给出警告或建议。
2.2 Clock Configuration(时钟树配置)
时钟是微控制器的心脏,其准确配置对外设的正常工作至关重要。STM32CubeMX提供了一个直观的时钟树界面,您可以选择不同的时钟源(内部RC振荡器HSI、外部晶振HSE、LSI、LSE),配置PLL(锁相环)倍频,以及设置AHB、APB1、APB2等总线的预分频器。CubeMX会实时计算并显示各个总线和外设的时钟频率,确保您的配置符合要求。
2.3 Configuration(中间件与高级设置)
除了核心外设,STM32CubeMX还支持配置各种高级中间件和服务,如:
- FreeRTOS: 一个轻量级的实时操作系统。
- USB Device/Host: USB通信协议栈。
- FATFS: 文件系统(用于SD卡等)。
- LwIP: 轻量级TCP/IP协议栈(用于以太网)。
- Touch Sensing: 触摸按键配置。
这些中间件的加入,进一步提升了CubeMX的实用性和开发效率。
2.4 Project Manager(项目管理与代码生成)
完成所有配置后,您可以通过“Project Manager”选项卡设置项目名称、存储路径、选择目标IDE/工具链(如STM32CubeIDE, MDK-ARM, EWARM等),并最终生成C语言初始化代码。CubeMX生成的代码基于ST的HAL(Hardware Abstraction Layer)库,这是一个抽象层,屏蔽了底层寄存器的细节,使得代码更易于阅读和移植。
2.5 HAL库(硬件抽象层)
HAL库是STMicroelectronics提供的一套API,用于操作STM32微控制器的各种外设。它提供了统一的接口,无论您使用的是哪个STM32系列,只要是相同的外设,其HAL API调用方式基本一致。例如,无论F4系列还是L4系列,初始化GPIO的函数都是HAL_GPIO_Init(),发送UART数据的函数是HAL_UART_Transmit()。这大大提高了代码的可移植性和开发效率。
第三章:实践操作:从零开始配置STM32
现在,让我们亲自动手,一步步配置一个简单的STM32项目。我们将以Nucleo-F446RE开发板为例,实现一个经典的“LED闪烁”功能,并在此基础上添加一个简单的“串口发送”功能。
3.1 启动STM32CubeMX并新建项目
- 启动STM32CubeMX: 双击桌面图标或从开始菜单打开STM32CubeMX。
- 新建项目:
- 在欢迎界面选择 “Access to MCU Selector”(访问MCU选择器)或 “Access to Board Selector”(访问板卡选择器)。对于初学者,推荐使用“Board Selector”,因为它可以直接选择开发板,CubeMX会自动预配置板载的一些外设。
- 在“Board Selector”选项卡中,您可以在搜索框输入您的开发板型号,例如“Nucleo-F446RE”。
- 选中板卡后,点击 “Start Project”。
- CubeMX会询问是否初始化所有外设到默认模式。选择 “Yes”,这样可以确保板载LED、按钮等常用功能被预配置。
3.2 理解并配置时钟树(Clock Configuration)
时钟配置是STM32项目的第一步,也是最关键的一步。
- 进入时钟配置界面: 在STM32CubeMX主界面左侧的“Categories”面板中,点击 “Clock Configuration”。
- 选择外部晶振 (HSE):
- 在“System Clock Mux”下拉菜单中,选择 “HSE” (High-Speed External Clock)。外部晶振通常比内部RC振荡器(HSI)更稳定、更精确。Nucleo-F446RE板载8MHz HSE。
- 此时,您会看到PLL(锁相环)部分的配置变为可用。
- 配置PLL倍频与分频:
- 我们将配置主PLL(PLL Source Multiplexer 选择 HSE,PLLM, PLLN, PLLP 等参数)。目标是将系统时钟(HCLK)设置为微控制器允许的最大频率,对于STM32F446RE,这个最大频率是 180 MHz。
- 根据HSE输入频率(8 MHz),我们需要计算合适的PLL参数。一个常见的配置如下:
- PLL Source Mux: HSE
- PLLM: 8 (将8MHz分频到1MHz)
- PLLN: 360 (将1MHz倍频到360MHz)
- PLLP: 2 (将360MHz分频到180MHz)
- 在界面中输入这些值后,CubeMX会自动计算并显示最终的HCLK频率为180 MHz。
- 同时,CubeMX还会自动设置AHB(HCLK)、APB1(PCLK1)、APB2(PCLK2)总线的预分频器,以确保它们运行在允许的最大频率范围内(通常AHB/1,APB1/4,APB2/2)。
- 确认所有时钟频率都显示为绿色,表示配置成功且在允许范围内。
3.3 配置GPIO外设:点亮板载LED
现在,让我们来配置最简单的外设——GPIO,实现板载LED的闪烁。Nucleo-F446RE的板载LED连接在GPIO引脚 PA5。
- 进入引脚配置界面: 点击左侧的 “Pinout & Configuration”。
- 找到PA5引脚: 在芯片视图上找到PA5引脚,或者在左侧的“System Core -> GPIO”下找到PA5。
- 配置PA5为输出:
- 点击PA5引脚,或者右键点击并选择 “GPIO_Output”。
- 此时,PA5引脚会变成绿色,并显示“GPIO_Output”标签。
- 配置GPIO参数:
- 在左侧的“Categories”面板中,展开 “System Core” -> “GPIO”。
- 在右侧的“GPIO Mode and Configuration”面板中,找到PA5对应的行。
- User Label: 为了代码的可读性,可以给它起一个有意义的名字,例如 “LED_GREEN”。
- GPIO output level: 默认是Low。
- Mode: GPIO_Output。
- Pull-up/Pull-down: No Pull-up and No Pull-down (LED通常不需要)。
- Maximum output speed: Very High (对于LED闪烁,High或Medium也足够)。
3.4 配置USART外设:实现串口通信
接下来,我们将配置一个USART(通用同步异步收发器)外设,用于通过串口发送数据。Nucleo-F446RE的USART2连接到板载ST-Link的虚拟COM口,方便调试。USART2的TX引脚是 PA2,RX引脚是 PA3。
- 找到USART2外设: 在“Pinout & Configuration”界面中,找到USART2外设。
- 启用USART2:
- 在左侧的“Categories”面板中,展开 “Connectivity” -> “USART2”。
- 在右侧的“Mode”选项卡中,将“Mode”设置为 “Asynchronous”。
- 此时,PA2和PA3引脚会自动被配置为USART2_TX和USART2_RX。
- 配置USART2参数:
- 在“Configuration”选项卡中,选择 “Parameter Settings”。
- Baud Rate (波特率): 常用值如 115200 Bits/s。
- Word Length (字长): 8 Bits。
- Parity (奇偶校验): None。
- Stop Bits (停止位): 1。
- Data Direction (数据方向): Receive and Transmit。
- 其他参数保持默认即可。
- 启用USART2中断(可选但推荐):
- 在“Configuration”选项卡中,选择 “NVIC Settings”。
- 勾选 “USART2 global interrupt”,这将允许USART2通过中断处理接收到的数据或发送完成事件。对于简单的发送,这不是必需的,但对于接收数据非常有用。
3.5 项目设置与代码生成
完成所有硬件外设的配置后,我们就可以生成项目代码了。
- 进入项目管理器: 点击左侧的 “Project Manager”。
- 设置项目信息:
- Project Name (项目名称): 例如 “MyFirstSTM32Project”。
- Project Location (项目路径): 选择一个合适的文件夹,例如
D:\STM32Projects。 - Toolchain / IDE (工具链/IDE): 选择 “STM32CubeIDE”。
- Firmware Package Name and Version (固件包名称和版本): 保持默认最新版本即可。
- 代码生成选项(关键!):
- 在“Code Generator”部分,确保以下选项被勾选:
- “Generate peripheral initialization as a pair of ‘.c/.h’ files per peripheral”: 这会将每个外设的初始化代码生成到单独的
.c和.h文件中,使项目结构更清晰。 - “Keep user code when re-generating”: 这个选项至关重要! 如果您后续需要修改CubeMX的配置并重新生成代码,勾选此项可以保留您在
/* USER CODE BEGIN ... */和/* USER CODE END ... */之间编写的自定义代码,避免被覆盖。
- “Generate peripheral initialization as a pair of ‘.c/.h’ files per peripheral”: 这会将每个外设的初始化代码生成到单独的
- 在“Code Generator”部分,确保以下选项被勾选:
- 生成代码: 点击右上角的 “GENERATE CODE” 按钮。
- CubeMX会提示您是否打开项目。选择 “Open Project”。如果您选择了STM32CubeIDE,它将自动启动并导入您生成的项目。
第四章:在STM32CubeIDE中编写与烧录代码
现在,我们已经通过STM32CubeMX生成了项目骨架。接下来,我们将在STM32CubeIDE中编写实际的应用程序代码,并将其烧录到STM32开发板上。
4.1 导入并理解生成的项目结构
- 打开STM32CubeIDE: 如果之前没有自动打开,请手动启动STM32CubeIDE,并通过“File -> Open Projects from File System…”或“File -> Import -> General -> Existing Projects into Workspace”导入您刚刚生成的项目。
-
项目文件结构: 成功导入后,在“Project Explorer”中,您会看到如下主要的文件夹和文件:
- Core: 包含微控制器的核心启动代码、中断处理函数以及最重要的
main.c文件。 - Drivers: 包含HAL库文件(STM32F4xx_HAL_Driver)以及您配置的外设驱动文件(如
gpio.c/.h,usart.c/.h)。 - Debug / Release: 编译生成的二进制文件和调试信息。
main.c: 这是您主要编写应用程序代码的地方。stm32f4xx_it.c: 中断服务函数定义。system_stm32f4xx.c: 系统时钟初始化相关。
- Core: 包含微控制器的核心启动代码、中断处理函数以及最重要的
-
main.c文件分析:- 打开
Core/Src/main.c文件。您会看到以下几个重要部分:main()函数:程序的入口点。HAL_Init():HAL库的初始化函数。SystemClock_Config():CubeMX生成的时钟配置函数。MX_GPIO_Init():CubeMX生成的GPIO初始化函数。MX_USART2_UART_Init():CubeMX生成的USART2初始化函数。while(1)循环:程序的无线循环,您的主要应用程序逻辑将在这里运行。/* USER CODE BEGIN ... */和/* USER CODE END ... */代码块: 这是您唯一可以安全地编写自定义代码的地方。CubeMX在重新生成代码时会保留这些块中的内容。切勿修改这些块之外的CubeMX自动生成代码,否则下次重新生成时可能会被覆盖。
- 打开
4.2 编写LED闪烁代码
- 在
main.c中找到while(1)循环。 -
添加LED控制代码: 在
while(1)循环内部,添加如下代码:“`c
/ USER CODE BEGIN WHILE /
while (1)
{
/ USER CODE END WHILE //* USER CODE BEGIN 3 */ HAL_GPIO_TogglePin(LED_GREEN_GPIO_Port, LED_GREEN_Pin); // 切换LED_GREEN引脚电平 HAL_Delay(500); // 延时500毫秒}
/ USER CODE END 3 /
``LED_GREEN_GPIO_Port
*和LED_GREEN_Pin是CubeMX根据您在GPIO配置时为PA5引脚设置的“User Label”自动生成的宏定义,它们分别代表了LED所在的GPIO端口和引脚。HAL_GPIO_TogglePin()
*是HAL库提供的函数,用于切换指定GPIO引脚的电平状态。HAL_Delay()` 是HAL库提供的延时函数,参数为毫秒。
*
4.3 编写串口发送代码
我们将在LED闪烁的同时,通过串口每隔一段时间发送一条消息。
- 在
main.c中找到while(1)循环。 -
在LED控制代码之后添加串口发送代码:
“`c
/ USER CODE BEGIN WHILE /
while (1)
{
/ USER CODE END WHILE //* USER CODE BEGIN 3 */ HAL_GPIO_TogglePin(LED_GREEN_GPIO_Port, LED_GREEN_Pin); // 切换LED_GREEN引脚电平 char *msg = "Hello STM32CubeMX! LED is blinking.\r\n"; HAL_UART_Transmit(&huart2, (uint8_t*)msg, strlen(msg), HAL_MAX_DELAY); // 通过USART2发送字符串 HAL_Delay(500); // 延时500毫秒}
/ USER CODE END 3 /
``huart2
*是CubeMX为USART2自动生成的UART句柄,它包含了USART2的所有配置信息。HAL_UART_Transmit()
*是HAL库提供的串口发送函数:uint8_t
* 第一个参数是UART句柄的地址。
* 第二个参数是要发送数据的指针(类型)。HAL_MAX_DELAY
* 第三个参数是要发送的数据长度。
* 第四个参数是超时时间(表示无限等待直到发送完成)。strlen(msg)
*函数需要string.h头文件。在main.c文件的顶部,/ USER CODE BEGIN Includes /和/ USER CODE END Includes */之间添加#include`。
4.4 编译项目
- 连接开发板: 通过USB数据线将您的Nucleo-F446RE开发板连接到PC。
- 构建项目: 在STM32CubeIDE中,点击工具栏上的“锤子”图标(Build Project),或者选择“Project -> Build Project”。
- 检查编译结果: 观察“Console”窗口。如果编译成功,您会看到“Build Finished”字样,并显示RAM和Flash的使用情况。如果出现错误,请检查代码拼写和语法。
4.5 烧录(Flash)代码并运行
- 启动调试会话: 点击工具栏上的“虫子”图标(Debug ‘MyFirstSTM32Project Debug’),或者选择“Run -> Debug”。
- 首次启动调试时,STM32CubeIDE可能会提示您配置调试器。通常情况下,保持默认设置(ST-Link GDB Server)即可。
- 点击“OK”或“Switch”,IDE会将代码烧录到开发板,并进入调试模式。
- 运行程序: 进入调试模式后,点击工具栏上的“绿色播放”图标(Resume),程序就会开始在微控制器上运行。
- 观察结果:
- 您应该会看到开发板上的板载LED(通常是绿色)开始以大约每秒一次的频率闪烁。
- 打开一个串口调试助手(如Tera Term, PuTTY, SSCOM等),选择您的ST-Link虚拟COM口(在设备管理器中查看,通常是COMx),设置波特率为 115200,8位数据,无奇偶校验,1位停止位。您会看到每隔0.5秒接收到“Hello STM32CubeMX! LED is blinking.”这条消息。
第五章:进阶提示与最佳实践
恭喜您,已经成功完成了第一个STM32CubeMX项目!但这仅仅是开始。以下是一些进阶提示和最佳实践,帮助您走得更远。
5.1 充分利用USER CODE BEGIN/END块
再次强调,永远只在/* USER CODE BEGIN ... */ 和 /* USER CODE END ... */ 之间编写您的自定义代码。这是CubeMX项目结构的核心。如果您需要重新配置CubeMX并生成新代码,这些区域的内容将得到保留。
5.2 深入理解HAL库
HAL库虽然简化了开发,但其内部机制和API函数众多。建议查阅ST官方的HAL库用户手册和示例代码,了解各种外设的初始化、数据传输、中断处理等详细用法。例如,了解如何使用中断(Interrupt)或DMA(Direct Memory Access)进行数据传输,而不是简单的轮询(Polling),可以显著提高系统效率。
5.3 查阅数据手册与参考手册
尽管CubeMX和HAL库极大地简化了开发,但要深入理解微控制器的工作原理和解决复杂问题,阅读微控制器的数据手册(Datasheet)和参考手册(Reference Manual)仍然是必不可少的。 数据手册提供了引脚定义、电气特性和最高频率等概览信息;参考手册则详细描述了微控制器内部所有外设的寄存器、工作模式和操作方法。
5.4 调试技巧
- 断点 (Breakpoints): 在代码行左侧双击,可以设置断点。程序执行到断点处会暂停,您可以查看变量值、寄存器状态。
- 单步执行 (Step Over/Into/Return): 在断点处,可以单步执行代码,逐行观察程序流程。
- 观察表达式 (Expressions/Watches): 在调试界面中添加变量或表达式,可以实时查看它们的值。
- 寄存器视图 (Registers): 观察微控制器的各种寄存器状态,这对于理解底层硬件非常有用。
- 实时表达式 (Live Expressions): STM32CubeIDE提供,可以在程序运行时实时更新变量值,无需暂停程序。
- SWV (Serial Wire Viewer): 对于支持的STM32芯片和ST-Link V2/V3调试器,SWV可以提供printf重定向、事件跟踪、数据观察等高级调试功能。
5.5 版本控制
对于任何软件项目,使用版本控制系统(如Git)都是最佳实践。它可以帮助您跟踪代码变更,轻松回溯历史版本,并与团队成员协作。将CubeMX生成的项目纳入Git管理,并注意将IDE生成的中间文件(如Debug/Release文件夹)添加到.gitignore中。
5.6 功耗优化
对于电池供电的应用,功耗是一个关键因素。STM32微控制器提供了多种低功耗模式。CubeMX也支持配置这些模式,但实际的功耗优化还需要在代码层面进行精细管理,例如关闭不使用的外设、降低时钟频率、进入低功耗模式等。
5.7 学习资源
- STMicroelectronics官网: 提供了大量文档、应用笔记、视频教程和社区论坛。
- GitHub: 搜索“STM32 examples”可以找到很多开源项目。
- 在线课程/博客: 许多技术社区和个人博客分享了STM32的开发经验。
第六章:常见问题与故障排除
在STM32的学习和开发过程中,您可能会遇到一些常见问题。
-
1. 编译错误 (Build Errors):
- 问题: 代码无法编译,报错信息可能是语法错误、未定义函数或变量。
- 排查:
- 仔细检查报错信息,定位到具体的代码行。
- 检查是否在
USER CODE BEGIN/END块外修改了CubeMX生成的代码。 - 检查是否包含了必要的头文件(例如
#include <string.h>)。 - 检查变量和函数名拼写是否正确。
-
2. 烧录失败 (Flashing Failed):
- 问题: 无法将代码烧录到开发板。
- 排查:
- 确认开发板已正确连接到PC,并且USB数据线工作正常。
- 检查ST-Link驱动是否正确安装。在设备管理器中查看“通用串行总线设备”或“通用串行总线控制器”下是否有“ST-Link Debug”或类似设备。
- 确保在STM32CubeIDE的调试配置中,选择了正确的调试器(ST-Link)。
- 尝试重启STM32CubeIDE和PC。
- 尝试使用STM32CubeProgrammer工具单独连接和擦除芯片,看是否能正常连接。
-
3. LED不闪烁/串口无输出 (No LED/UART Output):
- 问题: 代码烧录成功,但预期功能(如LED闪烁、串口输出)未实现。
- 排查:
- 时钟配置: 这是最常见的问题。检查CubeMX中时钟配置是否正确,尤其PLL输出频率是否达到预期。如果时钟不工作,整个芯片都不会动。
- 引脚配置: 检查CubeMX中GPIO是否配置为正确的模式(输出),引脚是否冲突。
- 代码逻辑: 检查
while(1)循环内的代码逻辑是否正确,HAL_Delay()是否被调用。 - 外设初始化: 确认
MX_GPIO_Init()、MX_USART2_UART_Init()等初始化函数在main()函数中被调用。 - 串口助手配置: 对于串口通信,确保串口调试助手的波特率、数据位、停止位、奇偶校验等参数与CubeMX配置一致,并选择了正确的COM口。
- 硬件连接: 如果是自定义板,检查LED、串口等外设的硬件连接是否正确。
-
4. CubeMX无法启动或固件包下载失败:
- 问题: STM32CubeMX打不开,或下载固件包时出错。
- 排查:
- JRE: 检查是否安装了Java Runtime Environment (JRE),并且版本符合要求。
- 网络连接: 固件包下载需要良好的网络连接。
- 管理员权限: 尝试以管理员身份运行CubeMX。
总结:开启您的STM32之旅
STM32CubeMX无疑是STM32嵌入式开发的一大利器。它以图形化的方式,将复杂的底层配置抽象化,让开发者能够专注于应用程序的逻辑实现,极大地降低了STM32的入门门槛和开发难度。
通过本指南,您已经学习了如何:
1. 准备开发环境。
2. 使用STM32CubeMX创建新项目。
3. 配置时钟树、GPIO、USART等常用外设。
4. 生成并理解项目代码。
5. 在STM32CubeIDE中编写、编译和烧录简单的应用程序。
这只是您STM32嵌入式开发之旅的起点。随着您的深入学习,您会发现STM32拥有无限可能。勇敢地探索吧,尝试配置更多复杂的外设,集成FreeRTOS,实现USB通信,或者连接各类传感器和执行器。实践是最好的老师,祝您在嵌入式开发的道路上越走越远,创造出更多精彩的项目!