以下源码以定时器3为例,其他可以以此类推
.c文件
- #include "Time.h"
- void TIM3_Int_Init(uint32_t time_us)
- {
- TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
- NVIC_InitTypeDef NVIC_InitStructure;
- unsigned char prescaler = 1;
- unsigned char clkDiv = 1;//根据“TIM_ClockDivision”的分频比来定
- unsigned long period = time_us*(SystemCoreClock/1000000) / (prescaler * clkDiv);
- RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
- TIM_TimeBaseStructure.TIM_Period = period;
- TIM_TimeBaseStructure.TIM_Prescaler = prescaler - 1; //时钟再分频,会影响TIM_Period的效果
- TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1; //时钟分频,会影响PWM的计数个数
- TIM_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_IRQChannelCmd=ENABLE;
- NVIC_InitStructure.NVIC_IRQChannelPriority=1;
- NVIC_Init(&NVIC_InitStructure);
- TIM_Cmd(TIM3, ENABLE);
- }
- void TIM3_IRQHandler(void) //TIM3中断
- {
- if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET) //检查TIM3更新中断发生与否
- {
-
- TIM_ClearITPendingBit(TIM3, TIM_IT_Update); //清除TIMx更新中断标志
- }
- }
复制代码
.h文件
- #ifndef _TIME_H
- #define _TIME_H
- #include "stm32f0xx.h"
- void TIM3_Int_Init(uint32_t time_us);
- #endif
复制代码
|