STM32通用定时器配置

来源:互联网 发布:小猪cms9.0源码 编辑:程序博客网 时间:2024/05/05 06:43

这里主要介绍通用定时器的配置,主要针对TIM2来说明,其他的类似。整个配置过程主要由三部分组成:

1、定时器参数配置,打开对应时钟,设置定时时间,计数方式,清除标志位。

      需要注意的是掌握如何设置定时的时间,设置时间=((1+TIM_Period )/ 72M)* TIM_Period 

     例如需要设置1s,((1+35999)/ 72M)*2000 = 1000ms=1s

void Timer_Configuration(void)
{
    TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;


  RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);


TIM_DeInit(TIM2);
TIM_TimeBaseStructure.TIM_Period = 2000;
TIM_TimeBaseStructure.TIM_Prescaler =35999; 
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; 
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);


TIM_ClearFlag(TIM2, TIM_IT_Update);
TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE );
TIM_Cmd(TIM2, ENABLE);  //使能TIM2外设
}


2、设置中断优先级

void Timer_NVIC_Configuration(void)
{
  NVIC_InitTypeDef NVIC_InitStructure; 
  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);           //抢占式优先级别设置为无抢占优先级




  NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;          //指定中断源
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;        //指定响应优先级别1
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;        //使能外部中断通道
  NVIC_Init(&NVIC_InitStructure);
   
}


3、编写定时器中断处理函数

void TIM2_IRQHandler(void)
{
  if(TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET) 
    {
   TIM_ClearITPendingBit(TIM2, TIM_IT_Update);


        //添加中断处理程序  
count++;
   if(count>=60)
  count=0;
printf("count=%d\n", count); 
     }

}


4、实物图

      

0 0