Published

- 17 min read

[学习笔记]从零开始的STM32学习笔记(2)

Thumbnail

STM32 学习笔记(2):STM32 简介与开发入门

STM32:嵌入式领域的明星

STM32 是 ST(意法半导体)公司基于 ARM Cortex-M 内核开发的 32 位微控制器。让我们逐个解析这个名字:

  • ST: 意法半导体,著名的半导体制造商。
  • M: Microcontroller 的缩写,即微控制器,也就是我们常说的单片机。
  • 32: 表示这是一款 32 位单片机,相比于传统的 8 位单片机(如 51 单片机),STM32 拥有更强大的性能。ST 公司也有 8 位单片机产品,名为 STM8。
  • ARM Cortex-M 内核: 这是 STM32 的核心部分,由 ARM 公司设计。它在 STM32 中扮演着 CPU 的角色,负责执行程序指令、进行运算等。

可以把 ARM 公司类比为电脑领域的 Intel 或 AMD,它们设计 CPU 架构,而 ST 公司则像电脑厂商一样,采用 ARM 的内核来制造自己的芯片产品。其他半导体厂商也可以购买 ARM 内核授权来生产自己的基于 ARM 内核的芯片。

STM32 的广泛应用

STM32 常应用于嵌入式领域,例如:

  • 智能车: 制作循迹小车,读取光电传感器或摄像头数据,控制电机运动。
  • 无人机: 读取陀螺仪数据,根据控制算法控制电机转速,保持飞行稳定。
  • 机器人: 驱动舵机控制机器人关节运动。
  • 无线通信: 连接 2.4G 无线模块、蓝牙或 WiFi 模块,实现无线通信功能。
  • 物联网: 利用无线模块进行通信,例如通过蓝牙、WiFi 或 NB-IoT 等,驱动继电器控制 220V 电路。
  • 工业控制: 在工业自动化领域中,PLC(可编程逻辑控制器)内部的主控芯片很多都是 STM32。
  • 娱乐电子产品: 制作 LED 流水灯等趣味电子产品。

STM32 的家族成员

STM32 家族庞大,主要分为四个系列:

  • 高性能系列: 如 F2、F4、F7、H7 等,拥有更高的性能,例如 STM32F2 系列具备 398 的 CoreMark 跑分和 120MHz 主频的 Cortex-M3 内核,而 H7 系列更是拥有 3224 的内核跑分和 550MHz 的 Cortex-M7 + 240MHz 的 Cortex-M4 双核配置。
  • 主流系列: 如 F1 系列,性能适中,应用广泛。本教程使用的就是 STM32F103C8T6,它具备 177 的内核跑分和 72MHz 的 Cortex-M3 内核。
  • 超低功耗系列: 如 L0、L1、L4、L5 等,适用于对功耗敏感的应用。
  • 无线系列: 如 WL 和 WB 系列,集成了无线通信功能。

不同的系列针对不同的应用场景,提供了多样化的选择。这些系列都属于 STM32 家族,因此在不同系列之间切换相对容易。

深入了解 ARM

STM32 使用了 ARM Cortex-M 内核,那么 ARM 到底是什么呢?

  • ARM 既指 ARM 公司,也指 ARM 处理器内核。 ARM 公司是全球领先的半导体知识产权(IP)提供商,它本身不生产芯片实体,而是设计 ARM 内核架构,并将其授权给各大半导体厂商。
  • ARM 的商业模式: 这种只设计 IP,不生产实体的模式,是一种开放合作、利益共享、风险共担的商业模式。全球超过 95% 的智能手机和平板电脑都采用了 ARM 架构,足见其成功之处。
  • ARM 内核的优势: ARM 内核性能出色,功耗低,这也是它广受欢迎的重要原因。
  • ARM 与半导体厂商的关系: ARM 公司设计内核,半导体厂商则完善内核周边的电路,并生产芯片。可以将 ARM 内核比作芯片的 CPU,而周边的存储器、外设等则由半导体厂商来设计和集成。

ARM 内核家族

ARM 公司针对不同的应用场景,推出了多种内核型号:

  • 经典 ARM 处理器: 如 ARM7、ARM9、ARM11 等,是较早期的内核版本。

  • Cortex 系列: ARM11 之后推出的新系列,包括 Cortex-A、Cortex-R 和 Cortex-M 三个子系列,这三个系列的字母组合起来正好是 ARM。

    • Cortex-A 系列: A 代表 Application,主要面向高端应用型领域,例如智能手机。苹果、高通、联发科等手机芯片厂商都采用 ARM Cortex-A 系列内核。A 系列性能强大,发展迅速,型号众多。最近,基于 ARM 架构的 M1 芯片更是将 ARM 架构引入了电脑领域。
    • Cortex-R 系列: R 代表 Real-time,主要面向实时性要求高的场景,例如硬盘控制器。R 系列应用相对较少,内核型号也不多。
    • Cortex-M 系列: M 代表 Microcontroller,主要面向单片机领域。STM32 使用的就是 Cortex-M 系列内核,包括 M0、M1、M3、M4 等型号,不同型号的内核性能也有所差异。

