void Timer_Configuration(void)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_OCInitTypeDef TIM_OCInitStructure;
TIM_ICInitTypeDef TIM_ICInitStructure; //通道输入初始化结构
/*******************************检测方波的频率************************************/
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE); //打开TIM2外设时钟
TIM_DeInit(TIM2);
TIM_TimeBaseStructure.TIM_Period = 0xffff;
TIM_TimeBaseStructure.TIM_Prescaler = 72-1; // 72分频
TIM_TimeBaseStructure.TIM_ClockDivision = 0;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit( TIM2, &TIM_TimeBaseStructure );
TIM_ICInitStructure.TIM_Channel = TIM_Channel_2; //T2_Ch2
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 = 0x2;
TIM_PWMIConfig(TIM2, &TIM_ICInitStructure);
TIM_SelectInputTrigger(TIM2, TIM_TS_TI2FP2); //TIM2经滤波定时器输入2
TIM_SelectSlaveMode(TIM2, TIM_SlaveMode_Reset);//选中触发信号(TRGI)的上升沿重初始化计数器并触发寄存器的更新
TIM_SelectMasterSlaveMode(TIM2, TIM_MasterSlaveMode_Enable);
TIM_ITConfig(TIM2, TIM_IT_CC2, ENABLE);
TIM_Cmd(TIM2, ENABLE);
/***********************产生脉冲信号******************************/
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE); //打开TIM3外设时钟
TIM_DeInit(TIM3);
TIM_TimeBaseStructure.TIM_Period=1406; //自动重装载寄存器的值
TIM_TimeBaseStructure.TIM_Prescaler= (4 - 1); //时钟预分频数4 (这里的时钟在RCC设置里为72M)
TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1; //采样分频
TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);
TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM1;
TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;
TIM_OCInitStructure.TIM_Pulse=180;
TIM_OC4Init(TIM3,&TIM_OCInitStructure);
TIM_OC4PreloadConfig(TIM3,TIM_OCPreload_Enable);
TIM_ARRPreloadConfig(TIM3,ENABLE);
TIM_Cmd(TIM3, ENABLE);
}
程序附上,我的TIM3没用中断,TIM2用中断的,总之两个放一起频率就测不准,分开来就是好的,好纠结啊,求高手帮忙解答下
|