stm32 基本定時器最簡單定時配置

2021-08-29 03:53:11 字數 1782 閱讀 2916

mcu:stm32f4系列,用的是通用定時器tim3

首先要知道的是tim3 是掛載到apb1匯流排上的,這點詳見stm32f417xx_datasheet-p.19,有個框圖叫device overview

而apb1 的時鐘是多少呢?這個得看你自己配置的多少了,一般是在setsysclock()函式裡,我這兒是系統時鐘的4分頻,系統時鐘這兒為168mhz,所以apb1上的時鐘為42mhz,這兒不要以為tim3的時鐘就是42mhz了,因為apb1到tim3還要經過乙個倍頻器,這個倍頻器只有當前面系統時鐘到apb1的分頻係數不為1時才起作用,而我們前面說了apb1是系統時鐘4分頻得到的,故這兒倍頻器生效,所以tim3的時鐘為apb1的倍頻,即84mhz。

ok,得到了定時器的輸入時鐘,我們配置定時器的簡單功能其實就只需要兩個引數:預分頻數和自動過載值

tout = ((arr+1)*(psc+1))/tclk;

其中arr就是自動重灌值,psc為預分頻值,tclk就是定時器的時鐘。比如我想要1s鐘的定時器,就可以設定:arr =9999;psc=8399; 

這兒要注意下arr和psc的取值範圍,前者是u32 的,後者是u16的。

nvic_inittypedef nvic_initstructure;

// tim3 clock enable

rcc_apb1periphclockcmd(rcc_apb1periph_tim3, enable);

// enable the tim3 gloabal interrupt

nvic_initstructure.nvic_irqchannel = tim3_irqn;

nvic_initstructure.nvic_irqchannelpreemptionpriority = 0x3;

nvic_initstructure.nvic_irqchannelsubpriority = 0x3;

nvic_initstructure.nvic_irqchannelcmd = enable;

nvic_init(&nvic_initstructure);

tim_timebasestructure.tim_period = arr;

tim_timebasestructure.tim_prescaler = psc;

tim_timebasestructure.tim_clockdivision = 0;

tim_timebasestructure.tim_countermode = tim_countermode_up;

//向上計數模式,就是從0計數到arr,計數到arr時,產生乙個tim_it_update中斷,還有其他中斷可選

tim_timebaseinit(tim3, &tim_timebasestructure);

/* tim interrupts enable */

tim_itconfig(tim3, tim_it_update, enable);

/* tim3 enable counter */

tim_cmd(tim3, enable);

這樣定時器就開始工作了,然後再寫上中斷處理函式,

void tim3_irqhandler(void)

}

至此,tim3的定時功能就完成了,由psc和arr值,我們可以設定想要的定時時間。

stm32 基本定時器最簡單定時配置

最近用到了定時器的定時功能,了解了下,stm32的定時器功能很強大,東西也挺多的,datasheet裡也說了一大段,這個我就不詳說了,這兒只說明下如何配置最簡單的定時功能配置。環境說明 mcu stm32f4系列,用的是通用定時器tim3 首先要知道的是tim3 是掛載到apb1匯流排上的,這點詳見...

STM32 基本定時器

中斷韌體庫程式設計 定時器初始化結構體 開始程式設計 本文為野火學習筆記。stm32f1系列。除互聯型裝置,共有8個定時器,分為基本,通用,高階3種定時器。不同的定時器有不同的功能。基本定時器為 tim6,tim7 其只能定時,沒有外部io,且16位計數器只能向上計數。通用定時器為 tim2 3 4...

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

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