轉 STM32定時器時鐘 定時器的時鐘有倍頻功能

2021-07-09 04:47:46 字數 2456 閱讀 9806

而外部的選8m經pll後,可以最大到72mhz

systick由ahb固定8分頻後得到

apb2可以工作在72mhz下,而apb1最大是36mhz。

sysclk 系統時鐘,最大72mhz

hclk :ahb匯流排時鐘,由系統時鐘sysclk 分頻得到,一般不分頻,等於系統時鐘

經過匯流排橋ahb--apb,通過設定分頻,可由hclk得到 pclk1與pclk2時鐘

不過pclk2時鐘最高可達72mhz,而pclk1最大36mhz。pclk2對應apb2外設。pclk1對應apb1外設。

stm32通用定時器

stm32的定時器是個強大的模組,定時器使用的頻率也是很高的,定時器可以做一些基本的定時,還可以做pwm輸出或者輸入捕獲功能。

時鐘源問題:

名為timx的有八個,其中tim1和tim8掛在apb2匯流排上,而tim2-tim7則掛在

apb1匯流排上。其中tim1&tim8稱為高階控制定時器(advanced control timer).他們所在的apb2匯流排也比apb1匯流排要好。apb2可以工作在72mhz下,而apb1最大是36mhz。

定時器的時鐘不是直接來自apb1或apb2,而是來自於輸入為apb1或apb2的乙個倍頻器。

下面以定時器2~7的時鐘說明這個倍頻器的作用:當apb1的預分頻係數為1時,這個倍頻器不起作用,定時器的時鐘頻率等於apb1的頻率;當apb1的預分頻係數為其它數值(即預分頻係數為2、4、8或16)時,這個倍頻器起作用,定時器的時鐘頻率等於apb1的頻率兩倍。

假定ahb=36mhz,因為apb1允許的最大頻率為36mhz,所以apb1的預分頻係數可以取任意數值;當預分頻係數=1時,apb1=36mhz,tim2~7的時鐘頻率=36mhz(倍頻器不起作用);當預分頻係數=2時,apb1=18mhz,在倍頻器的作用下,tim2~7的時鐘頻率=36mhz。

有人會問,既然需要tim2~7的時鐘頻率=36mhz,為什麼不直接取apb1的預分頻係數=1?答案是:apb1不但要為tim2~7提供時鐘,而且還要為其它外設提供時鐘;設定這個倍頻器可以在保證其它外設使用較低時鐘頻率時,tim2~7仍能得到較高的時鐘頻率。

再舉個例子:當ahb=72mhz時,apb1的預分頻係數必須大於2,因為apb1的最大頻率只能為36mhz。如果apb1的預分頻係數=2,則因為這個倍頻器,tim2~7仍然能夠得到72mhz的時鐘頻率。能夠使用更高的時鐘頻率,無疑提高了定時器的解析度,這也正是設計這個倍頻器的初衷。

tim通用定時器配置步驟:

1.配置tim時鐘  

rcc_apb1periphclockcmd(rcc_apb1periph_tim2, enable);

rcc_apb2periphclockcmd(rcc_apb2periph_tim1, enable);

2.定時器基本配置

void tim2_configuration(void)

tim_period設定了在下乙個更新事件裝入活動的自動重裝載暫存器週期的值。它的取值必須在0x0000和0xffff之間。

tim_prescaler設定了用來作為timx時鐘頻率除數的預分頻值。它的取值必須在0x0000和0xffff之間。

tim_clockdivision的作用是做一段延時,一般在特殊場合的時候會用到,可不關心。

tim_countermode選擇了計數器模式。

tim_countermode_up

tim向上計數模式

tim_countermode_down

tim向下計數模式

tim_countermode_centeraligned1 

tim**對齊模式1計數模式

tim_countermode_centeraligned2 

tim**對齊模式2計數模式

tim_countermode_centeraligned3 

tim**對齊模式3計數模式

微控制器時鐘頻率72mhz,apb1 二分頻36mhz,故tim2自動2倍頻至72mhz,故定時器中斷頻率為72000000/36000/5=400hz

3.使能定時器中斷tim_cmd(tim2, enable);

4.配置nvic。

nvic_initstructure.nvic_irqchannel = tim2_irqchannel;

nvic_initstructure.nvic_irqchannelpreemptionpriority = 0;

nvic_initstructure.nvic_irqchannelsubpriority = 4; 

nvic_initstructure.nvic_irqchannelcmd = enable;

nvic_init(&nvic_initstructure);

5.寫中斷函式

void tim2_irqhandler(void) 

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

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

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 定時器TIM時鐘步驟

1 tim3 時鐘使能 rcc apb1periphclockcmd rcc apb1periph timx,enable 時鐘使能 2 初始化定時器引數,設定自動重灌值,分頻係數,計數方式等。定時器的初始化函式tim timebaseinit voidtim timebaseinit tim ty...