1.简介
简单来说,STM32 是意法半导体(STMicroelectronics)推出的一系列 32位微控制器(MCU)。
它在嵌入式开发领域就像是智能手机中的“安卓”或电脑里的“Intel”,是目前最主流、应用最广的单片机家族之一。
1. 名字的含义
ST:代表生产商“意法半导体”。
M:Microcontroller(微控制器),即单片机。
32:代表它是 32位 架构(相比传统的 8位单片机如 51系列,它的运算能力、内存寻址范围都要强大得多)。
2. 核心大脑:ARM Cortex-M 内核
STM32 并不是自己从零设计 CPU,而是购买了 ARM 公司的 Cortex-M 系列内核专利,并在此基础上增加了丰富的外设(如 GPIO、定时器、ADC、串口等)。
常见的内核版本包括:
Cortex-M0/M0+:主打极致低功耗和低成本。
Cortex-M3:最经典的版本(如 STM32F103),平衡了性能与功耗。
Cortex-M4:增加了数字信号处理(DSP)和浮点运算(FPU)单元,适合复杂算法。
Cortex-M7:高性能“怪兽”,频率可达 400MHz 以上。
3. STM32 的主要家族分类
STM32 的产品线非常庞大,通常根据应用需求分为四大类:
4. 为什么 STM32 这么火?
性能强大:从几十 MHz 到几百 MHz,能处理从简单开关灯到复杂图像识别的各类任务。
外设极其丰富:一个芯片里集成了 ADC(模拟转数字)、DAC、PWM、I2C、SPI、CAN、USB、以太网等几乎所有常用接口。
开发极其便利:
STM32CubeMX:图形化配置工具,鼠标点点就能生成初始化代码。
库函数开发:不需要像 51 单片机那样去抠底层的寄存器位,直接调用函数接口即可。
生态系统无敌:网上教程、开源代码、现成的模块方案满天飞,遇到问题随便一搜就有答案。
5. 应用场景
消费电子:智能手环、无人机遥控器、平衡车。
工业控制:PLC、电机驱动、变频器。
物联网:智能家居网关、环境监测传感器。
汽车电子:车窗控制、仪表盘、车载多媒体。
2.片上资源/外设
3.命名规则

4.启动配置

5.最小系统电路

6.软件安装
安装Keil5 MDK
安装器件支持包
软件注册
安装STLINK驱动
安装USB转串口驱动
7.型号分类及缩写
原则:“先开时钟,再配置外设”
点亮一个灯
#include "stm32f10x.h" // 器件头文件,包含了 STM32 寄存器的地址定义和库函数声明
int main(void)
{
/**
* 第一步:开启 RCC 时钟使能
* 因为 STM32 为了省电,默认关闭所有外设时钟。
* GPIOC 挂载在 APB2 总线上,所以调用 RCC_APB2PeriphClockCmd。
*/
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
/**
* 第二步:配置 GPIO 端口模式
* 库函数使用结构体(Structure)来一次性传递多个配置参数。
*/
GPIO_InitTypeDef GPIO_InitStructure; // 定义一个结构体变量
// 1. 设置模式:Out_PP (Push-Pull) 推挽输出
// 这种模式下引脚可以输出高电平或低电平,驱动能力强
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
// 2. 指定引脚:第 13 号引脚
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;
// 3. 设置输出速度:50MHz
// 主要是控制 I/O 口的电平翻转频率,通常配置为最高以保证信号完整性
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
// 4. 初始化:将上述参数写入 GPIOC 的配置寄存器 (CRL/CRH)
GPIO_Init(GPIOC, &GPIO_InitStructure);
/**
* 第三步:控制引脚电平
*/
// 将 PC13 设置为高电平
// 如果 LED 是“低电平点亮”(常见于核心板),此时 LED 会熄灭
GPIO_SetBits(GPIOC, GPIO_Pin_13);
// 将 PC13 设置为低电平(当前被注释掉了)
// 如果 LED 是“低电平点亮”,取消注释后 LED 会点亮
// GPIO_ResetBits(GPIOC, GPIO_Pin_13);
while(1)
{
// 程序死循环,防止单片机运行结束进入未知状态
}
}关键概念总结
RCC (时钟配置):
它是代码运行的第一步。没有这一行,后面所有的 GPIO 寄存器操作都无效(就像电器没通电,开关按下去也没反应)。
GPIO 模式 (Out_PP):
推挽输出 (Push-Pull):最常用的输出模式,能输出 3.3V 或 0V。
开漏输出 (Open-Drain):常用于 I²C等总线通讯,需要外部上拉电阻。
寄存器层面发生了什么?
虽然你写的是库函数,但本质上:
RCC_APB2PeriphClockCmd是在修改 RCC_APB2ENR 寄存器的第 4 位。GPIO_Init是在修改 GPIOC_CRH 寄存器(因为 PC13 属于高 8 位控制)。GPIO_SetBits是在修改 GPIOC_BSRR 寄存器。
什么是APB2?
STM32 的外设挂载在不同的“总线”上,不同总线的频率和速度不同。函数名中的 APB2 代表了 GPIOC 所属的总线类型。
APB2 总线: 通常挂载高速外设(如 GPIO、高级定时器、ADC、SPI1 等)。
APB1 总线: 通常挂载低速外设(如 UART2、I2C、普通定时器等)。
评论区