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个USART2个SPI2个I2C1个USB1个CAN总线,方便连接各类模块。
  • 内置2个12位ADC,可用于采集传感器数据。
  • 多个定时器,支持PWM输出,非常适合控制电机、舵机等。

USB转串口模块:用于串口通信和打印调试信息(很多核心板的USB口仅供电)需要模块和 CH340/CH341驱动

STM32F411RET6

TODO

其他有意思的型号

  • STM32C0
    • 入门级、性价比之王。主打“32位性能,8位成本”
    • 提供8到64引脚的多种封装8引脚是其最小封装(STM32C011F4U6TR),非常适合引脚要求少的应用。

开发环境

  • 安装 STM32CubeMX
    • 安装 MCU 固件包
      • 包括: 文档, 驱动, 中间件, 参考例程
  • 安装 MDK-ARM (Keil MDK)
  • 安装 ST-Link 驱动
    • 搜索 STSW-LINK007
    • 也可以在 MDK-ARM 安装目录找到: Keil_v5\ARM\STLink\USBDriver
  • 安装 串口调试软件
    • SSCOM
    • XCOM
    • SecureCRT

环境设置

  • 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 -> Settings
      • Pack: 取消勾选 “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对新手更友好。