有篇**上这么说:
TIM_TimeBaseStructure.TIM_Period=2000;
//ARR的值
TIM_TimeBaseStructure.TIM_Prescaler=0;
TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1; //采样分频
TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up; //向上计数模式
TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
TIM_PrescalerConfig(TIM2,0x8C9F,TIM_PSCReloadMode_Immediate);//时钟分频系数36000,所以定时器时钟为2K
TIM_ARRPreloadConfig(TIM2, DISABLE);//禁止ARR预装载缓冲器
TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE);
TIM_Cmd(TIM2, ENABLE);
//开启时钟
解释一下,首先得配好ARR,这是必须地。然后配置预分频,为什么我先配为0再用TIM_PrescalerConfig(TIM2,0x8C9F,TIM_PSCReloadMode_Immediate)配呢,原来PSC也有个预装载功能,却不像ARR和CRR那样有相关的位控制立即装载或更新事件装载。也就是说只能更新事件来装载。在上面函数中手工产生了一个更新事件,使PSC立刻生效。
但我发现很多程序对PSC没有先配0再更新,而是只写一次要加载的值就完事儿。到底哪种方法是对的? |