高階定時器/TIM1/TIM8 定時時間不準的問題/TIM_TimeBaseStructure.TIM_RepetitionCounter
阿新 • • 發佈:2018-11-10
配置定時器遇到的問題
舉例1:
/*TIM1時鐘配置*/ TIM_TimeBaseStructure.TIM_Prescaler = 2; //預分頻(時鐘分頻)72M/(2+1)=24M TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //向上計數 TIM_TimeBaseStructure.TIM_Period = 65535; //裝載值18k/144=125hz TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; TIM_TimeBaseStructure.TIM_RepetitionCounter = 0x0; TIM_TimeBaseInit(TIM1,&TIM_TimeBaseStructure);
有必要知道一下定時時間的計算:(以前只是知道大概現在寫個帖子以防又忘了)
TIM_TimeBaseStructure.TIM_Prescaler = 2;//分頻2 72M/(2+1)=24MHz
TIM_TimeBaseStructure.TIM_Period = 65535; //計數值65535
((1+TIM_Prescaler )/72M)*(1+TIM_Period )=((1+2)/72M)*(1+65535)=0.00273秒=366.2Hz */
以下就要注意一點啦!
(1)TIMx(1-8),在庫設定預設的情況下,都是72M的時鐘;
(2)TIM_TimeBaseStructure.TIM_RepetitionCounter=0;是重複計數,就是重複溢位多少次才給你來一個溢位中斷,
如果初始化為0的話,計數器溢位一次,中斷一次!問題就解決啦! 它對應的暫存器叫TIM1 RCR.如果這個值不配置,上電的時候暫存器值可是隨機的,本來1秒中斷一次,可能變成N 秒中斷一次,讓你超級頭大!
如果想知道為什麼?那我們 來談談這個TIM1 裡面的是重複計數吧(個人見解)
上圖說明: 當計數器溢位產生更新事件的時候,重灌載值會在計數器重新整理之前更新,這就不會出現計數器重新整理重灌載之前的值!
有請看下圖: