STM32-TIM4-定时器中断

#include "project.h"
#include "timer.h"
//TIM4_Init(2000 ,72);//定时2ms
/*
	定时器中断的定时时间设定
	定时器只需要配置时钟、TIM和NVIC即可
*/
void TIM4_Init(u16 period, u16 prescaler)
{
    
    
	NVIC_InitTypeDef NVIC_InitStructure;
	TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
	
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE);		//使能TIM4时钟
	
	NVIC_InitStructure.NVIC_IRQChannel = TIM4_IRQn;				//TIM4中断
	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;	//先占优先级0级
	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;			//从优先级0级
	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;				//IRQ通道被使能
	NVIC_Init(&NVIC_InitStructure);								//根据NVIC_InitStruct中指定的参数初始化外设NVIC寄存器
	
	TIM_TimeBaseStructure.TIM_Period = period-1;				//总的值设置为0xFFFF,设定计数器自动重装值
	TIM_TimeBaseStructure.TIM_Prescaler = prescaler-1;			//预分频器
	TIM_TimeBaseStructure.TIM_ClockDivision = 0;				//设置时钟分割:TDTS = Tck_tim
	TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;	//TIM向上计数模式
	TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure);				//根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位
	
	TIM_Cmd(TIM4, ENABLE);										//开启定时器
	TIM_ITConfig(TIM4, TIM_IT_Update, ENABLE);					//开启定时器更新中断
}

//定时器4中断服务程序	 
void TIM4_IRQHandler(void)
{
    
    
	static u16 tmr200ms = 0;
	static u16 tmr1s =0;
	if(TIM_GetITStatus(TIM4, TIM_IT_Update) == SET) 			//溢出中断
	{
    
    
		TIM_ClearITPendingBit(TIM4, TIM_IT_Update);				//清除中断标志位
	
	}
}


Guess you like

Origin blog.csdn.net/weixin_43352501/article/details/103835835