1. 程式人生 > >TIM通用定時器(一)計數器模式

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

}