stm32筆記6 定時器和定時中斷

2021-09-27 04:24:20 字數 1072 閱讀 3109

以通用定時器(tim2-tim5)為例子

注:除非apb1的分頻係數是1,否則通用定時器的時鐘等於apb1時鐘的2倍。

預設呼叫systeminit函式情況下:

sysclk=168m

ahb時鐘=168m

apb1時鐘=42m

所以apb1的分頻係數=ahb/apb1時鐘=4

所以,通用定時器時鐘ck_int=2*42m=84m

tout(溢位時間) = (arr+1)(psc+1) / ck_int

假設定時500ms:arr設定為4999 ,psc設定為8399, ck_int預設為84m

① 使能定時器時鐘。

rcc_apb1periphclockcmd();

② 初始化定時器,配置arr,psc。

tim_timebaseinit();

③ 開啟定時器中斷,配置nvic。

tim_itconfig();

nvic_init();

④ 使能定時器。

tim_cmd();

⑥ 編寫中斷服務函式。

timx_irqhandler();

// 定時器tim3時鐘使能

rcc_apb1periphclockcmd( rcc_apb1periph_tim3,enable);

// 初始化定時器,配置arr psc

tim_timebaseinit( tim3, &tim_timebaseinitstruct)

tim_itconfig(tim3, tim_it_update, enable);

// 初始化tim3中斷

nvic_init(&nvic_initstruct);

// 使能tim3定時器

tim_cmd(tim3,enable);

參考文章

STM32筆記 Systick系統定時器

關於systick的具體概念不多記錄,systick是儲存乙個數值然後倒計數,每記到0會進行一次中斷,下面我們用 記錄 其中systemfrequency的值為72000000,可去查巨集定義,除去100000代表的是每這麼長時間週期就中斷一次,這個設定就是每720個週期進一次中斷,執行中斷的函式,...

stm32關定時器 STM32定時器TIM3程式

include led.h include delay.h include key.h include sys.h include usart.h include timer.h stm32開發板實驗8 定時器中斷實驗 int main void delay init 延時函式初始化 nvic co...

定時器 STM32定時器 基本定時器1

我是鼎!定時器時鐘一定要明確其中有哪些變數。上圖為stm407資料手冊摘出來的,可能看不清楚,其實就蘊含了幾點資訊。注意一點,我們看圖2,我們以apb1舉例,上面掛著很多的外設,包括usart1 adc 以及定時器,我們知道apb1上面最高時鐘頻率為84mhz,但是定時器的時鐘是要在此基礎上乘2,也...