新手入门
- 积分
- 21
- 金钱
- 21
- 注册时间
- 2016-6-4
- 在线时间
- 5 小时
|

楼主 |
发表于 2016-6-4 10:11:37
|
显示全部楼层
/*TIM5通道2用于输入捕获*/
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM5, ENABLE);
TIM_TimeBaseStructure.TIM_Period = 0xffffffff;
TIM_TimeBaseStructure.TIM_Prescaler = 3; //捕获频率21M ,T=47.61904762ns
TIM_TimeBaseStructure.TIM_ClockDivision = 0;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM5, &TIM_TimeBaseStructure);
TIM_ICInitStructure.TIM_Channel = TIM_Channel_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 = 0x00;
TIM_PWMIConfig(TIM5, &TIM_ICInitStructure); //PWM输入模式
TIM_SelectInputTrigger(TIM5, TIM_TS_TI2FP2);
TIM_SelectSlaveMode(TIM5, TIM_SlaveMode_Reset); //主从复位模式
TIM_SelectMasterSlaveMode(TIM5,TIM_MasterSlaveMode_Enable);
NVIC_InitStructure.NVIC_IRQChannel = TIM5_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; //周期测量中断优先级高于闸门中断
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
TIM_ITConfig(TIM5, TIM_IT_CC2, ENABLE); //开周期测量中断
我打算测外部脉冲信号的周期和占空比。上面是我寄存器的配置。这样配置的话,是不是应该是IC2捕获到第二个上升沿的时候进入中断?
下面是我中断程序,变量都是double型,脉冲信号到1M以上就测不了了
void TIM5_IRQHandler(void)
{
if (TIM_GetITStatus(TIM5, TIM_IT_CC2) != RESET)
{
TIM_ClearITPendingBit(TIM5, TIM_IT_CC2);
PulseLength = ( TIM_GetCapture1(TIM5) + 1 ) * 47.6190476; //高电平时间,单位ns
Period2 = ( TIM_GetCapture2(TIM5) + 1) * 47.6190476; //周期,单位ns
DutyCycle = PulseLength/Period2 * 100; //占空比
}
} |
|