最近才發現原來我把定時器里的配置參數代表的意義給搞混了,這里記錄一下,防止以后自己忘記。
以建立一個定時1mS定時器為例:
1、先打開定時器
2、配置好時鍾
3、配置定時器設置
重點來了,以前在這里我一直以為這里配置的就是時間,然后在調頻率的時候,一直不對勁,知道查閱了硬石的資料才發現,這里配置的是進入定時器中斷的頻率,然后要定的時間要跟據這個頻率來定時的。
由這個圖可見,這里配置的是定時器產生中斷的頻率,然后再跟據頻率與時間的關系推出定時的時間。
所以定時器頻率為 f = 72M / Prescaler / Period = 72000 000 / 72 /1000 = 1000Hz;
定時時間T = 1 / f 則: 1s / 1000Hz = 1000 000us / 1000Hz = 1000us =1ms。
這樣就可以定時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后的邏輯
}
}
補充:最后記得生成STM32Cubemx文件時打開定時器中斷,不然進不了回調函數,一般的話習慣用TIM3做定時器