玩了一段时间STM32,没有经过系统学习,对这个定时器定时时间计算理解很懵懂! 如下面定时器初始化代码
void timer7_init(u16 clock,u16 Preiod)//void timer7_init(84,5000)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM7,ENABLE);
TIM_DeInit(TIM7);
/*TIM_Period=自动装载值,TIM_Prescaler=预分频值*/
TIM_TimeBaseStructure.TIM_Period = Preiod - 1; //5000定时器预分频器
TIM_TimeBaseStructure.TIM_Prescaler = clock - 1; //84 预分频值
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //时钟频率不分频
/*TIM_CounterMode:定时器计数方式,可为向上计数、向下计数以及中心对齐模式*/
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM7,&TIM_TimeBaseStructure);
TIM_ClearFlag(TIM7,TIM_FLAG_Update);
TIM_ITConfig(TIM7,TIM_IT_Update,ENABLE);
TIM_Cmd(TIM7,ENABLE);
}
TIM_Period=自动装载值 TIM_Prescaler=预分频值 定时时间计算: 定时时间=(TIM_Period)X(TIM_Prescaler)/Timer clocks(定时器时钟频率) 假如:TIM_Period=5000,TIM_Prescaler=84,Timer clocks=84Mhz (5000X84)/84=5000us=5ms 对定时器时间设定可以理解为: 假如你需要定时1MS,TIM_Period(自动装载值)设定为1000,也就是1000us, TIM_Prescaler(预分频值)设定与Timer clocks(定时器时钟频率)相同就行,比如 定时器时钟频率是84,TIM_Prescaler(预分频值)设定为84就行。
|