STM32 之定时时间计算
时间: 2015-07-15来源:OSCHINA
前景提要
void Time_Init(void) { TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_DeInit(TIM3); //复位TIM3定时器 TIM_TimeBaseStructure.TIM_Period =7999; //设置自动重装载寄存器锁存值,1ms溢出 TIM_TimeBaseStructure.TIM_Prescaler = 799800; //9分频 TIM_TimeBaseStructure.TIM_ClockDivision = 0x0; //时钟分频因子 TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //计数器向上计数模式 TIM_TimeBaseInit(TIM3,&TIM_TimeBaseStructure); //写TIM3各寄存器参数 TIM_ClearFlag(TIM3,TIM_FLAG_Update); //清除TIM3的标志位 TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE); //使能TIM中断 TIM_Cmd(TIM3,ENABLE); //使能TIM外设 }
以上为stm32定时器设置代码
TIM_Period
TIM_Period 设置了在下一个更新事件装入活动的 自动重装载寄存器周期的值 。它的取值必须在 0x0000 和
0xFFFF 之间。
TIM_Prescaler
TIM_Prescaler 设置了用来作为 TIMx 时钟频率除数的 预分频值 。它的取值必须在 0x0000 和 0xFFFF 之间

首先设置预分频值,
Td = Ti / ( TIM_Prescaler + 1 )
Td 定时器的计数频率
Ti 内部时钟源频率(APB1的倍频器送出时钟)
TIM_Prescaler 用户设定的预分频系数,取值范围0~65535。

例如:RCC中AHB=72MHZ、APB1=36MHZ、APB2=72MHZ,则CK_INT=72MKZ。
假如用的是 TIM3 TIM3属于APB1 则 Ti=36MHZ 取TIM_Prescaler=7199
则 Td = 36Mhz / 7200 = 5000hz 故 则定时器的计数周期=1/5000HZ=0.2ms
则如果想定时1s TIM_Period = 5000
5000 * 0.2 ms = 1s






科技资讯:

科技学院:

科技百科:

科技书籍:

网站大全:

软件大全:

热门排行