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);
}
此帖出自
小平头技术问答
一周热门 更多>