我要用测量定时器仪脉冲周期从而计算频率,计数器的时钟在72M时使用一个定时器捕获,只能测量长910us的脉冲周期, 我需要测量的脉冲宽度最大时为20MS,所以一个定时器不够用,所以我想用定时器(TIM2)作为主从模式, 当脉冲宽度超过910US时(计数器溢出)里用这溢出触发输出TRGO, 然后定时器(TIM3)作为从定时器, TIM3采用外部时钟ITR1(TIM2的TRGO)作为时钟, 现在的问题是脉冲宽度低于910US时 TIM3定时器也在计数。 定时器配置函数如下: 请前辈指导下。 void TIM_Configuration(void) { /* 定义 TIM_ICInit 初始化结构体 TIM_ICInitStructure */ TIM_ICInitTypeDef TIM_ICInitStructure; TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; /*计数器基本配置*/ TIM_TimeBaseStructure.TIM_Period = 65535; // TIM_TimeBaseStructure.TIM_Prescaler = 0; TIM_TimeBaseStructure.TIM_ClockDivision = 0; TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure); /* * 选择 TIM2 第2通道 * 捕获输入上升沿 * TIM输入2与IC2相连 * TIM 捕获在捕获输入上每探测到一个边沿执行一次 * 选择输入比较滤波器0x0 */ TIM_ICInitStructure.TIM_Channel = TIM_Channel_2; //选则通道2, TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising;//上升沿触发 TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI; //引脚对应关系 TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1; //不分屏 TIM_ICInitStructure.TIM_ICFilter = 0x0; //不虑波 TIM_PWMIConfig(TIM2, &TIM_ICInitStructure); //使用PWM输入模式 /* 选择TIM2输入触发源: TIM 经滤波定时器输入 2 */ TIM_SelectInputTrigger(TIM2, TIM_TS_TI2FP2);//IC2为触发源 /* 选择从机模式:复位模式 */ TIM_SelectSlaveMode(TIM2, TIM_SlaveMode_Reset); // /* 开启主从模式模式 */ TIM_SelectMasterSlaveMode(TIM2, TIM_MasterSlaveMode_Enable); //生成更新事件 TIM_UpdateRequestConfig(TIM2, TIM_UpdateSource_Regular); //更新事件输出触发// TIM_SelectOutputTrigger(TIM2, TIM_TRGOSource_Update); ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // TIM3 配置 从定时器, 外部时钟,(TIM2的溢出更新事件输出 // 用于转速脉冲的扩展计数。当转速低于1100转时 /*tim3 为从模式 外部时钟 TIM2 的TRG0 */ //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// TIM_TimeBaseStructure.TIM_Period = 65535; // TIM_TimeBaseStructure.TIM_Prescaler = 0; TIM_TimeBaseStructure.TIM_ClockDivision = 0; TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); TIM_SelectInputTrigger(TIM3, TIM_TS_ITR1);//ITR1触发源(定时器TIM2的TRO TIM_SelectSlaveMode(TIM3, TIM_SlaveMode_External1); //从模式外部时钟模式1 /* 使能 TIM2 TIM3计数器 */ TIM_Cmd(TIM2, ENABLE); TIM_Cmd(TIM3, ENABLE); /* 开启TIM2的CC2 中断*/ TIM_ITConfig(TIM2, TIM_IT_CC2, ENABLE); } |
RE:请教:各位前备,如何用定时计数器的溢出作为TRGO
RE:请教:各位前备,如何用定时计数器的溢出作为TRGO
回复:请教:各位前备,如何用定时计数器的溢出作为TRGO
if(TIM_GetITStatus(TIM4, TIM_IT_Update) != RESET)
{
TIM_ClearITPendingBit(TIM2, TIM_IT_Update);
ifalg++;
}
if(TIM_GetITStatus(TIM4, TIM_FLAG_CC2) != RESET)
{
TIM_ClearITPendingBit(TIM4, TIM_FLAG_CC2);
PWM_count.ut_PWM_Period = TIM_GetCapture2(TIM4);
itemp=ifalg;
ifalg=0;
}
但是我这样不知道是什么原因 程序一直在溢出中断中出不来 ,清标志位不管用 ,清不了 我能加你QQMa 我的事279125140
RE:请教:各位前备,如何用定时计数器的溢出作为TRGO 【悬赏问答】
RE:请教:各位前备,如何用定时计数器的溢出作为TRGO 【悬赏问答】
单个定时器 你不用定时器溢出 模式 用 捕获比较 模式 的精度 会高一点的
因为那样是自动装载 不用你软件处理
回复:请教:各位前备,如何用定时计数器的溢出作为TRGO 【悬赏问答】