STM32CubeMX应用 -- 定时器中断

目录

参考链接

一、实现过程

二、STM32CubeMX配置示例

三、C语言示例程序


参考链接

https://blog.csdn.net/m0_37845735/article/details/105395643

 

一、实现过程

  • 选择要使用的通用定时器(TIM2~TIM5),选择计时器的时钟源为内部时钟(CK_INT)
  • 根据要定时的时间计算预分频系数(TIMx_PSC)、自动重装载值(TIMx_ARR)、内部时钟的分频系数,并配置相应的寄存器。定时时间计算公式为:Tout(溢出时间)=(ARR+1)(PSC+1)/Tclk。Tclk时钟计算方法如下:

STM32CubeMX应用 -- 定时器中断_第1张图片

  • 配置计数器的计数模式(向上、向下、中央对齐),重装载使能,计数溢出后是否中断及中断优先级配置

 

二、STM32CubeMX配置示例

STM32CubeMX应用 -- 定时器中断_第2张图片

三、C语言示例程序

我配置的是  定时器2   1S 定时,使能了计数更新中断,使用的是LL库

/*
  TIM2用作湿度传感器定时1S,计算频率
  溢出时间 = (Autoreload + 1) * (Prescaler + 1)/TCCLK72M 
*/
void MX_TIM2_Init(void)
{
    LL_TIM_InitTypeDef TIM_InitStruct;

    /* Peripheral clock enable */
    LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_TIM2);

    TIM_InitStruct.Prescaler         = 9999;
    TIM_InitStruct.CounterMode       = LL_TIM_COUNTERMODE_UP;
    TIM_InitStruct.Autoreload        = 7199;
    TIM_InitStruct.ClockDivision     = LL_TIM_CLOCKDIVISION_DIV1;
    TIM_InitStruct.RepetitionCounter = 0;  //重复计数器
    LL_TIM_Init(TIM2, &TIM_InitStruct);
    LL_TIM_EnableARRPreload(TIM2);   //使能自动重装载预装载,ARR寄存器有缓冲区

    LL_TIM_SetClockSource  (TIM2, LL_TIM_CLOCKSOURCE_INTERNAL);
    LL_TIM_SetTriggerOutput(TIM2, LL_TIM_TRGO_RESET);
    LL_TIM_DisableMasterSlaveMode(TIM2);
    
    /* TIM2 interrupt Init */
    NVIC_EnableIRQ(TIM2_IRQn);
    
    LL_TIM_EnableIT_UPDATE (TIM2);//使能更新中断
    LL_TIM_ClearFlag_UPDATE(TIM2);
    LL_TIM_EnableCounter   (TIM2);
}

 

你可能感兴趣的:(STM32,C/C++)