STM32 基础
版权声明:署名-非商业性使用-相同方式共享
@@ Tags: STM32
@@ Date: 2026-01-24 2250
@@ Note: ~
简介
STM32 是意法半导体(STMicroelectronics)公司基于 ARM Cortex-M 内核开发的32位高性能微控制器系列。它是全球最受欢迎、生态最丰富的MCU家族之一。
STM32 微控制器分为多个系列,这些系列都基于相同的32 位ARM处理器内核:Cortex-M0、M0+、M3、M4 M7、M33、M55 或 M85。每个微控制器的内部结构都包含一个或多个 ARM 处理器内核、闪存、静态RAM、调试接口以及各种外设。
- 2006年10月 ST 获得了ARM Cortex-M3内核的授权。
- 2007年06月 ST 在北京发布了基于 ARM Cortex-M3 的 STM32 F1 系列芯片。
- 2026年01月 STM32 自2007年发布以来,出货量超过了 150 亿颗。
部分芯片介绍
TODO 命名
STM32F103C8T6
- 采用 ARM Cortex-M3 内核,主频72MHz,拥有 64KB Flash(存储程序)和 20KB RAM(运行时内存),性能足以应对多数中小型嵌入式项目。
- 多达 37个可用GPIO,集成3个USART、2个SPI、2个I2C、1个USB和1个CAN总线,方便连接各类模块。
- 内置2个12位ADC,可用于采集传感器数据。
- 多个定时器,支持PWM输出,非常适合控制电机、舵机等。
USB转串口模块:用于串口通信和打印调试信息(很多核心板的USB口仅供电)需要模块和 CH340/CH341驱动。
STM32F411RET6
TODO
其他有意思的型号
- STM32C0
- 入门级、性价比之王。主打“32位性能,8位成本”
- 提供8到64引脚的多种封装8引脚是其最小封装(
STM32C011F4U6TR),非常适合引脚要求少的应用。
开发环境
- 安装
STM32CubeMX- 安装 MCU 固件包
- 包括: 文档, 驱动, 中间件, 参考例程
- 安装 MCU 固件包
- 安装
MDK-ARM(Keil MDK) - 安装
ST-Link驱动- 搜索
STSW-LINK007 - 也可以在
MDK-ARM安装目录找到:Keil_v5\ARM\STLink\USBDriver
- 搜索
- 安装 串口调试软件
SSCOMXCOMSecureCRT
环境设置
STM32CubeMX- 选择芯片:
STM32F103C8T6 - 开启调试:
System Core->sys->Serial Wire - 时钟来源:
System Core->rcc->Crystal/Ceramic Resonato - 选择时钟:
HSI->PLLCLK->72MHz - 设置引脚
- 生成代码
- 选择芯片:
MDK-ARM- 打开工程
- 编辑设置:
Edit->Configuration->Encoding: 设置为 Encode in UTF-8 without signature - 调试设置:
Debug->Debugger->ST-Link - 串口支持:
Options for Target->Target->勾选上 “Use MicroLIB” - 自动运行:
Options for Target->Utilities->SettingsPack: 取消勾选 “Enable”Flash Download: 勾选上 “Reset and Run”
- 代码优化:
Options for Target->C/C++ (AC6)->Optimization:-O0表示不优化, 用于调试-O2默认优化
辅助代码标记
在 STM32CubeIDE/STM32CubeMX 生成的工程中,/* USER CODE BEGIN xxx */ 和 /* USER CODE END xxx */ 这些注释标记定义了用户代码的安全区域。
当你使用 STM32CubeMX 重新生成代码时:
- 标记内的用户代码会被保留
- 标记外的代码可能会被覆盖
下面是常用标记的说明:
/* USER CODE BEGIN Includes */ // Private includes (包含自定义头文件)
/* USER CODE END Includes */
/* USER CODE BEGIN PV */ // Private variables (私有变量声明)
/* USER CODE END PV */
/* USER CODE BEGIN PFP */ // Private function prototypes (私有函数原型声明)
/* USER CODE END PFP */
/* USER CODE BEGIN ET */ // External Types(外部类型定义)
/* USER CODE END ET */
/* USER CODE BEGIN EM */ // Error Macros(错误宏定义)
/* USER CODE END EM */
/* USER CODE BEGIN PTD */ // Private typedef (私有类型定义)
/* USER CODE END PTD */
/* USER CODE BEGIN PD */ // Private define (不带参数的宏定义)
/* USER CODE END PD */
/* USER CODE BEGIN PM */ // Private macro (带参数的宏定义)
/* USER CODE END PM */
时钟配置
-
内部时钟 LSI HSI
- STM32 MCU 内部自带RC振荡电路,其内部时钟就是RC振荡器产生的。
- 但是RC振荡器精度远低于晶振,且容易受到温度的影响。
-
外部时钟 LSE HSE
- 一般有两种接法:
- 外部接有源晶振 或其 他直接时钟输入源:
BYPASS Clock Source模式(旁路时钟源) - 外部接无源晶振:
Crystal/Ceramic Resonator模式(晶体/陶瓷晶振)
VS Code 开发环境
术语
DMA
直接存储器访问方式(DMA), 是在处理器内部建立片内外设和内存之间的数据传输通道,传输过程不需
要处理器参与。
DMA方式由硬件实现,特别适合于批量数据传输的场合。
调试/下载器
用于烧录和调试代码。一般是 ST-Link V2,比DAP-Link对新手更友好。
Comments ()