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

相关推荐
sunoo-22928 分钟前
【嵌入式裸机开发Day04】i.MX6ULL 蜂鸣器驱动详解:从引脚地址查找到代码实现全流程
arm开发·单片机·嵌入式硬件·学习·串口·裸机
Brilliantwxx1 小时前
【STM32】 SPI阻塞式通信与HAL源码 (源码分析)
stm32·单片机·嵌入式硬件
老当益壮梁奶奶2 小时前
ARM汇编学习笔记(五):从按键轮询到 GIC 中断控制器(ARM Cortex-A7 )
arm开发·笔记·单片机·嵌入式硬件
WWJA王文举2 小时前
Bootloader、App 和升级分区之间是什么关系?
stm32·freertos·嵌入式开发·在线升级
西城微科方案开发3 小时前
基于SIC8F0535芯片的红外额温枪开发方案
单片机·嵌入式硬件
LCG元3 小时前
STM32F103 NTC 热敏电阻测温实战:分压网络设计、Steinhart-Hart 标定与 ADC 采样优化实测
stm32·单片机·嵌入式硬件
_Ningye4 小时前
通用异步收发器 UART
单片机
H_oRIZoN_4 小时前
Linux入门DAY45 IMX6ULL 裸机开发笔记:汇编点灯、C 语言点灯、GIC 中断梳理
linux·单片机·嵌入式硬件
怀民民民4 小时前
嵌入式软件学习路线与项目实践记录:STM32、FreeRTOS、Linux 与 OpenMV
stm32·freertos·嵌入式软件·嵌入式linux·openmv
离凌寒5 小时前
一、关于linux开发板上移植ubuntu根文件系统并配置桌面环境笔记记录
驱动开发·单片机