欢迎光临散文网 会员登陆 & 注册

江科大学习笔记 _4.定时器中断配置

2023-06-09 12:38 作者:自闭选手的Z23  | 我要投稿


 


内部时钟计数:

1. RCC时钟开启

Timer2挂载在APB1总线上

RCC_APB1PeriphClockCmd(RCC_APB1ENR_TIM2EN, ENABLE);

 

2. 选择时基单元的时钟源

TIM_InternalClockConfig(TIM2);

//Configures the TIMx internal Clock  使用内部时钟源

如果不调用这个函数,使用的也是内部时钟

 

3. 配置时基单元

    TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct;

    TIM_TimeBaseInitStruct.TIM_ClockDivision = TIM_CKD_DIV1;//滤波分频

    TIM_TimeBaseInitStruct.TIM_CounterMode = TIM_CounterMode_Up;

    TIM_TimeBaseInitStruct.TIM_Period = 10000 - 1;

    TIM_TimeBaseInitStruct.TIM_Prescaler = 7200 - 1;

    TIM_TimeBaseInitStruct.TIM_RepetitionCounter = 0;

TIM_TimeBaseInit(TIM2, &TIM_TimeBaseInitStruct);

 

 TIM_ClearFlag(TIM2, TIM_FLAG_Update);//防止初始化完就进中断的问题

 

4. 配置输出中断控制,允许更新中断到输出NVIC

TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE);

 

 

5. 配置NVIC,打开定时器同通道,优先级

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);

    

    NVIC_InitTypeDef NVIC_InitStruct;

    NVIC_InitStruct.NVIC_IRQChannel =  TIM2_IRQn;

    NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;

    NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 2;

    NVIC_InitStruct.NVIC_IRQChannelSubPriority = 1;

NVIC_Init(&NVIC_InitStruct);

 

6. 运行控制

TIM_Cmd(TIM2,ENABLE);

 

 

中断服务函数

void TIM2_IRQHandler(void)

{

    

    if(TIM_GetITStatus(TIM2, TIM_IT_Update) == SET)

    {

        

        Num++;

        

        TIM_ClearITPendingBit(TIM2, TIM_IT_Update);

    }

}

 

 

 

 

 

 

 

 

 

 

 

 

 

 


江科大学习笔记 _4.定时器中断配置的评论 (共 条)

分享到微博请遵守国家法律