Skip to content

STM32

这里是我们为各位准备的保姆级 STM32 入门教学,希望能够帮助你的学习!欢迎享用叭~

目录

STM32 是什么?

STM32 是意法半导体公司推出的一系列微控制器的统称,基于 ARM Cortex-M 内核。正如其名,“ST”代表 ST 公司(意法半导体,STMicroelectronics),“32”代表这是一款 32 位的微控制器,这意味着它一次能处理 32 位的二进制数据,比 51 等老一代的 8 位单片机算力要强得多。无论是在大学的电子信息类专业竞赛中,还是在工业控制、消费电子的研发一线,STM32 都占据了极其重要的统治地位。

STM32 内部的中央处理器使用的是 ARM 公司设计的 Cortex-M 内核。ST 公司向 ARM 公司购买内核的设计图纸,这些内核就负责核心的计算功能。在此之外,ST 公司还在 ARM 内核的周围,加上了自己设计的各种外围设备。这些外设通过内部总线与内核相连,我们就可以通过这些外设来对硬件进行操作。

  • GPIO(通用输入输出引脚):芯片四周的金属引脚。输出高电平(1)就能点亮 LED、驱动电机;输入低电平(0)就能检测按键是否被按下。
  • 通信接口:用于和其他芯片或模块对话,常见的有UARTI2CSPICAN。比如通过 UART 串口把数据发给电脑显示,或者通过 SPI 读取陀螺仪传感器的数据。
  • ADC/DAC(模数转换器):类似传感器接口。现实世界的温度、电压是连续的模拟信号,ADC 能把它们转换为数字,让 CPU 能够理解。
  • TIM(定时器):可以用来精准定时,或者输出 PWM 信号,这可以通过控制开关频率来调节灯光的亮度、电机的转速。

怎么开发?

在 STM32 的发展历程中,出现了三种主要的开发编写方式:

  1. 寄存器

这种方式直接通过代码修改芯片内部特定寄存器的二进制位来控制硬件,需要对着数据量极大的参考手册去查某一个引脚对应的地址,效率低且晦涩难懂。如今除特殊优化需求外,极少有人直接用它开发大项目,但有助于理解底层原理。

为方便各位直观理解,每种方法都放一个点灯的栗子:

C
RCC->APB2ENR = 0x00000010; // 第 1 步
GPIOC->CRH = 0x00300000; // 第 2 步
GPIOC->ODR = 0x00000000; // 第 3 步
  1. 标准外设库

ST 公司把寄存器操作封装成了 C 语言的函数,开发者不需要背诵和查阅寄存器地址了,直接调用函数即可,可读性大大增强。伴随了 STM32F1 时代十多年,很多教程和企业旧项目仍在使用,但 ST 官方已停止为其定制新芯片。

C
GPIO_InitTypeDef GPIO_InitStructure;
// 第 1 步
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
// 第 2 步
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
// 第 3 步
GPIO_Init(GPIOC, &GPIO_InitStructure);
GPIO_ResetBits(GPIOC, GPIO_Pin_13);
  1. HAL 库

HAL,即 Hardware Abstraction Layer,硬件抽象层。它提供了抽象程度更高的接口,是 ST 目前主流推荐的库,跨芯片移植性最好。它降低了入门门槛,让开发者能把精力集中在产品的业务逻辑上,而不是繁琐的硬件初始化上。

C
HAL_Init();
SystemClock_Config();
MX_GPIO_Init(); // 第 1 & 2 步
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_RESET); // 第 3 步

根据易用性和学习门槛考虑,这一系列教学会以标准外设库和 HAL 库为主。

怎么准备?

我们这一系列教学里会使用 STM32F103C8T6 这一型号作为示例,这也是网上绝大多数教程和很多在售的开发板所使用的型号。其中 F 代表通用基础型,103 代表增强型子系列,C 代表 48 个引脚,8 代表 64 KB 的闪存的存储空间,T 代表芯片的封装类型,6 代表其工作温度范围 -40°C 到 85°C。

当然,为了扩展性的考虑,我们还是建议各位不要只购买核心板,最好还是需要一套比较完整的开发套件

此外,为了让 STM32 能够正常和电脑通信,如果确认了套件内不包含仿真器、DAP 之类的东西,我们建议再额外购买一个 ST-Link,市场价只需要十几块钱!千万不要被骗了!