初中生
最后登录1970-1-1
在线时间 小时
注册时间2016-8-4
|
经常配置定时器的时候会碰到以下类似的代码:
- RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); /
- /* Time Base configuration */
- TIM_TimeBaseStructure.TIM_Prescaler = 7199;
- TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
- TIM_TimeBaseStructure.TIM_Period = 9999;//
- TIM_TimeBaseStructure.TIM_ClockDivision = 0;
- TIM_TimeBaseStructure.TIM_RepetitionCounter = 0;
- TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure); //
复制代码
像 TIM_TimeBaseStructure.TIM_Prescaler = 7199; 普遍的解释就是时钟频率 = 72/(时钟分频+1)
这个72MHz的由来,通过查手册的时钟树图可知当系统时钟 为72MHz时APB1由于频率上限为36MHz,因此必须2分频往上走了,
也就是 满足 if (APB1 prescaler) = 1 x1
else x2
中的倍频条件了,因此定时器的的时钟频率最大值也就为72MHz
对此我产生的疑惑就是 APB1的prescaler 与TIM的prescaler 两个我有点不好理解, TIM的减了个 1 ,那么APB1 为什么不减1呢?
我理解起来有点不怎么通畅
希望有同学能给我解释下,谢谢!
|
|