stm32f40x系列總共最多有14個定時器,定時器分為三類:基本定時器、通用定時器和高階定時器。它們的都是通過計數來達到定時的目的,和51的定時器差不多,基本原理都是一樣的,就是功能多了一些,這些計數器都是自動重新裝載初值的,使用起來非常方便,而且計數時鐘頻率可以通過分頻係數來設定。本文章將介紹使用定時器中斷來控制led間隔1s閃爍。
我們使用定時器內部時鐘,即ck_int作為計數器的時鐘源 = 168mhz / 2 = 84mhz
定時器3時鐘使能
/*tim_repetitioncounter是使用高階定時器要進行設定的。我們使用的是定時器3,屬於通用定時器,計數模式設定為向上計數,則計數器從0 開始計數,當計數到設定的初值時,然後計數器重新從0開始計數,並將溢位標誌位置1,如果設定了溢位中斷,則會產生計數器溢位中斷。初始化定時器引數,設定自動重灌值,分頻係數,計數方式
*/tim_init。tim_clockdivision= tim_ckd_div1; //
時鐘分頻因子
tim_init。tim_countermode=tim_countermode_up; //
定時器模式
tim_init。tim_period=period; //
自動重灌值,0-65535
tim_init。tim_prescaler=prescaler;
//tim_init。tim_prescaler= 8400;
//分頻係數-0。1ms
//tim_init。tim_prescaler= 42000;
//分頻係數-0。5ms
//tim_init。tim_repetitioncounter=
tim_timebaseinit(tim3,&tim_init);
/*定時器3中斷優先順序設定
*/nc_init。nvic_irqchannel=tim3_irqn; //
中斷通道指定定時器3
nc_init。nvic_irqchannelcmd=enable;
nc_init。nvic_irqchannelpreemptionpriority=0; //
設定搶占優先順序
nc_init。nvic_irqchannelsubpriority=0; //
設定響應優先順序
nvic_init(&nc_init);
tim_cmd(tim3,enable);
void tim3_irqhandler(void這裡檢測的是定時器溢位中斷,即計時1s時間到,則將led1的狀態反轉,然後將溢位標誌位清零。) tim_clearitpendingbit(tim3,tim_it_update);
//清楚更新中斷標誌位
}
int main(void這裡使用延時函式來延時1s控制led0閃爍,實際執行效果可以看出兩個led的閃爍在一定的時間內是同步的,但是時間一長還是有點誤差。)}
當學完這一節定時器的時候,我就有乙個想法了,那就是寫乙個lcd電子時鐘的程式,通過定時器來達到準確延時的目的,當然還要學習一下lcd1602的驅動方法,哈哈,想想就很有成就感。
STM32學習筆記(五) 通用定時器計數延時
stm32f40x系列總共最多有14個定時器,定時器分為三類 基本定時器 通用定時器和高階定時器。它們的都是通過計數來達到定時的目的,和51的定時器差不多,基本原理都是一樣的,就是功能多了一些,這些計數器都是自動重新裝載初值的,使用起來非常方便,而且計數時鐘頻率可以通過分頻係數來設定。本文章將介紹使...
stm32通用定時器
stm32的定時器是個強大的模組,定時器使用的頻率也是很高的,定時器可以做一些基本的定時,還可以做pwm輸出或者輸入捕獲功能。時鐘源問題 名為timx的有八個,其中tim1和tim8掛在apb2匯流排上,而tim2 tim7則掛在 apb1匯流排上。其中tim1 tim8稱為高階控制定時器 adva...
STM32通用定時器配置
stm32通用定時器配置 一 stm32 通用定時器原理 stm32 系列的cpu 有多達8 個定時器,其中tim1 和tim8 是能夠產生三對pwm 互補輸出的高階定時器,常用於三相電機的驅動,它們的時鐘由apb2 的輸出產生。其它6 個為普通定時器,時鐘由apb1 的輸出產生。下圖是stm32參...