STM32如何使用库函数实现TIM定时器中断。

本文旨在探讨TIM2通用定时器中断。

void Timer_Init(void)
{
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
    
    TIM_InternalClockConfig(TIM2);
    
    TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
    TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1;//分频
    TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;//计数模式
    TIM_TimeBaseInitStructure.TIM_Period = 10000 – 1;//ARR计数
    TIM_TimeBaseInitStructure.TIM_Prescaler = 7200 – 1;//PSC
    TIM_TimeBaseInitStructure.TIM_RepetitionCounter = 0;//高级定时器使用
    TIM_TimeBaseInit(TIM2, &TIM_TimeBaseInitStructure);
    
    TIM_ClearFlag(TIM2, TIM_FLAG_Update);
    TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE);
    
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);  
    NVIC_InitTypeDef NVIC_InitStructure;
    NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;//定时器通道
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
    NVIC_Init(&NVIC_InitStructure);
    
    TIM_Cmd(TIM2, ENABLE);
}

二.

void TIM2_IRQHandler(void)
{
    if(TIM_GetITStatus(TIM2, TIM_IT_Update) == SET)
    {
        cnt++;
        TIM_ClearITPendingBit(TIM2, TIM_IT_Update);
    }
}

一.初始化定时器

1.开启TIM2外设的时钟。

2.选择时钟源。当选用内部时钟源时,可不选择。

3.配置时基单元。

4.清除标志位并设置中断标志位。

5.配置NVIC。

6.使能定时器。

二.中断函数

中断函数名必须使用启动文件所给的,在判断标志位置1时,可进行中断操作,中断结束后需置0.

一.

void Timer_Init(void)
{
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
    
    TIM_InternalClockConfig(TIM2);
    
    TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
    TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1;//分频
    TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;//计数模式
    TIM_TimeBaseInitStructure.TIM_Period = 10000 – 1;//ARR计数
    TIM_TimeBaseInitStructure.TIM_Prescaler = 7200 – 1;//PSC
    TIM_TimeBaseInitStructure.TIM_RepetitionCounter = 0;//高级定时器使用
    TIM_TimeBaseInit(TIM2, &TIM_TimeBaseInitStructure);
    
    TIM_ClearFlag(TIM2, TIM_FLAG_Update);
    TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE);
    
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);  
    NVIC_InitTypeDef NVIC_InitStructure;
    NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;//定时器通道
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
    NVIC_Init(&NVIC_InitStructure);
    
    TIM_Cmd(TIM2, ENABLE);
}

二.

void TIM2_IRQHandler(void)
{
    if(TIM_GetITStatus(TIM2, TIM_IT_Update) == SET)
    {
        cnt++;
        TIM_ClearITPendingBit(TIM2, TIM_IT_Update);
    }
}

作者:赚钱娶我们家徐子酱

物联沃分享整理
物联沃-IOTWORD物联网 » STM32如何使用库函数实现TIM定时器中断。

发表回复