本教程使用的 STM32F103C8T6

本教程将使用 STM32F103C8T6 这款芯片,它的主要参数如下:

  • 系列: 主流系列 STM32F1
  • 内核: ARM Cortex-M3
  • 主频: 72MHz
  • RAM: 20K(SRAM)
  • ROM: 64K(Flash)
  • 供电电压: 2.0~3.6V,标准 3.3V 供电(注意:5V 电压不能直接给 STM32 供电,需要降压到 3.3V)
  • 封装: LQFP48(48 个引脚)

片上资源/外设

STM32F1 系列拥有丰富的片上资源,也称为外设(Peripheral)。我们可以通过编程来配置这些外设,实现各种功能。

以下是 STM32F1 系列的主要外设:

英文缩写名称英文缩写名称
NVIC嵌套向量中断控制器CANCAN 通信
SysTick系统滴答定时器USBUSB 通信
RCC复位和时钟控制RTC实时时钟
GPIO通用 IO 口CRCCRC 校验
AFIO复用 IO 口PWR电源控制
EXTI外部中断BKP备份寄存器
TIM定时器IWDG独立看门狗
ADC模数转换器WWDG窗口看门狗
DMA直接内存访问DAC数模转换器
USART同步/异步串口通信SDIOSD 卡接口
I2CI2C 通信FSMC可变静态存储控制器
SPISPI 通信USB OTGUSB 主机接口

需要注意的是,并非所有 STM32F1 系列的芯片都拥有全部外设。 例如,STM32F103C8T6 就没有 FSMC、SDIO、USB OTG 这三个外设。具体的外设配置需要查阅对应芯片的数据手册。

外设简介:

  • NVIC (Nested Vectored Interrupt Controller): 嵌套向量中断控制器,用于管理中断,配置中断优先级等。
  • SysTick: 系统滴答定时器,内核中的一个定时器,可以提供定时服务,例如在操作系统中进行任务切换。
  • RCC (Reset and Clock Control): 复位和时钟控制,用于配置系统时钟,使能各个模块的时钟。在 STM32 中,外设在上电时默认是不工作的,需要先使用 RCC 使能外设的时钟才能正常使用。
  • GPIO (General Purpose Input Output): 通用 IO 口,最基本的功能,用于点亮 LED、读取按键等。
  • AFIO (Alternate Function I/O): 复用 IO 口,用于配置复用功能端口的重定义和中断端口。
  • EXTI (External Interrupt): 外部中断,配置好后,当引脚电平变化时,可以触发中断。
  • TIM (Timer): 定时器,STM32 中最常用、功能最多的外设之一。分为高级定时器、通用定时器和基本定时器三种类型。可以用于定时中断、测量频率、生成 PWM 波形、配置成编码器接口等。
  • ADC (Analog-to-Digital Converter): 模数转换器,内置 12 位 ADC,可以直接读取 IO 口的模拟电压值。
  • DMA (Direct Memory Access): 直接内存访问,可以帮助 CPU 搬运大量数据。
  • USART (Universal Synchronous/Asynchronous Receiver/Transmitter): 同步/异步串口,平时使用的 UART 是异步串口,USART 既支持异步串口也支持同步串口。
  • I2C 和 SPI: 两种常用的通信协议,STM32 内置了它们的控制器,可以使用硬件输出时序波形。
  • CAN 和 USB: 也是常用的通信协议,CAN 通常用于汽车领域,USB 则应用更加广泛。
  • RTC (Real Time Clock): 实时时钟,用于计时,可以接外部备用电池,掉电也能正常运行。
  • CRC 校验: 一种数据校验方式,用于判断数据的正确性。
  • PWR (Power Control): 电源控制,可以让芯片进入睡眠模式等状态,达到省电的目的。
  • BKP (Backup Register): 备份寄存器,系统掉电时仍可由备用电池保持数据。
  • 看门狗: 当单片机因为干扰死机或程序设计不合理出现死循环时,看门狗可以及时复位芯片,保证系统稳定。
  • DAC (Digital-to-Analog Converter): 数模转换器,可以在 IO 口直接输出模拟电压,是 ADC 的逆过程。
  • SDIO (Secure Digital Input/Output): SD 卡接口,用于读取 SD 卡。
  • FSMC (Flexible Static Memory Controller): 可变静态存储控制器,用于扩展内存或配置成其他总线协议。
  • USB OTG (USB On-The-Go): USB 主机接口,可以让 STM32 作为 USB 主机去读取其他 USB 设备。

芯片命名规则

了解 STM32 芯片的命名规则可以帮助我们快速识别芯片的参数。以 STM32F103C8T6 为例:

字母/数字含义
STM32基于 ARM 内核的 32 位微控制器
F通用类型
103增强型(还有基本型、USB 型、互联型等)
C48 引脚(还有 36、64、100、144 引脚等)
8Flash 容量 64K(还有 16K、32K、128K、256K 等)
TLQFP 封装
6温度范围 -40~85 摄氏度

