1. 程式人生 > >STM32F107的通用定時器中斷實驗總結

STM32F107的通用定時器中斷實驗總結

1.     STM32F107的通用定時器是指:  TIM2、TIM3、TIM4、TIM5、

STM32F107的高階定時器是指:  TIM1、TIM8

STM32F107的基本定時器是指:  TIM6、TIM7

2.     STM32F107的通用定時器(TIM2、TIM3、TIM4、TIM5)的模式有向上計數、向下計數、中央對齊模式。

向上計數模式:計數器從0計數到自動載入值(TIMx_ARR),然後重新從0開始計數並且產生一個計數器溢位事件。

向下計數模式:計數器從自動裝入的值(TIMx_ARR)開始向下計數到0,然後從自動裝入的值重新開始,併產生一個計數器向下溢位事件。

中央對齊模式(向上/向下計數):計數器從0開始計數到自動裝入的值-1,產生一個計數器溢位事件,然後向下計數到1並且產生一個計數器溢位事件;然後再從0開始重新計數。

3.     STM32F107的通用定時器的時鐘選擇有多種,一般使用RCC提供的內部時鐘TIMxCLK,  由APB1時鐘分頻提供。

4.     狀態標誌位獲取和清除

FlagStatus TIM_GetFlagStatus(TIM_TypeDef* TIMx, uint16_tTIM_FLAG);

void TIM_ClearFlag(TIM_TypeDef* TIMx, uint16_t TIM_FLAG);

ITStatus TIM_GetITStatus(TIM_TypeDef* TIMx, uint16_tTIM_IT);

void TIM_ClearITPendingBit(TIM_TypeDef* TIMx, uint16_tTIM_IT);

定時器中斷實現步驟:

1.     定時器時鐘使能。   RCC_APB1PeriphClockCmd();

2.     初始化定時器,配置ARR,PSC。    TIM_TimeBaseInit();

3.     開啟定時器中斷,配置NVIC。     void TIM_ITConfig();    NVIC_Init();

4.     使能定時器。  TIM_Cmd();

5.     編寫中斷服務函式。    TIMx_IRQHandler();

1)    TIM_TimeBaseStructure.TIM_ClockDivision這一行程式碼是幹嗎的啊

   CKD[1:0]

: 時鐘分頻因子 (Clock division) 這2位定義在定時器時鐘(CK_INT)頻率、死區時間和由死區發生器與數字濾波器(ETR,TIx)所用的取樣時鐘之間的分頻比例。 00: tDTS = tCK_INT01 : tDTS = 2 x tCK_INT10: tDTS = 4 x tCK_INT 11 :保留,不要使用這個配置

用來遮蔽一些不需要的毛刺的。比如你數字濾波器的頻率為1M,N=8,則頻率大於1MHz/8=125KHz(持續時間小於8us)的脈衝都會被忽略。可以用在按鍵消抖之類的。