STM32知识点记录

1. 调试器

DAP全称Debug Access Port,是ARM提出的调试接口标准,专为Cortex-M系列微控制器设计。

常用的调试接口类型分为:JTAG(Joint Test Action Group,联合测试行动小组)SWD(Serial Wire Debug,串行调试)

JLink是SEGGER公司推出的JTAG仿真器。

STLink是意法半导体为STM8/STM32系列设计的集在线仿真与下载为一体的开发工具,支持JTAG/SWD/SWIM三种模式。

2. 烧录

单片机烧录方式可分为:ISPICPIAP

  • ISP(In-System Programming 在系统编程)
    • 通过单片机内置的引导程序Bootloader)和标准通信接口(如UART、SPI、I2C、USB等)实现程序烧录。
    • 过程:单片机的标准通信接口连接PC的USB -> 拉高BOOT引脚 -> 复位单片机 -> 从Bootloader启动 -> 通过串口发送固件文件 -> Bootloader接收并写入Flash -> 复位/Bootloader自动跳转 -> BOOT引脚恢复低电平 -> 运行新程序
    • 烧录时机:系统复位进入Bootloader
    • 成本低,速递慢,依赖通用硬件。
    • 适合量产后的固件升级。
  • ICP (In-circuit programmer 在电路编程)
    • 通过专用的编程器/调试器(如J-Link、ST-Link)直接访问单片机的调试接口(如SWD、JTAG),直接读写Flash/ROM。
    • 烧录时机:芯片编程时
    • 速度快,可靠性高,不能远程升级
    • 适合工厂批量烧录程序、开发阶段调试。
  • IAP(In-Application Programming 在应用编程)
    • 运行时通过APP自行修改Flash中的其他程序区域。
    • 烧录时机:APP运行时
    • 需要划分Flash为多个区域,支持远程升级。
    • 适用手机OTA升级、物联网设备无线更新。

 3. 硬件结构

  • Cortex-M内核
    • 处理器、寄存器、存储器接口都是32位。
    • 独立的指令总线和数据总线,取指与数据访问可并行。
    • 支持中断和调试
    • 寄存器组
      • R0 ~ R7 低组寄存器
      • R8 ~ R12 高组寄存器
      • R13 主堆栈指针MSP和进程堆栈指针PSP
        • 堆栈指针的最低两位永远是 0,这意味着堆栈总是 4 字节对齐的
        • 任一时刻只能使用其中的一个
      • R14 链接寄存器LR :当呼叫一个子程序时,由 R14 存储返回地址
      • R15 程序计数器PC:指向当前的程序地址
    • NVIC:管理全部中断源
    • MPU:管理存储器的访问权限
    • 跟踪系统:实时输出程序运行过程信息,便于调试。

4. 单片机启动流程

① 上电/复位 

② 系统从 0x0000 0000 地址读取两项内容:

  • 第一个字(偏移 0x00):设置主堆栈指针 MSP(Main Stack Pointer)。

  • 第二个字(偏移 0x04):设置程序入口地址(即复位中断向量 → Reset_Handler)。

③ startup_stm32f10x_hd.s

  • 初始化栈大小、堆大小
  • 执行向量表
  • 执行SystemInit()函数 (system_stm32f10x.c)
    • 初始化Flash接口
    • 初始化PLL
    • 初始化系统时钟
  • 执行_main函数
    • 全局/静态变量初始化
    • 初始化堆栈
    • 库函数初始化
    • 程序跳转进入用户main()函数 

5. 中断处理流程

类别 定义 示例 是否使用EXTI模块
外部中断 芯片外部的信号,通过引脚触发 GPIO电平变化
内部中断 芯片内部的外设或系统异常 定时器、USART 接收中断

 

  1. GPIO线路连到EXTI控制器(外部中断控制器)
  2. EXTI设置触发方式(上升沿、下降沿)
  3. 中断源发出请求信号(IRQ)(外设拉高其中断请求线IRQx)
  4. NVIC 判断是否通过 NVIC_EnableIRQ() 开启了该中断,优先级是否足够高
  5. 跳转到中断向量表中对应的 ISR(中断服务函数)
  6. 执行 ISR
  7. 清除中断标志防止重复触发
  8. 返回主程序

前2步是外部中断需要使用EXTI模块多出来的步骤,后面6步是共同步骤。

6. 轮询 vs 中断

都是处理外设事件的机制,但是轮询是主动询问,中断是被动打断。

轮询需要CPU循环检查外设状态,浪费资源等待,中断是外设主动通知CPU,只在需要时打断。

