侧边栏壁纸
博主头像
木云舟

行动起来,活在当下

  • 累计撰写 3 篇文章
  • 累计创建 1 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

STM32笔记(一)

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 的产品线非常庞大,通常根据应用需求分为四大类:

类别

代表系列

特点

主流型 (Mainstream)

F1, F0, G0

最常用,性价比高,入门首选。

高性能型 (High Performance)

F4, F7, H7

运算速度快,内存大,带屏幕驱动和高速接口。

低功耗型 (Ultra-low-power)

L0, L1, L4, U5

极致省电,适合穿戴设备、传感器节点。

无线型 (Wireless)

WB (蓝牙), WL (LoRa)

自带无线通信功能。


4. 为什么 STM32 这么火?

  1. 性能强大:从几十 MHz 到几百 MHz,能处理从简单开关灯到复杂图像识别的各类任务。

  2. 外设极其丰富:一个芯片里集成了 ADC(模拟转数字)、DAC、PWM、I2C、SPI、CAN、USB、以太网等几乎所有常用接口。

  3. 开发极其便利

    • STM32CubeMX:图形化配置工具,鼠标点点就能生成初始化代码。

    • 库函数开发:不需要像 51 单片机那样去抠底层的寄存器位,直接调用函数接口即可。

  4. 生态系统无敌:网上教程、开源代码、现成的模块方案满天飞,遇到问题随便一搜就有答案。


5. 应用场景

  • 消费电子:智能手环、无人机遥控器、平衡车。

  • 工业控制:PLC、电机驱动、变频器。

  • 物联网:智能家居网关、环境监测传感器。

  • 汽车电子:车窗控制、仪表盘、车载多媒体。

2.片上资源/外设

英文缩写

名称

英文缩写

名称

NVIC

嵌套向量中断控制器

CAN

CAN通信

SysTick

系统滴答定时器

USB

USB通信

RCC

复位和时钟控制

RTC

实时时钟

GPIO

通用IO口

CRC

CRC校验

AFIO

复用IO口

PWR

电源控制

EXTI

外部中断

BKP

备份寄存器

TIM

定时器

IWDG

独立看门狗

ADC

模数转换器

WWDG

窗口看门狗

DMA

直接内存访问

DAC

数模转换器

USART

同步/异步串口通信

SDIO

SD卡接口

I2C

I2C通信

FSMC

可变静态存储控制器

SPI

SPI通信

USB OTG

USB主机接口

3.命名规则

image-20260120224619367.png

4.启动配置

image-20260120224702147.png

5.最小系统电路

image-20260120224751009.png

6.软件安装

  • 安装Keil5 MDK

  • 安装器件支持包

  • 软件注册

  • 安装STLINK驱动

  • 安装USB转串口驱动

7.型号分类及缩写

缩写

释义

Flash容量

型号

LD_VL

小容量产品超值系列

16~32K

STM32F100

MD_VL

中容量产品超值系列

64~128K

STM32F100

HD_VL

大容量产品超值系列

256~512K

STM32F100

LD

小容量产品

16~32K

STM32F101/102/103

MD

中容量产品

64~128K

STM32F101/102/103

HD

大容量产品

256~512K

STM32F101/102/103

XL

加大容量产品

大于512K

STM32F101/102/103

CL

互联型产品

-

STM32F105/107

原则:“先开时钟,再配置外设”

点亮一个灯
#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)
    {
        // 程序死循环,防止单片机运行结束进入未知状态
    }
}

关键概念总结

  1. RCC (时钟配置):

    它是代码运行的第一步。没有这一行,后面所有的 GPIO 寄存器操作都无效(就像电器没通电,开关按下去也没反应)。

  2. 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、普通定时器等)。

1

评论区