第一次发帖,希望尽量把问题说清楚,不要嫌我啰嗦哈。
手上有两段程序,都是关于TIME2的,对它们的TIME2时钟频率有一些疑惑。
程序1:
TIM_TimeBaseStructure.TIM_Period = 4999; // 在下一个更新事件时装入的自动重装载寄存器周期(0~0xFFFF)
TIM_TimeBaseStructure.TIM_Prescaler = 71; // 预分频值为71+1 = 72(时钟TIM2_CLK = 72MHz/72 = 1MHz)
TIM_TimeBaseStructure.TIM_ClockDivision = 0x0; // 时钟分割值
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; // 向上计数模式
TIM_TimeBaseStructure.TIM_RepetitionCounter = 0; // 每次向上溢出都产生更新事件(5ms溢出一次)
TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure); // 完成配置
程序2:(来源于半壶水基础例程)
TIM_TimeBaseStructure.TIM_Period=1; //自动重装载寄存器周期的值
TIM_TimeBaseStructure.TIM_Prescaler=0; //TIMx 时钟频率除数的预分频值
TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1; //采样分频
TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up; //向上计数模式
TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
TIM_PrescalerConfig(TIM2,36000-1,TIM_PSCReloadMode_Immediate);//时钟分频系数,定时器1ms
TIM_ARRPreloadConfig(TIM2, DISABLE);//禁止ARR预装载缓冲器
TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE);
在STM32F10xxx参考手册上,时钟树上的描述“如果APB1预分频系数=1则频率不变,否则X2”。那么在程序1中,“预分频值为71+1 = 72”,在这里预分频为什么会加上1?同样的问题出现在程序2,TIM_TimeBaseStructure.TIM_Prescaler=0,这里程序是否也是自动加1,则预分频为1,TIME2时钟频率为36MHz? |