7. 位带操作

通过别名地址直接写入寄存器的某一比特位,不需要传统的“读-改-写”操作,防止在读写过程中被中断打断。

位带别名区把一个比特位膨胀成一个32位的字。

每个位带区的大小是1MB(0x000FFFFF字节)。

别名地址=位带别名区基地址+(字节偏移*32)+(位号*4)
#define BITBAND(addr,bitnum) ((addr & 0xF0000000) + 0x02000000 + ((addr & 0x000FFFFF) << 5) + (bitnum << 2))

8. GPIO和AFIO

GPIO控制每个引脚的模式和电平

AFIO控制每个引脚的复用功能

每个GPIO端口包含:

  • 2个32位配置寄存器(GPIOx_CRL,GPIOx_CRH)
  • 2个32位数据寄存器 (GPIOx_IDR和GPIOx_ODR)
  • 1个32位置位/复位寄存器(GPIOx_BSRR)
  • 1个16位复位寄存器(GPIOx_BRR)
  • 1个32位锁定寄存器(GPIOx_LCKR)  当在一个端口位上执行了锁定(LOCK)程序,在下一次复位之前,将 不能再更改端口位的配置。

GPIO端口的每个位可以由软件分别配置成多种模式

模式 简介 电气特性 常用场景
🟦浮空输入 默认模式 容器受干扰 按键输入
🟩上拉输入 内部上拉电阻 默认高电平,外部可拉低 按键接 GND 时使用
🟨下拉输入 内部下拉电阻 默认低电平,外部可拉高 按键接 VCC 时使用
⬛模拟输入 禁用输入/输出缓冲器 抗干扰强 ADC(模数转换)输入,如传感器
🟥推挽输出 上拉和下拉驱动 能输出高/低电平 LED、蜂鸣器、普通控制输出
🟫开漏输出 只能输出低电平,高电平需外部上拉 多设备共享一线通信 I²C 总线、多个设备输出同一引脚
🔵推挽复用   外设输出高/低电平 USART TX、SPI SCK、PWM 等
⚫开漏复用   需外部上拉电阻 I²C SDA/SCL(典型应用)

9. PWM

  • 通过改变脉冲的宽度(占空比),调节输出电压的有效值。
  • 适用于电机转速控制、LED亮度调节

10. DMA 直接存储器存取

  • 提供在外设和存储器之间或者存储器和存储器之间的高速数据传输,无须CPU干预
  • 有一个仲裁器来协调各个DMA请求的优先权
  • 每个独立的通道都直接连接专用的硬件DMA请求。
  • 每个通道都有3个事件标志(DMA半传输DMA传输完成DMA传输出错)。
  • 数据区的传输宽度(字节半字全字),源和目标地址必须按数据传输宽度对齐

访问冲突?

  • CPU和DMA同时访问同一目标内存
    • 总线仲裁机制会决定谁先访问
  • DMA1 和 DMA2 同时访问同一目标
    • 总线仲裁机制会决定谁先访问
  • DMA1 中的通道1 和 通道2 同时访问同一目标
    • 仲裁器处理访问顺序

常见应用场景

外设应用场景
USART 接收大块串口数据
ADC 连续采样模拟信号、存入内存
SPI/I²C 批量数据收发
DAC 需要持续输出音频/波形
内存-to-内存 批量复制内存内容

🧩 DMA 和 CPU 的区别

项目CPU 传输DMA 传输
主体 CPU 手动搬运 DMA 自动搬运
效率 低(中断+搬运)
实时性影响 低(CPU 空出做更重要任务)
中断次数 多(每个字节) 少(每次传输完成)

10. ADC 和 DAC

  • ADC 数字信号->模拟信号  传感器数据采集
    • 12位分辨率 -> 转换后的数字精度(0~4095)-> 能辨别的最小模拟量 3.3V/2^12 ≈ 0.000806
  • DAC 模拟信号->数字信号  模拟输出、音频

    • 转换方法:逐次逼近法(二分比较) 比较结果/(2^12-1) * V(REF) ≈ 电压值

11. 定时器

定时器类型名称特点适用场景
🟥 高级控制定时器 TIM1、TIM8 功能最强,支持互补PWM、死区、刹车 三相电机控制、高级PWM
🟩 通用定时器 TIM2、3、4、5 支持输入捕获、PWM输出等 普通PWM、编码器、电机测速
🟦 基本定时器 TIM6、TIM7 仅含时间基准,无通道 DAC 触发、周期性中断、ADC 触发

12. 看门狗

用来在系统失控时自动复位。

