1+1=10

记记笔记,放松一下...

STM32小记

需要补充一点单片机开发的知识,从STM32开始吧...

STM32是意法半导体(STMicroelectronics)推出的一系列32位ARM Cortex-M微控制器产品线。

这些微控制器采用了ARM Cortex-M内核,并具有丰富的外设和功能,可用于各种应用领域,包括工业控制、汽车电子、医疗设备、消费电子等。

STM32

STM32 引脚

stm32-pinout-diagram

图片来源:https://www.wellpcb.com/STM32-pinout.html

STM32系列微控制器产品线包括多个系列和型号,以满足不同应用和需求。这些系列包括:

  • STM32F系列:主流系列
  • STM32L系列:超低功耗系列
  • STM32H系列:高性能系列
  • STM32G系列:通用系列
  • STM32W系列
  • ...

arm-cortex-mcu-portfolio

图片来源:https://www.st.com/en/microcontrollers-microprocessors/stm32-32-bit-arm-cortex-mcus.html

命名格式

1
STM32<Family><Line><Memory><Package><Temp><Option>
  • Family:表示 MCU 所属的系列。
  • Line:表示具体的产品线或子系列。
  • Memory:表示闪存和 RAM 容量。
  • Package:表示封装类型。
  • Temp:表示工作温度范围。
  • Option:表示其他可选特性。

以 STM32F103C8T6 为例,解析如下:

STM32:表示这是一个 STM32 系列的微控制器。

  • F:表示家族,F 代表 Cortex-M3 内核的主流系列。
  • 103:表示具体的产品线,103 是 STM32F1 系列中的一条线,通常表示基本的特性和性能。
  • C8:表示存储容量和某些特性:
    • C 表示 48 引脚封装。
    • 8 表示 64KB 闪存和 20KB RAM。
  • T:表示封装类型,T 代表 LQFP 封装。
  • 6:表示工作温度范围,6 代表 -40°C 至 +85°C。

ARM 是什么?

ARM是 Advanced RISC Machine的缩写,是指一家名为ARM的公司,也指该公司设计的处理器内核ARM。

  • ARM公司是全球领先的半导体知识产权(IP)提供商,只设计内核不生产实物
  • ARM公司设计ARM内核,其他半导体厂商完善内核周边电路并生产芯片,意法半导体的STM32。

ARM传统上采用数字命名:

  • ARM7
  • ARM9
  • ARM11

后来出了新的CORTEX家族,其又可以分为分为三个系列:

  • CORTEX Ax:高端应用领域,性能最高
  • CORTEX Rx:实时性高的产品
  • CORTEX Mx:嵌入式,单片机

ArmRoadMap

图片来源:https://emcu.it/CortexFamily/CortexFamily.html

集成开发环境

STM32CubeIDE是意法半导体提供的免费IDE,2019年发布。Keil 历史比较久远,支持ARM的芯片更广泛。

20240531更新链接:

STM32CubeIDE

STM32CubeIDE 是一个全面的开发环境,集成了代码编写、编译、调试和程序烧写功能。它基于开源的 Eclipse IDE、CDT(C/C++ Development Tooling)和 GDB(GNU Debugger)构建,并集成了ST专有的HAL(硬件抽象层)库和LL(低层)驱动器。 包括 STM32CubeMX,用于配置微控制器的各种硬件特性如时钟、中断、外设等,并自动生成初始化代码。

除了CubeIDE,还经常看到另外三个名字。在典型的开发流程中,

  • STM32CubeMX 用于生成初始化代码和配置项目,然后在
  • STM32CubeIDE 中编辑、编译和调试这些代码
  • STM32CubeProgrammer 用于将编译好的程序烧写到微控制器上
  • STM32CubeMonitor 可用于进一步的运行时分析和性能调优。

列个表格:

工具 主要功能 用途说明
STM32CubeMX - 图形化的微控制器配置工具
- 生成初始化代码
- 配置微控制器外设和功能
- 为 IDE 设置项目基础
STM32CubeProgrammer - 微控制器的编程和固件升级工具
- 支持多种编程接口
- 上传编译后的程序到微控制器
- 执行固件升级和备份操作
STM32CubeMonitor - 实时数据监控和可视化工具 - 监控和分析微控制器应用程序的运行时数据
STM32CubeIDE - 集成开发环境
- 包含代码编辑、编译、调试功能
- 集成 STM32CubeMX 和 STM32CubeProgrammer
- 开发、编译、调试 STM32 应用程序

