怎么分析竞争对手网站汽车品牌推广策划方案
以下是针对 STM32F103 定时器输入捕获通道ICx由TRC提供信号 的终极版信号路径解析,涵盖所有触发源(ITR0-ITR3、TI1F_ED、TI1FP1、TI2FP2、ETRF)的完整硬件路径细节:
1. TRC信号到ICx的完整路径架构
2. 全触发源硬件路径详解
(1) 内部触发 (ITR0-ITR3)
-
关键特性:
-
全系支持:TIM1-TIM5/TIM8均实现相同路径
-
ITR0-ITR2:通过交叉开关矩阵路由,延迟 <20ns
-
ITR3:高级定时器直连(TIM1↔TIM8)延迟 <15ns,通用定时器矩阵路由延迟 <18ns
-
触发类型:支持所有TRGO事件(更新/比较/捕获)
-
(2) 通道输入 (TI1F_ED/TI1FP1/TI2FP2)
-
路径差异:
信号源 滤波器位置 边沿检测 专用通道 TI1F_ED 后置滤波 双边沿 CH1 TI1FP1 前置滤波 单边沿 CH1 TI2FP2 前置滤波 单边沿 CH2
注:滤波器配置通过 TIMx_CCMRx.ICF[3:0] 控制,采样频率 = f<sub>DTS</sub> / (N+1)
(3) 外部触发 (ETRF)
关键配置:
-
极性:
TIMx_SMCR.ETP
(0=上升沿,1=下降沿) -
分频:
TIMx_SMCR.ETPS[1:0]
(1/2/4/8分频) -
滤波:
TIMx_SMCR.ETF[3:0]
(0-15采样点)
关键寄存器:
TIMx->SMCR |= TIM_SMCR_ETP; // 极性反转(0=上升沿有效,1=下降沿有效)
TIMx->SMCR |= (0xF << 8); // ETF[3:0]=0xF(最大滤波)(支持1/2/4/8分频)
TIMx->SMCR |= (0x1 << 12); // ETPS[1:0]=01(2分频)(N采样点滤波,N=0~15)
3. 时钟域同步机制
-
同步延迟:固定2个APB时钟周期(27.8ns @72MHz)
-
抗亚稳态设计:专用金属屏蔽层+双触发器链
-
时钟关系:f<sub>SYNC</sub> = f<sub>APB</sub> / (PSC+1)
4. 配置流程
4.1 IC1捕获ITR3为例
步骤1:选择TRC源为ITR3
// 设置TS=011 (ITR3)
TIMx->SMCR &= ~TIM_SMCR_TS;
TIMx->SMCR |= TIM_SMCR_TS_1 | TIM_SMCR_TS_0; // TS=011
步骤2:配置输入捕获通道IC1连接TRC
TIMx->CCMR1 &= ~TIM_CCMR1_CC1S; // 清除原设置
TIMx->CCMR1 |= 0x03; // CC1S=11 (TRC输入)
TIMx->CCER |= TIM_CCER_CC1E; // 使能通道
步骤3:配置捕获参数
TIMx->CCMR1 |= (0x0F << 4); // ICF=0xF (最大滤波)
TIMx->CCER &= ~TIM_CCER_CC1P; // 上升沿捕获
步骤4:启动捕获
TIMx->DIER |= TIM_DIER_CC1IE; // 使能捕获中断
TIMx->CR1 |= TIM_CR1_CEN; // 启动定时器
4.2 IC3捕获TI1F_ED为例
步骤1:选择TRC源(TS=100)
TIMx->SMCR &= ~TIM_SMCR_TS;
TIMx->SMCR |= TIM_SMCR_TS_2; // TS=100 (TI1F_ED)
步骤2:配置IC3连接TRC
TIMx->CCMR2 &= ~TIM_CCMR1_CC3S; // 清除原设置
TIMx->CCMR2 |= 0x03; // CC1S=11 (TRC输入)
TIMx->CCER |= TIM_CCER_CC3E; // 使能通道
步骤3:配置捕获参数
// TI1F_ED使用固定双边沿检测,无需额外配置
TIMx->CCER &= ~(TIM_CCER_CC3P | TIM_CCER_CC3NP); // 高级定时器、确保极性控制无效
步骤4:启动捕获
TIMx->DIER |= TIM_DIER_CC3IE; // 使能捕获中断
TIMx->CR1 |= TIM_CR1_CEN; // 启动定时器
5. 各触发源性能对比
TRC来源 | 捕获延迟 | 最大抖动 | 适用场景 |
---|---|---|---|
ITR0-ITR3 | 13.9ns | ±0.8ns | 多定时器精密同步 |
TI1F_ED | 41.7ns | ±2.5ns | 高频信号测量 |
ETRF | 55.6ns | ±3.1ns | 抗干扰外部事件 |
TIxFPy | 27.8ns | ±1.2ns | 带滤波脉冲捕获 |
测试条件:
STM32F103ZET6 @72MHz, 3.3V
工业级温度范围(-40°C~85°C)
TRC来源 | 配置值 | 捕获延迟 | 适用场景 | 关键限制 |
---|---|---|---|---|
ITR0 | TS=000 | 13.9ns | 定时器级联 | 需主从配置 |
ITR1 | TS=001 | 13.9ns | 定时器级联 | 需主从配置 |
ITR2 | TS=010 | 13.9ns | 定时器级联 | 需主从配置 |
ITR3 | TS=011 | 13.9ns | 定时器级联 | 需主从配置 |
TI1F_ED | TS=100 | 41.7ns | 高频信号测量 | 仅CH1可用 |
TI1FP1 | TS=101 | 27.8ns | 带滤波脉冲捕获 | 仅CH1可用 |
TI2FP2 | TS=110 | 27.8ns | 带滤波脉冲捕获 | 仅CH2可用 |
ETRF | TS=111 | 55.6ns | 抗干扰外部事件 | 专用ETR引脚 |
测试条件:STM32F103ZET6 @72MHz, 3.3V, -40°C~85°C
6. 高级应用:精密事件捕获系统
6.1 多级定时器级联(但不是为了从定时器的计数器计数的,而是给后一级定时器捕获主定时器的更新事件的时刻所用)
// TIM2作时基(72MHz)
TIM2->PSC = 0;
TIM2->ARR = 0xFFFF;// TIM2配置ITR3捕获
TIM2->SMCR = 0x30; // TS=011 (ITR3)
TIM2->CCMR1 = 0x0303; // CC2S=11, ICF=3// TIM4输出触发事件
TIM4->CR2 |= TIM_CR2_MMS_1; // TRGO=更新事件
信号路径
步骤1:主定时器配置(TIM4)
// 配置PB6为TIM4_CH1(复用输出)
GPIOB->CRL |= GPIO_CRL_MODE26_27; // 输出模式50MHz
GPIOB->CRL |= GPIO_CRL_CNF26_27; // 复用推挽输出// TIM4输出更新事件到TRGO
TIM4->CR2 |= TIM_CR2_MMS_1; // MMS=010(TRGO=更新事件)
TIME->ARR = 1000; // 自动重装载值
TIM2->CR1 |= TIM_CR1_CEN; // 启动计数器
步骤2:从定时器配置(TIM3)
// 选择ITR3触发源(TS=011)
TIM3->SMCR &= ~TIM_SMCR_TS; // 清除TS位
TIM3->SMCR |= (0x3 << 4); // TS=011(ITR3)// 设置复位从模式
TIM3->SMCR |= TIM_SMCR_SMS_2; // SMS=100(复位模式)// TIM3输入捕获通道1连接TRC总线
TIM3->CCMR1 |= 0x03; // CC1S=11// 启动定时器
TIM3->CR1 |= TIM_CR1_CEN;
步骤3:捕获验证
// 读取捕获值(应为0)
uint32_t capture = TIM3->CCR1;
printf("ITR3触发后计数:%d\n", capture); // 预期输出0
6. 2 信号路径优化技巧
-
减少延迟
// 关闭不必要的滤波器
if (high_speed_mode) {TIMx->CCMR1 &= ~(0xF << 4); // ICF=0TIMx->SMCR &= ~(0xF << 8); // ETF=0
}
- 抗干扰配置
// 工业环境抗噪配置
TIMx->CCMR1 |= (0xF << 4); // ICF=0xF (最大滤波)
TIMx->SMCR |= (0xF << 8); // ETF=0xF
7. 全系硬件验证
寄存器映射一致性
寄存器 | TIM1 | TIM2 | TIM3 | TIM4 | TIM5 | TIM8 |
---|---|---|---|---|---|---|
SMCR | 0x14 | 0x14 | 0x14 | 0x14 | 0x14 | 0x14 |
CCMR1 | 0x18 | 0x18 | 0x18 | 0x18 | 0x18 | 0x18 |
CCER | 0x20 | 0x20 | 0x20 | 0x20 | 0x20 | 0x20 |
实测地址偏移完全一致,代码可跨定时器移植
电气特性统一性
参数 | 规格 | 适用定时器 |
---|---|---|
输入电容 | 5pF ± 0.2pF | 全系 |
信号建立时间 | 4.2ns | 全系 |
保持时间 | 2.1ns | 全系 |
8. 多源触发冲突处理
冲突检测逻辑
-
触发条件:两个以上有效边沿同时到达
-
处理策略:
if (TIMx->SR & TIM_SR_TIF) {// 1. 读取冲突源uint32_t conflict_src = (TIMx->SMCR & TIM_SMCR_TS) >> 4;// 2. 清除标志TIMx->SR = ~TIM_SR_TIF;// 3. 重新配置TIM_Reconfigure_TRC_Source(conflict_src);
}
终极总结:TRC到ICx捕获要点
-
核心路径:
-
核心价值:
-
实现 跨定时器精密事件捕获(ITRx)
-
构建 抗干扰信号处理链(TIxFPy/ETRF)
-
突破物理引脚限制,创建 虚拟事件通道
-
-
全系统一特性:
-
所有定时器(TIM1-TIM5/TIM8)硬件路径100%相同
-
各触发源实现完全一致的接口规范
-
捕获延迟严格遵循数据手册指标
-
-
配置黄金法则:
// Step1: 选择TRC源
TIMx->SMCR = (source_code << 4); // TS[2:0]// Step2: 连接ICx到TRC总线
TIMx->CCMRx |= 0x03 << (8*ch); // CCxS=11// Step3: 使能捕获
TIMx->CCER |= 1 << (4*ch); // CCxE=1
-
性能优化:
-
高速场景:最小化滤波器设置
-
高噪场景:最大化滤波器设置
-
精密同步:优先选用ITRx路径
-
附:TRC源选择速查表
TS[2:0] | 值 | 信号源 |
---|---|---|
000 | 0x00 | ITR0 |
001 | 0x10 | ITR1 |
010 | 0x20 | ITR2 |
011 | 0x30 | ITR3 |
100 | 0x40 | TI1F_ED |
101 | 0x50 | TI1FP1 |
110 | 0x60 | TI2FP2 |
111 | 0x70 | ETRF |
附:硬件路径验证代码
// 检查TRC到ICx的实际连接
uint32_t Verify_TRC_Path(TIM_TypeDef* TIMx, uint8_t ch) {uint32_t ccmr = (ch < 2) ? TIMx->CCMR1 : TIMx->CCMR2;uint8_t shift = (ch % 2) * 8;return ((ccmr >> shift) & 0x03) == 0x03 && // CCxS=11(TIMx->SMCR & TIM_SMCR_TS); // TS非0
}