一种特殊的定时器:当它倒计时结束,如果你没喂狗(重装初值),它就会让系统复位!

  • 独立看门狗 IWDG:使用独立的低速时钟 LSI,即使主系统锁死,它也能正常工作,启动后不能关闭,主要用于 防死机自动重启。
  • 窗口看门狗 WWDG:运行在主频PCLK1上,需要在指定窗口期内喂狗,若喂得太早/太晚都会触发复位,启动后可软件关闭,用于检测任务调度是否错乱

——————————————————————————

时钟极性 CPOL:空闲时的时钟信号高低

时钟相位 CPHA:哪个跳变沿开始采样    0 上升沿    1 下降沿

CPOL CPHA 说明
0 0 空闲时处于低电平,在上升沿采样
0 1 空闲时处于低电平,在下降沿采样
1 0 空闲时处于高电平,在上升沿采样
1 1 空闲时处于高电平,在下降沿采样

——————————————————————————

通信方式 发送端和接收端 信号流
单工 固定,一端只能发一端只能收 单向
半双工 不固定,有切换延迟 双向,但不能同时
全双工 固定,双向都可收发 双向,允许同时

 

——————————————————————————

13. USART  通用同步异步收发器

最常用的点对点串行通信接口,适合芯片与某一外设之间进行稳定可靠的数据传输

基础结构:

项目说明
引脚 TX(发送)、RX(接收)
波特率 9600、115200、1M 等
数据格式 起始位 + 数据位(通常8位)+ 可选奇偶校验 + 停止位

⚙️使用步骤:

  1. 使能 GPIO 和 USART 时钟
  2. 配置 TX 为复用推挽输出,RX 为浮空输入
  3. 设置波特率、数据格式
  4. 启用 USART 和中断或 DMA(可选)
  5. 收发数据

14. SPI   串行外设接口

芯片与外设之间最快速、最常用的同步通信方式

特点:

  • 高速:高达几十 Mbps,远高于 I²C
  • 全双工
  • 主从同步串行通信

4 根基本信号线:

引脚名称作用主设备方向
SCLK 时钟线 同步发送接收数据 输出
MOSI 主出从入 主机发给从机的数据 输出
MISO 主入从出 从机返回给主机的数据 输入
NSS/CS 片选信号线 确定和哪一个从机通信 输出

⚙️ 使用步骤

  1. 配置 SPI 工作模式(主机/从机、CPOL/CPHA 时序)

  2. 配置波特率、数据位数、方向等

  3. 配置 GPIO(复用模式 AF_PP)

  4. 启动 SPI 外设

  5. 使用发送/接收函数传输数据

15. I²C  内部集成总线

适合芯片和多个低速外设之间的通信

特点:

  • 低速
  • 半双工
  • 多设备共享通信总线

2 根信号线:

引脚名称功能特性
SDA 数据线 双向数据 需上拉电阻
SCL 时钟线 主机输出时钟 需上拉电阻

16. CAN  控制器局域网

适合多个设备之间可靠通信,一般与外部 CAN 收发器芯片 配合使用。

特点:

  • 多主机
  • 差分通信
  • 支持仲裁和自动重发

 ****************************************************************

协议 同步性 通信方式 最少引脚 必要信号线 速率 主从结构 适用范围 特点
UART 异步 全双工 2 TX、RX 中等 点对点 调试、AT指令 通信距离短但稳定
USART 同步+异步 全双工 3 TX、RX、CLK 中等 主从    
SPI 同步 全双工 4 MOSI, MISO, SCLK, NSS/CS 主从 Flash、OLED、音频等大数据交换外设 高速
I²C 同步 半双工 2 SDA, SCL 低~中 多主多从 RTC、EEPROM、传感器 节省引脚
CAN 同步 多播 2 CANH, CANL 中~高 多主多从 汽车、BMS、工业控制 带仲裁,抗干扰

 

 信号线类型:

信号线含义
TX Transmit,发送数据
RX Receive,接收数据
SCLK / CLK 时钟线(同步通信使用)
MOSI 主设备输出,从设备输入
MISO 主设备输入,从设备输出
NSS / CS 从设备片选,主机拉低表示选中
SDA I²C 数据线,双向
SCL I²C 时钟线,由主设备控制
CANH / CANL CAN 差分对(需要收发器转换)
AINx 模拟输入引脚(ADC)
DOUTx 模拟输出引脚(DAC)

****************************************************************

posted @ 2025-06-12 23:22  番茄玛丽  阅读(124)  评论(0)    收藏  举报