定时器中断

来源:互联网 发布:盆腔炎导致不孕 知乎 编辑:程序博客网 时间:2024/04/29 04:46
系统初始化的时候在默认的系统初始化函数 SystemInit 函数里面已经初始化 APB1 的时钟为 2 分频,

所以 APB1 的时钟为 36M。当 APB1 的时钟分频数为 1 的时候,TIM2~7 的时钟为 APB1 的时钟,而如果 APB1 的时钟分频数不为 1,那么 TIM2~7 的时钟频率将为 APB1 时钟的两倍。因此, TIM3 的时钟为 72M。

Tout= ((arr+1)*(psc+1))/Tclk;
其中:
Tclk:TIM3 的输入时钟频率(单位为 Mhz)。
Tout:TIM3 溢出时间(单位为 us)。
TIM1 & TIM8为高级定时器,挂载在APB2上。
下面以TIM3为例讲诉库函数下定时器中断的配置。


void TIM3_Init(u16 arr,u16 psc)  //arr重载计数周期 psc分频系数{TIM_TimeBaseInitTypeDef   TIM_TimeBaseStructure;NVIC_InitTypeDef NVIC_InitStructure;RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); TIM_TimeBaseStructure.TIM_Period = arr;    TIM_TimeBaseStructure.TIM_Prescaler =psc;  TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; IM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;    //计数模式向上计数TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE );   //使能TIM3外设//中断优先级配置NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 3;//抢占优先级3  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;//响应优先级1  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;  NVIC_Init(&NVIC_InitStructure); TIM_Cmd(TIM3, ENABLE);  //使能中断}void TIM3_IRQHandler(void)    //中断服务函数{if(TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET) //判断中断使能和标志位{TIM_ClearITPendingBit(TIM3, TIM_IT_Update   );   //清除标志位LED1=!LED1;}}

TIM_GetITStatus 函数中会先判断这种中断是否使能,使能了才去判断中断标志位,而TIM_GetFlagStatus 直接用来判断状态标志位。
在main函数中调用TIM3_Init(4999,7199);
Tout= ((4999+1)*( 7199+1))/72=500000us=500ms。
所以TIM3溢出时间周期为500ms。
0 0
原创粉丝点击