STM32
直播中

康大争

7年用户 2208经验值
私信 关注
[问答]

使用TIM2的基本定时器功能配置过程是怎样的

STM32定时器分为哪几类?

使用tiM2的基本定时器功能配置过程是怎样的?

回帖(1)

张嘉

2021-11-23 15:20:58
  定时器分类
  1,基本定时器TIM6、TIM7;计时,能产生中断,没有输入输出引脚;
  2,通用计时器TIM2、TIM3/TIM4/TIM5;计时、中断、比较/捕获,PWM方波输出,编码器接口;
  3,高级定时器TIM1、TIM8;上面都具有,还具有三相6步电机的接口、刹车功能以及用于PWM驱动电路的四驱时间控制。
  时钟源
  TIM2-TIM7的时钟源是APB1
  TIM1、TIM8的时钟源是APB2
  应用代码
  使用TIM2的基本定时器功能,配置过程
  1、配置TIM2,打开时钟,重装载值设置(周期),时钟分频器,计数方式,使能中断
  void TIM2_Configuration(void)
  {
  TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2 , ENABLE); /* 打开时钟 72MHZ */
  TIM_TimeBaseStructure.TIM_Period=1000;/* 重装载值*/
  TIM_TimeBaseStructure.TIM_Prescaler= 71; /*时钟预分频数72,也就是本来72M,现在是1M */
  TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;/* 对外部时钟进行采样的时钟频率,这里没有用到 */
  TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up; //向上计数
  TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);//设置TIM2参数
  TIM_ClearFlag(TIM2, TIM_FLAG_Update);//清除标志位
  TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE);//使能中断
  TIM_Cmd(TIM2, ENABLE);//使能定时器
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2 , DISABLE); /*先关闭,等待使用*/
  }
  接下来配置中断优先级
  void TIM2_NVIC_Configuration(void)
  {
  NVIC_InitTypeDef NVIC_InitStructure;
  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0); //无主优先级,次优先级为16个
  NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn; //指定中断服务函数
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; //这里0-15都可以
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStructure);
  }
  接下来写中断服务函数
  extern volatile u32 time; //volatile 是修饰字符,不用优化
  void TIM2_IRQHandler(void)
  {
  if ( TIM_GetITStatus(TIM2 , TIM_IT_Update) != RESET )
  {
  time++;
  TIM_ClearITPendingBit(TIM2 , TIM_FLAG_Update);
  }
  }
  主函数的循环
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2 , ENABLE);//打开时钟开始计数
  while(1)
  {
  if ( time == 1000 ) /* 1000 * 1 ms = 1s 周期,中断1000次,中断中期为1/1M = 1ms */
  {
  time = 0;
  //做自己的事
  }
  }
举报

更多回帖

发帖
×
20
完善资料,
赚取积分