void Timer8_Init(void)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM8, ENABLE); //時鐘使能
TIM_TimeBaseStructure.TIM_Period = (10-1); //設置自動重裝載寄存器週期值
TIM_TimeBaseStructure.TIM_Prescaler =(72-1); //設置預分頻值
TIM_TimeBaseStructure.TIM_ClockDivision = 0; //設置時鐘分割
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;//向上計數模式
TIM_TimeBaseStructure.TIM_RepetitionCounter = 0;//重複計數設置
TIM_TimeBaseInit(TIM8, &TIM_TimeBaseStructure); //參數初始化
TIM_ClearFlag(TIM8, TIM_FLAG_Update);//清中斷標誌位
TIM_ITConfig(TIM8,TIM_IT_Update, ENABLE); //|TIM_IT_Trigger
NVIC_InitStructure.NVIC_IRQChannel = TIM8_UP_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;//先佔優先級0級
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2; //從優先級0級
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
TIM_Cmd(TIM8, ENABLE); //使能TIMx外設
}
void TIM8_UP_IRQHandler(void)
{
// OSIntEnter();
if (TIM_GetITStatus(TIM8, TIM_IT_Update) != RESET)
{
TIM_ClearITPendingBit(TIM8, TIM_IT_Update);
/***/************中斷函數*****************************/
}
// OSIntExit();
}
void Timer1_Init(u16 arr,u16 psc)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE); //時鐘使能
TIM_TimeBaseStructure.TIM_Period = arr; //設置自動重裝載寄存器週期值
TIM_TimeBaseStructure.TIM_Prescaler =(psc-1);//設置預分頻值
TIM_TimeBaseStructure.TIM_ClockDivision = 0; //設置時鐘分割
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;//向上計數模式
TIM_TimeBaseStructure.TIM_RepetitionCounter = 0;//重複計數設置設置重複計算次數 達到次數後出發
TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure); //參數初始化
TIM_ClearFlag(TIM1, TIM_FLAG_Update);//清中斷標誌位
TIM_ITConfig(TIM1,TIM_IT_Update, ENABLE); //|TIM_IT_Trigger
NVIC_InitStructure.NVIC_IRQChannel = TIM1_UP_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;//先佔優先級0級
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; //從優先級0級
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
TIM_Cmd(TIM1, ENABLE); //使能TIMx外設
}
void TIM1_UP_IRQHandler(void)
{
//OSIntEnter();
if (TIM_GetITStatus(TIM1, TIM_IT_Update) != RESET)
{
TIM_ClearITPendingBit(TIM1, TIM_IT_Update);
/***********中斷服務函數***********/
}
//OSIntExit();
}
注:TIM_TimeBaseStructure.TIM_RepetitionCounter = 0;//重複計數設置設置重複計算次數 達到次數後出發 ,通用定時器與高級定時器的區別配置,重複觸發配置