STM32 之定时时间计算

 

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





你可能感兴趣的:(STM32 之定时时间计算)