TIM通用定時器(一)計數器模式
1. 向上計數模式
2. 向下計數模式
3.. 中央對齊模式(向上/向下計數) 在中央對齊模式,計數器從0開始計數到自動載入的值(TIMx_ARR暫存器)−1,產生一個計數器溢位事件,然後向下計數到1並且產生一個計數器下溢事件;然後再從0開始重新計數。
1. 時鐘配置
RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);
2. 中斷向量NVIC配置:中斷允許和優先順序
NVIC_InitStructure.NVIC_IRQChannel = TIM1_UP_IRQn ; //更新事件
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; //搶佔優先順序0
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; //響應優先順序1
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //允許中斷
NVIC_Init(&NVIC_InitStructure); //寫入設定
3. TIM 計數器配置函式
void TIM_Configuration(void)
{
TIM_TimeBaseInitTypeDef TIM_BaseInitStructure;
//TIM1 使用內部時鐘
//TIM_InternalClockConfig(TIM1);
//TIM1基本設定
//設定預分頻器分頻係數71,即APB2=72M, TIM1_CLK=72/72=1MHz
//TIM_Period(TIM1_ARR)=1000,計數器向上計數到1000後產生更新事件,計數值歸零
//向上計數模式
//TIM_RepetitionCounter(TIM1_RCR)=0,每次向上溢位都產生更新事件
TIM_BaseInitStructure.TIM_Period = 1000;
TIM_BaseInitStructure.TIM_Prescaler = 71;
TIM_BaseInitStructure.TIM_ClockDivision = 0;
TIM_BaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;
//TIM_BaseInitStructure.TIM_RepetitionCounter = 0;
TIM_TimeBaseInit(TIM1, &TIM_BaseInitStructure);
//清中斷,以免一啟用中斷後立即產生中斷
TIM_ClearFlag(TIM1, TIM_FLAG_Update);
//使能TIM1中斷源
TIM_ITConfig(TIM1, TIM_IT_Update, ENABLE);
//TIM1總開關:開啟
TIM_Cmd(TIM1, ENABLE);
}
4. 中斷函式
void TIM1_UP_IRQHandler(void)
{
// code
}