STM32中的主从触发模式是什么?

在 STM32 中,主从触发模式(Master/Slave Mode) 是定时器(TIM)外设的核心功能之一,本质是通过硬件联动实现多个定时器 / 外设之间的同步、级联或触发控制,无需 CPU 干预,能提升时序精度和系统效率。

一、核心应用场景

主从触发模式主要解决 "多外设同步工作" 的问题,典型场景包括:

  1. 多定时器同步计数(如多路 PWM 同步输出);
  2. 定时器触发 ADC/DAC 采样(替代软件触发,提升采样精度);
  3. 定时器级联(如低频定时器触发高频定时器,扩展计数范围);
  4. 编码器 / 霍尔传感器信号触发定时器计数。

二、关键硬件通路

1. 主设备:TRGO 信号生成

定时器(如 TIM1/TIM2/TIM3 等)可配置为 "主模式",通过内部逻辑生成触发输出信号(TRGO),TRGO 的触发源可配置为:

触发源 说明
定时器更新事件(Update) 溢出 / 下溢时触发(最常用)
捕获 / 比较事件(CC1/CC2) 通道 1/2 捕获 / 比较时触发
定时器触发事件(Trigger) 外部触发输入时触发
计数器使能(Counter Enable) 定时器启动时触发

配置路径:TIMx_CR2 寄存器的 MMS[2:0] 位(主模式选择)。

2. 从设备:TRGI 信号接收与动作

定时器(或 ADC/DAC 等)作为 "从设备",接收触发输入信号(TRGI),TRGI 的来源可配置为:

  • 内部:其他定时器的 TRGO(如 TIM1_TRGO → TIM2_TRGI);
  • 外部:GPIO 引脚(如 TI1/TI2)、编码器信号、ETR 外部触发引脚;
  • 外设联动:ADC 的转换完成信号、DAC 的触发信号等。

从设备接收到 TRGI 后,可执行的动作由 TIMx_SMCR 寄存器的 SMS[2:0](从模式选择)和 TS[2:0](触发源选择)配置,核心动作包括:

从模式动作 说明
复位模式(Reset) TRGI 触发时,计数器清零
门控模式(Gated) TRGI 为高 / 低电平时,计数器才计数
触发模式(Trigger) TRGI 上升 / 下降沿触发计数器启动 / 停止
编码器模式(Encoder) 外部编码器信号触发计数(特殊从模式)

三、典型配置步骤(以定时器同步为例)

以 "TIM1 为主设备,触发 TIM2 复位计数" 为例:

步骤 1:配置主设备(TIM1)

c

运行

复制代码
// 1. 使能TIM1时钟
__HAL_RCC_TIM1_CLK_ENABLE();

// 2. 配置TIM1基本参数(如计数模式、自动重装值等)
TIM_HandleTypeDef htim1;
htim1.Instance = TIM1;
htim1.Init.Prescaler = 71;       // 分频后1MHz
htim1.Init.CounterMode = TIM_COUNTERMODE_UP;
htim1.Init.Period = 999;         // 1ms更新一次
HAL_TIM_Base_Init(&htim1);

// 3. 配置主模式:更新事件作为TRGO输出
TIM_MasterConfigTypeDef sMasterConfig;
sMasterConfig.MasterOutputTrigger = TIM_TRGO_UPDATE; // TRGO触发源为更新事件
sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_ENABLE; // 使能主模式
HAL_TIMEx_MasterConfigSynchronization(&htim1, &sMasterConfig);
步骤 2:配置从设备(TIM2)

c

运行

复制代码
// 1. 使能TIM2时钟
__HAL_RCC_TIM2_CLK_ENABLE();

// 2. 配置TIM2基本参数
TIM_HandleTypeDef htim2;
htim2.Instance = TIM2;
htim2.Init.Prescaler = 71;
htim2.Init.CounterMode = TIM_COUNTERMODE_UP;
htim2.Init.Period = 4999; // 50ms
HAL_TIM_Base_Init(&htim2);

// 3. 配置从模式:接收TIM1的TRGO,触发复位
TIM_SlaveConfigTypeDef sSlaveConfig;
sSlaveConfig.SlaveMode = TIM_SLAVEMODE_RESET; // 从模式为复位(TRGI触发时计数器清零)
sSlaveConfig.InputTrigger = TIM_TS_ITR0;      // 触发源为ITR0(TIM1_TRGO → TIM2_ITR0,不同定时器ITR映射不同)
HAL_TIM_SlaveConfigSynchronization(&htim2, &sSlaveConfig);

// 4. 使能TIM2计数
HAL_TIM_Base_Start(&htim2);
// 5. 启动TIM1(主设备)
HAL_TIM_Base_Start(&htim1);

四、核心注意点

  1. TRGO/TRGI 映射关系:不同定时器的 ITR(内部触发连接)映射不同(如 TIM1→TIM2 的 ITR0,TIM2→TIM3 的 ITR1),需参考芯片手册的 "定时器内部触发连接" 表;
  2. 主从模式使能 :主设备需开启TIM_MASTERSLAVEMODE_ENABLE,否则 TRGO 无输出;
  3. 外设联动 :ADC/DAC 也可作为 "从设备",接收定时器 TRGO 触发采样 / 转换(如 ADC 的ADC_EXTERNALTRIGCONV_T1_TRGO);
  4. 优先级:硬件触发无需 CPU 介入,时序精度远高于软件中断触发。

五、总结

STM32 的主从触发模式本质是硬件级的同步机制

  • 主设备通过 TRGO 输出触发信号,从设备通过 TRGI 接收并执行预设动作;
  • 核心价值是脱离 CPU 实现多外设同步,提升时序精度、降低 CPU 负载;
  • 广泛用于 PWM 同步、高精度采样、编码器计数、定时器级联等场景。

不同系列 STM32(F1/F4/H7)的寄存器配置细节略有差异,但核心逻辑一致,需结合对应芯片手册调整。

相关推荐
Wave8455 小时前
基于 STM32 + ESP8266 + W25Q64 的双核 OTA 底层架构总结
stm32·嵌入式硬件·架构
振南的单片机世界6 小时前
CPU时钟:频率越高跑越快,但物理极限在“拖后腿”
stm32·单片机·嵌入式硬件
普中科技8 小时前
【普中 51-Ai8051 开发攻略】-- 第 20 章 输入捕获实验
单片机·嵌入式硬件·输入捕获·pca·普中科技·ai8051u·aicube
d111111111d8 小时前
直流电机位置式 PID 控制 和 舵机的区别
笔记·stm32·单片机·嵌入式硬件·学习
d111111111d10 小时前
了解Modbus
网络·笔记·stm32·单片机·嵌入式硬件·学习
三佛科技-1341638421210 小时前
主控FT32F031便携式吸尘器方案,迷你手持吸尘器MCU控制方案开发
单片机·嵌入式硬件·物联网·智能家居·pcb工艺
一个平凡而乐于分享的小比特11 小时前
一文读懂MCU与FPGA:核心区别、协同之道与双修秘籍
单片机·fpga开发·职场发展·mcu开发
踏着七彩祥云的小丑12 小时前
嵌入式——认识电子元器件——微动开关系列
单片机·嵌入式硬件
调光IC-小雅12 小时前
解析FP62××系列限流保护机制:为何它是DC/DC芯片的安全底线
单片机·嵌入式硬件
gihigo199813 小时前
MAX30102 + STM32 人体血氧饱和度(SpO₂)测量方案
stm32·单片机·嵌入式硬件