TIM_Period
设置了在下一个更新事件装入活动的自动重装载寄存器周期的值。它的取值必须在0x0000和 0xffff之间。
TIM_Prescaler
设置了用来作为TIMx时钟频率除数的预分频值。它的取值必须在0x0000和0xFFFF之间。
但是,在做输入捕获的时候,发现个问题。
TIM_TimeBaseStructure.TIM_Period = 0xFFFF; //这里重装值怎么是65535. 和输入捕获的频率有什么关系?
TIM_Period 作为定时器定时的周期赋值,很好理解。但是在输入捕获时(测量周期),赋值0XFFFF,是为什么呢?
TIM_PrescalerConfig(TIM2, 71, TIM_PSCReloadMode_Immediate);//为什么这里再次设置预分频??
例如以下代码:(系转载)
void TIM2_Configuration(void)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_ICInitTypeDef TIM_ICInitStructure;
// TIM2 时钟开启
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
// TIM2 时基
TIM_DeInit(TIM2);
TIM_TimeBaseStructure.TIM_Period = 0xFFFF; //这里重装值怎么是65535. 和输入捕获的频率有什么关系?
TIM_TimeBaseStructure.TIM_Prescaler = 71; //预分频值, 使TIMx_CLK=1MHz
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //输入时钟不分频
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //向上计数
TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure); //TIM2_TimeBase
/* Prescaler configuration */
TIM_PrescalerConfig(TIM2, 71, TIM_PSCReloadMode_Immediate);//为什么这里再次设置预分频
// TIM2 输入捕捉 配置
TIM_ICInitStructure.TIM_ICMode = TIM_ICMode_ICAP; //输入捕捉方式
TIM_ICInitStructure.TIM_Channel = TIM_Channel_4; //输入通道
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_ICInit(TIM2, &TIM_ICInitStructure); //TIM2_ICInit
// TIM2 开启
TIM_Cmd(TIM2, ENABLE);
// TIM2 CC4 中断允许
TIM_ITConfig(TIM2, TIM_IT_CC4, ENABLE);
}
// 同时调用两个中断吗? 一个溢出,一个定时,晕哦。看不懂啦。。。。。。。。。。。。。
void TIM1_UP_IRQHandler(void)//溢出中断
{
TIM_ClearITPendingBit(TIM1,TIM_FLAG_Update); //清中断
OV_count++;
}
void TIM1_CC_IRQHandler(void) //定时中断
{
//捕获处理
if(TIM_GetITStatus(TIM1,TIM_IT_CC1)!=RESET)
{
TIM_ClearITPendingBit(TIM1,TIM_IT_CC1);
if(1==cap_count) //捕获频率
{
OV_count=0;
old_cap=TIM_GetCapture1(TIM1);
}
else if(cap_count>10)
{
new_cap=TIM_GetCapture1(TIM1);
cap_diff=new_cap-old_cap+65535*OV_count;
freq_1array[fre_1count++]=720000000.0/cap_diff;//这里72000000*10是对10次捕获求平均值
cap_count=0;
OV_count=0;
}
cap_count++;
}
}