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)的寄存器配置细节略有差异,但核心逻辑一致,需结合对应芯片手册调整。

相关推荐
编程墨客1 小时前
STM32 HAL库实战指南:从零开始构建嵌入式应用系统
stm32·单片机·嵌入式硬件
就是蠢啊1 小时前
51单片机——DS1302 时钟芯片(一)
单片机·嵌入式硬件·51单片机
淘晶驰AK1 小时前
电机控制是不是就绑死在单片机上了
单片机·嵌入式硬件
bubiyoushang88811 小时前
基于STM32F103与A3988驱动芯片的两相四线步进电机控制方案
stm32·单片机·嵌入式硬件
bai54593615 小时前
STM32 备份寄存器
stm32·单片机·嵌入式硬件
cold_Mirac15 小时前
stm32-freertos和逻辑编程下堆栈功能的区分
stm32·单片机·嵌入式硬件
youcans_15 小时前
【动手学STM32G4】(3)上位机实时显示多路波形
stm32·单片机·嵌入式硬件·上位机
铁手飞鹰16 小时前
[HAL库分析—GPIO]
c语言·stm32·单片机·嵌入式硬件
徐某人..16 小时前
网络编程学习--第一天
arm开发·单片机·学习·arm