Keil MDK-ARM

注:它的编译器之前是armcc,2014年起逐步变更为armclang编译器(二者共存),2020年已不再包含armcc,它们是ARM 公司提供的专门针对 ARM 处理器的编译器。

Keil MDK-ARM 是一个强大的微控制器开发环境,专为 ARM Cortex-M 微处理器设计。它提供了包括 µVision IDE、编译器、调试器和必要的中间件组件。具有高级的代码编辑功能、项目管理工具和强大的调试功能。它也支持 RTOS(实时操作系统)和提供了广泛的中间件库。

  • 1982年,Keil Elektronic GmbH在德国成立,专注于8051微处理器的开发工具。
  • 1990年代末,随着ARM架构兴起,Keil开始开发面向ARM的编译器和调试工具。
  • 2005年,ARM公司收购了Keil。
  • Keil MDK-ARM:随着 ARM 微控制器的普及,Keil 发布了 Microcontroller Development Kit (MDK),专为 ARM Cortex-M 和 Cortex-R 系列设计。
  • 2014年:Keil MDK-ARM 版本5发布,引入了许多新功能和改进,包括对 ARM Cortex-M 内核的全面支持,以及全新的软件包管理功能。

注意:Keil 有4套东西

  • Keil MDK:Keil for ARM,Keil MDK-ARM,用于ARM微处理器
  • Keil PK51:Keil C51, 用于 8051微处理器
  • Keil PK166:Keil C166,用于 XC16x, C16x, ST10微处理器
  • Keil DK251:Keil C251,用于 C251微处理器

不用于商业开发的话,Keil MDK社区版本 可以免费使用。

IAR Embedded Workbench

IAR Embedded Workbench 是一个集成开发环境和工具链,支持包括 STM32 在内的多种 ARM Cortex-M 微控制器。它以其编译器优化技术和高效的代码生成而闻名。提供了高级的代码优化功能,包括对代码大小和执行速度的优化,以及全面的调试工具。

IAR Embedded Workbench 使用的编译器通常被称为 IAR C/C++ Compiler。这个编译器是 IAR Systems 提供的,专门为嵌入式系统的开发设计。IAR C/C++ Compiler 针对多种微处理器架构提供优化,支持包括 ARM、AVR、MSP430、RX、RISC-V、8051 等多种流行的微控制器。

JTAG 与 SWD

  • JTAG (Joint Test Action Group)
  • SWD (Serial Wire Debug)

这是两种常用的调试和编程接口,用于微控制器和其他集成电路的开发。

JTAG 和 SWD 的主要特性和区别:

特性 JTAG SWD
引脚数量 通常需要 4 个或更多引脚 只需要 2 个引脚
引脚功能 - TCK (时钟)
- TMS (模式选择)
- TDI (数据输入)
- TDO (数据输出)
- (可选) TRST (复位)
- SWCLK (时钟)
- SWDIO (数据输入/输出)
协议复杂性 较复杂,因为提供了链式连接多个设备的能力 较简单,专注于单一设备的调试和编程
通用性 支持多种设备,不限于 ARM 架构 主要用于 ARM 架构的设备
调试能力 支持复杂的调试功能,如边界扫描等 专注于核心的调试功能,如断点和观察点
速度 通常较慢,受限于链路中的最慢设备 通常较快,因为只连接单个设备
硬件成本 较高,因为需要多个引脚和复杂的接口 较低,因为接口简单,引脚数少
易用性 配置较为复杂,尤其在多设备系统中 配置简单,易于实现和使用

如何用?

如果使用ST官方的板子(Nucleo或Discovery),不需要额外的调试器,因为板子上自带了ST-LINK的调试器。直接用USB连接到PC主机即可。

中国大陆的开发的板子,通过不包含ST-LINK。需要使用外置的调试器来烧写或调试。

ST官方 ST-LINK/V2的接口如下,它包含一个20针接头(板子上需要这么留接口):

Typical ARM JTAG SWD Header

但是,中国克隆的ST-LINK/V2接口可能只使用10针接头:

ST-LINK Clone Header

图片来源:https://stm32-base.org/guides/connecting-your-debugger.html

不管几针,都是要接到STM32的对应的引脚上。

st-link-v2

