最近才發現原來我把定時器裏的配置參數表明的意義給搞混了,這裏記錄一下,防止之後本身忘記。函數
以創建一個定時1mS定時器爲例:spa
一、先打開定時器3d
二、配置好時鐘code
三、配置定時器設置blog
重點來了,之前在這裏我一直覺得這裏配置的就是時間,而後在調頻率的時候,一直不對勁,知道查閱了硬石的資料才發現,這裏配置的是進入定時器中斷的頻率,而後要定的時間要跟據這個頻率來定時的。回調函數
由這個圖可見,這裏配置的是定時器產生中斷的頻率,而後再跟據頻率與時間的關係推出定時的時間。io
因此定時器頻率爲 f = 72M / Prescaler / Period = 72000 000 / 72 /1000 = 1000Hz;class
定時時間T = 1 / f 則: 1s / 1000Hz = 1000 000us / 1000Hz = 1000us =1ms。sed
這樣就能夠定時1ms了啦,若是要作PWM頻率調頻,就直接改 pre 與 per 算出 f 就能夠了。配置
具體公式以下圖(上面的計算我是爲了方便理解把公式逆運算了一次):
最後使用定時器中斷跟關閉定時器中斷以及回調函數便可, 使用中斷的時候注意要先開啓中斷
HAL_TIM_Base_Start_IT(&htim1); //使用定時器的時候調用這個函數啓動
HAL_TIM_Base_Stop_IT(&htim1); //中止定時器的時候調用這個函數關閉
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
if(htim->Instance == TIM1)
{
//編寫回調邏輯,即定時器1定時1MS後的邏輯 }}