需要补充一点单片机开发的知识,从STM32开始吧...
STM32是意法半导体(STMicroelectronics)推出的一系列32位ARM Cortex-M微控制器产品线。
这些微控制器采用了ARM Cortex-M内核,并具有丰富的外设和功能,可用于各种应用领域,包括工业控制、汽车电子、医疗设备、消费电子等。
STM32
STM32 引脚
图片来源:https://www.wellpcb.com/STM32-pinout.html
STM32系列微控制器产品线包括多个系列和型号,以满足不同应用和需求。这些系列包括:
- STM32F系列:主流系列
- STM32L系列:超低功耗系列
- STM32H系列:高性能系列
- STM32G系列:通用系列
- STM32W系列
- ...
图片来源:https://www.st.com/en/microcontrollers-microprocessors/stm32-32-bit-arm-cortex-mcus.html
命名格式
1 |
|
- 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:嵌入式,单片机
图片来源: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针接头(板子上需要这么留接口):
但是,中国克隆的ST-LINK/V2接口可能只使用10针接头:
图片来源:https://stm32-base.org/guides/connecting-your-debugger.html
不管几针,都是要接到STM32的对应的引脚上。
烧写器ST-Link
ST-LINK
ST-LINK Utility
与烧写器对应的上位机软件: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功能强
特性 | 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