高端 网站设计公司,wordpress添加投稿功能,做图片的软件带字图片,动画制作网页一、函数功能与定位TIM_SelectInputTrigger()是STM32定时器外设的关键配置函数#xff0c;用于设置从模式定时器的触发源#xff08;Trigger Source#xff09;。其核心作用是将定时器的内部事件或外部信号映射为触发信号#xff08;TRGI#xff09;#xff0c;进而控…一、函数功能与定位TIM_SelectInputTrigger()是STM32定时器外设的关键配置函数用于设置从模式定时器的触发源Trigger Source。其核心作用是将定时器的内部事件或外部信号映射为触发信号TRGI进而控制从定时器的计数行为如启动/停止/复位等。该函数属于STM32标准外设库SPL或HAL库的底层配置接口。
二、函数原型与参数解析1. 函数原型
void TIM_SelectInputTrigger(TIM_TypeDef* TIMx, uint16_t TIM_InputTriggerSource);TIMx目标定时器指针如TIM1、TIM3。TIM_InputTriggerSource触发源类型可选值见下表触发源类型功能描述TIM_TS_ITR0 ~ ITR3内部触发源用于定时器级联如TIM2触发TIM3TIM_TS_TI1F_EDTI1引脚边沿检测器上升沿下降沿TIM_TS_TI1FP1通道1滤波后输入信号TI1FP1可配置单边沿TIM_TS_TI2FP2通道2滤波后输入信号TI2FP2TIM_TS_ETRF外部触发输入ETR引脚信号2. 参数选择规则内部触发ITRx用于定时器同步如TIM1更新事件触发TIM2计数。连接规则ITR0TIM1 → TIM2ITR1TIM1 → TIM3ITR2TIM1 → TIM4具体映射需查芯片参考手册外部引脚触发需结合GPIO配置TI1FP1/TI2FP2需初始化对应通道引脚如TIM3_CH1对应PA6。ETRF需使能ETR引脚如TIM1_ETR对应PA12。
三、底层机制触发源与从模式的协同1. 从模式控制器Slave Mode Controller触发源信号TRGI输入至定时器的从模式控制器通过配置从模式Slave Mode 决定响应行为从模式功能典型应用TIM_SlaveMode_Reset触发时复位计数器CNT信号周期测量TIM_SlaveMode_Gated触发信号高电平时计数脉冲宽度测量TIM_SlaveMode_Trigger触发信号作为计数器时钟外部时钟同步TIM_SlaveMode_External1ETR引脚上升沿计数编码器接口2. 协同配置流程
// 步骤1选择触发源
TIM_SelectInputTrigger(TIM3, TIM_TS_TI1FP1); // 使用TIM3_CH1的滤波信号// 步骤2设置从模式行为
TIM_SelectSlaveMode(TIM3, TIM_SlaveMode_Reset); // 上升沿复位CNT
四、典型应用场景与代码实现场景1精确频率测量复位模式原理信号上升沿触发CNT复位CCR直接存储周期计数值无需计算差值。
配置代码
void TIM3_FreqMeasurement_Init(void)
{// 时基配置1MHz计数频率TIM_TimeBaseInitTypeDef TIM_TimeBaseStruct;TIM_TimeBaseStruct.TIM_Period 0xFFFF;TIM_TimeBaseStruct.TIM_Prescaler 72 - 1; // 72MHz/72 1MHzTIM_TimeBaseInit(TIM3, TIM_TimeBaseStruct);// 输入捕获通道1上升沿TIM_ICInitTypeDef TIM_ICStruct;TIM_ICStruct.TIM_Channel TIM_Channel_1;TIM_ICStruct.TIM_ICPolarity TIM_ICPolarity_Rising;TIM_ICStruct.TIM_ICFilter 0x0; // 无滤波TIM_ICInit(TIM3, TIM_ICStruct);// 关键配置触发源从模式TIM_SelectInputTrigger(TIM3, TIM_TS_TI1FP1);TIM_SelectSlaveMode(TIM3, TIM_SlaveMode_Reset);TIM_Cmd(TIM3, ENABLE);
}// 读取频率单位Hz
float Get_Signal_Frequency(void) {uint16_t capture TIM_GetCapture1(TIM3);return 1000000.0f / capture; // 1MHz时钟 → 周期 capture μs
}优势避免手动计算current_capture - last_capture消除计数器溢出风险。
场景2定时器级联内部触发原理主定时器更新事件触发从定时器计数扩展定时范围。
配置代码
// TIM2为主TIM3为从
void TIM2_Master_TIM3_Slave_Init(void)
{// TIM2配置输出触发信号TIM_TimeBaseInit(TIM2, ...);TIM_SelectOutputTrigger(TIM2, TIM_TRGOSource_Update); // 更新事件触发TRGO// TIM3配置从模式TIM_TimeBaseInit(TIM3, ...);TIM_SelectInputTrigger(TIM3, TIM_TS_ITR2); // TIM2→TIM3的触发源为ITR2TIM_SelectSlaveMode(TIM3, TIM_SlaveMode_Trigger); // TRGI作为时钟
}效果TIM3的计数器在TIM2每次更新时递增实现32位定时器扩展。
场景3PWM输入模式双通道捕获原理单信号同时触发两个通道分别捕获周期CCR1和占空比CCR2。
配置代码
void TIM3_PWMI_Init(void)
{// 时基配置略// 通道1上升沿捕获周期直连TIM_ICInitTypeDef IC1 {TIM_Channel_1, TIM_ICPolarity_Rising, TIM_ICSelection_DirectTI};TIM_ICInit(TIM3, IC1);// 通道2下降沿捕获占空比交叉TIM_ICInitTypeDef IC2 {TIM_Channel_2, TIM_ICPolarity_Falling, TIM_ICSelection_IndirectTI};TIM_ICInit(TIM3, IC2);// 复位模式触发源TI1FP1TIM_SelectInputTrigger(TIM3, TIM_TS_TI1FP1);TIM_SelectSlaveMode(TIM3, TIM_SlaveMode_Reset);
}// 计算占空比
uint8_t Get_PWM_Duty(void)
{uint16_t period TIM_GetCapture1(TIM3); // 周期值uint16_t pulse TIM_GetCapture2(TIM3); // 高电平时间return (pulse * 100) / period; // 占空比%
}
五、高级技巧与注意事项1. 滤波器配置优化作用抑制信号抖动如按键抖动、噪声。配置TIM_ICInitTypeDef.TIM_ICFilter0x0~0xF值越大滤波效果越强。
TIM_ICStruct.TIM_ICFilter 0x0F; // 最大滤波16个时钟事件2. 通道与触发源限制通道依赖性TI1FP1仅支持通道1TI2FP2仅支持通道2。通道3/4不支持自动复位模式需中断手动清零CNT。ETR引脚复用需开启AFIO时钟并重映射。3. 中断协同尽管从模式可硬件自动运行但结合中断可提高实时性
// 使能更新中断
TIM_ITConfig(TIM3, TIM_IT_Update, ENABLE);
NVIC_EnableIRQ(TIM3_IRQn);// 中断服务函数
void TIM3_IRQHandler(void)
{if (TIM_GetITStatus(TIM3, TIM_IT_Update)) {// 处理捕获完成事件如计算频率TIM_ClearITPendingBit(TIM3, TIM_IT_Update);}
}
六、常见问题解答FAQQ一个定时器能否同时使用多个触发源A否一次只能选择一个触发源但可通过分时复用或组合模式实现复杂功能。Q触发源配置后无响应A检查步骤GPIO是否正确初始化为复用功能从模式是否使能TIM_SelectSlaveMode滤波器是否过度抑制信号Q如何测量非周期性信号A改用普通输入捕获模式手动记录两次捕获值差值。QETR触发时计数器不递增A确认从模式设置为TIM_SlaveMode_External1。
七、总结TIM_SelectInputTrigger()是STM32定时器主从模式的核心配置函数通过灵活选择内部事件或外部信号作为触发源配合复位/门控/触发等从模式可显著优化信号测量、定时器同步等应用的效率和精度。其关键优势在于硬件自动处理计数逻辑减轻CPU负担并提升系统可靠性。实际开发中需注意通道与触发源的匹配关系、滤波器配置及中断协同策略。