与烧写器对应的上位机软件:STM32 ST-LINK Utility。Keil MDK-ARM 也使用 ST-LINK Utility 对 STM32进行烧写。

STM32CubeProgrammer

STM32CubeProgrammer 是一个独立的软件工具,它不依赖于 ST-LINK Utility 来执行其功能。对比:

  • ST-LINK Utility 是一个更简单、更专注的工具,主要用于通过 ST-LINK 调试器进行设备的编程和基本调试。
  • STM32CubeProgrammer 提供了更广泛的功能,不仅支持 ST-LINK,还支持其他调试适配器和通信协议,同时集成了更多高级功能,例如安全编程和更复杂的内存操作。

ST-Link 功能有限,但是便宜!J-Link功能强

特性 ST-Link J-Link
厂商 STMicroelectronics SEGGER
兼容性 主要针对 STM32 系列 支持多种架构,如 ARM Cortex-M/A/R, RX, PPC, MIPS
接口 主要是 SWD JTAG, SWD, Fine, cJTAG, SPI 等
功能 基本功能:下载、调试、单步执行等 包括高级功能:实时终端、系统查看器、无限断点等
价格 较低 较高
软件支持 STM32CubeIDE, Keil, IAR, Eclipse Ozone Debugger, J-Flash, 多数第三方IDE
适用场景 STM32开发、预算有限的项目 多平台开发、需要高级调试功能的复杂项目

Boot引脚

STM32 微控制器系列通常具有一个或多个用于控制启动模式的引脚,称为 BOOT 引脚。这些 BOOT 引脚的状态(高电平或低电平)在微控制器上电重置时决定了 CPU 从哪里开始执行代码。这一功能对于程序开发、调试以及固件升级非常重要。

对于大多数 STM32 微控制器,常见的配置包括 BOOT0 和有时的 BOOT1 引脚。具体的 BOOT 引脚配置和行为可能会根据不同的 STM32 系列和具体型号有所不同。

  • BOOT0: 这是最常见的启动模式选择引脚。它通常需要在上电或复位时设置为高电平或低电平,以选择启动模式。
  • BOOT1(如果存在): 这个引脚与 BOOT0 结合使用,提供更多的启动配置选项。

启动模式

STM32 微控制器的启动模式通常可以分为以下几种:

  • 主闪存模式(Main Flash Memory):

当 BOOT0 设置为低电平时,微控制器从主闪存(用户程序存储区)启动。 这是大多数应用程序的正常运行模式。

  • 系统内存模式(System Memory):

当 BOOT0 设置为高电平(并且 BOOT1 为低电平,如果有的话)时,微控制器从系统内存启动。 系统内存通常包含了一个由 ST 提供的引导加载程序(bootloader),可用于通过特定的通信接口(如 USART、USB、CAN 等)进行固件升级。

  • 嵌入式SRAM模式(Embedded SRAM):

在某些 STM32 配置中,当 BOOT0 和 BOOT1 都设置为高电平时,微控制器可能从内嵌的 SRAM 启动。这种模式主要用于特殊的调试目的。

与 ESP32对比

ESP32 不是ARM架构!

特性 ESP32 STM32
制造商 Espressif Systems STMicroelectronics
处理器架构 Xtensa LX6 微处理器 ARM Cortex-M 系列
核心数和频率 双核,最高 240 MHz 从单核到双核,频率从 48 MHz 到 480 MHz 不等
内置无线 Wi-Fi 802.11 b/g/n, 蓝牙 4.2/BLE 多数型号无内置无线,STM32WB 系列支持蓝牙和其他无线通信
内存 520 KB SRAM, 外部通过 SPI 连接的 Flash RAM 从几 KB 到 1 MB 以上,Flash 从几十 KB 到几 MB 不等
外设 GPIO, ADC, DAC, UART, SPI, I2C, CAN, Ethernet MAC GPIO, ADC, DAC, UART, SPI, I2C, USB, CAN, Ethernet 等
低功耗模式 支持深度睡眠模式 提供丰富的低功耗模式,适用于超低功耗应用
开发环境 ESP-IDF, Arduino IDE, MicroPython STM32CubeIDE, Keil, IAR, Arduino IDE
应用领域 物联网设备,智能家居,智能城市 广泛的应用,包括工业控制、汽车电子、低功耗便携设备等

参考

  • https://wiki.st.com/stm32mcu/wiki/STM32CubeIDE

EE STM32