偷个懒,把人家的帖子,整理下,拿来贴出来。请大家帮忙在此基础上给下指导。
//初始化+中断向量
void TIMER_Configuration(void)
{
TIM_ICInitTypeDef TIM_ICInitStructure; // 通道输入初始化结构
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; //定时器初始化结构
NVIC_InitTypeDef NVIC_InitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE);
NVIC_InitStructure.NVIC_IRQChannel = TIM4_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
TIM_TimeBaseStructure.TIM_Period =0xffff; //自动重装载寄存器的值,这个怎么设置
TIM_TimeBaseStructure.TIM_Prescaler =0; //TIM4时钟频率除数的预分频值
TIM_TimeBaseStructure.TIM_ClockDivision = 0x0; //采样分频
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //向上计数模式
TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure);
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 = 0x01; //选择输入比较滤波器,滤波设置,经历几个周期跳变认定波形稳定0x0~0xF
TIM_ICInit(TIM4, &TIM_ICInitStructure);
//TIM_PWMIConfig(TIM4, &TIM_ICInitStructure); //这个怎么用,现在是不用的?
TIM_SelectInputTrigger(TIM4, TIM_TS_TI2FP2); //还有这个,直接晕死,没有去看明白
TIM_SelectSlaveMode(TIM4, TIM_SlaveMode_Reset);
TIM_SelectMasterSlaveMode(TIM4, TIM_MasterSlaveMode_Enable);
// TIM_ITConfig(TIM2,TIM_IT_CC2,ENABLE); //这个是否不对呢?
TIM_Cmd(TIM4, ENABLE); //开启时钟
TIM_ITConfig(TIM4, TIM_IT_CC2, ENABLE);
}
//----------------------------配属中断函数
void TIM4_IRQHandler(void)
{
u8 i;
RCC_ClocksTypeDef RCC_Clocks;
RCC_GetClocksFreq(&RCC_Clocks);
GPIO_SetBits(GPIOB,GPIO_Pin_7);
TIM_ClearITPendingBit(TIM4, TIM_IT_CC2);
IC2Value = TIM_GetCapture2(TIM4); //获取捕获数值
// 测量频率呢?
} |