例如,STM32F103RCT6 表示 64 引脚、256K Flash、LQFP 封装、温度范围 -40~85 摄氏度的 STM32F103 芯片。

系统结构

STM32F103C8T6 的系统结构比较复杂,我们可以将其分为四个部分:

  1. 内核 (Cortex-M3): 引出了 ICode 指令总线、DCode 数据总线和 System 系统总线。ICode 和 DCode 主要连接 Flash,用于加载程序指令和数据。System 总线连接到 RAM、FSMC、AHB 系统总线等。
  2. AHB 系统总线: AHB 的意思是先进高性能总线,上面挂载了最基本的或性能比较高的外设,例如 RCC、SDIO 等。AHB 通过两个桥接连接到 APB2 和 APB1 两个外设总线。APB 的意思是先进外设总线,用于连接一般的外设。
  3. APB2 和 APB1 总线: APB2 的性能比 APB1 高一些,APB2 的频率通常与 AHB 相同,为 72MHz,而 APB1 通常为 36MHz。APB2 上连接了 GPIO、USART1、SPI1、TIM1、TIM8、ADC、EXTI、AFIO 等,而 APB1 上连接了 USART2/3/4/5、TIM2/3/4/5、DAC、PWR、BKP 等。
  4. DMA: 可以将其看作 CPU 的小秘书,用于搬运大量数据,减轻 CPU 的负担。DMA 通过 DMA 总线连接到总线矩阵,可以访问外设。

引脚定义

引脚定义对于使用芯片至关重要。通过查阅芯片的数据手册,可以获得详细的引脚定义表。这里列出一些关键引脚:

  • 电源相关 (红色标记): VBAT(备用电池供电)、VSS(负极/GND)、VDD(正极/3.3V)。
  • 最小系统相关 (蓝色标记): OSC_IN/OSC_OUT(主晶振)、OSC32_IN/OSC32_OUT(RTC 晶振)、NRST(复位)、BOOT0/BOOT1(启动模式配置)。
  • IO 口功能 (绿色标记): PA0PA15、PB0PB15 等,这些引脚可以配置成不同的功能。

需要注意的是:

  • PA13 和 PA14 默认是 SWD 调试端口,如果使用 ST-Link 下载调试程序,需要占用这两个 IO 口。
  • PA15、PB3 和 PB4 默认是 JTAG 调试端口,但在使用 SWD 调试方式时,可以在程序中将它们配置成普通 IO 口使用。

启动配置

STM32 可以通过配置 BOOT0 和 BOOT1 引脚来选择三种启动模式:

BOOT1BOOT0启动模式说明
X0主闪存存储器从 Flash 启动,执行 Flash 中的程序,这是最常用的模式。
01系统存储器从系统存储器启动,该存储器中存放了 ST 官方的 Bootloader 程序,用于串口下载程序。
11内置 SRAM从 SRAM 启动,主要用于程序调试。

需要注意的是:

  • BOOT 引脚的值在上电复位后的一瞬间有效,之后就无效了。
  • 如果将 PA13、PA14、PA15、PB3、PB4 全部配置成了普通 IO 口,会导致无法通过调试端口下载程序,此时需要使用串口下载,并将 BOOT0 配置为 1,BOOT1 配置为 0。

最小系统电路

最小系统电路是指能让单片机正常工作的最基本的电路。STM32 的最小系统电路主要包括:

  • 电源电路: 为 STM32 的各个电源引脚 (VDD、VSS、VBAT) 提供稳定的供电。通常需要在 VDD 和 VSS 之间连接滤波电容,以保证供电电压的稳定。如果需要使用 RTC 的掉电保持功能,还需要连接 VBAT 备用电池。
  • 晶振电路: 通常使用 8MHz 的主晶振,并为晶振的两个引脚分别连接一个 20pF 的起振电容到地。如果需要使用 RTC 功能,还需要连接 32.768kHz 的 RTC 晶振。
  • 复位电路: 由一个 10k 电阻和一个 0.1uF 电容组成,为 STM32 提供复位信号。可以在电容左边并联一个按键,实现手动复位。
  • 启动配置电路: 通过跳线帽或拨码开关,配置 BOOT0 和 BOOT1 引脚的电平,选择启动模式。
  • 下载电路: 如果使用 ST-Link 下载程序,需要将 SWDIO 和 SWCLK 这两个引脚引出来,方便接线。

最小系统板已经集成了这些电路,可以直接使用。如果自己设计电路,可以参考最小系统板的原理图。

总结

本节学习笔记介绍了 STM32 的基本情况、ARM 内核、片上资源、命名规则、系统结构、引脚定义、启动配置和最小系统电路等内容。这些都是 STM32 开发的基础知识。

在后续的学习笔记中,我们将学习如何使用 Keil 软件进行 STM32 开发,并逐步深入学习各个外设的使用。

感谢大家的阅读,我们下期再见!