Stm32 暫存器 定時器中斷

2021-10-09 11:20:25 字數 1763 閱讀 1686

1;原理;

和外部中斷差不多,不同的是外部中斷的產生是由外部硬體產生變化的,而定時器中斷就是通過定時器的溢位實現中斷(可以想象成鬧鐘);

2;操作步驟;

這裡我用的是通用定時器tim3;

1)tim3 時鐘使能。

這裡我們通過 apb1enr 的第 1 位來設定 tim3 的時鐘,因為 stm32_clock_init 函式裡面

把apb1的分頻設定為2了,所以我們的tim3時鐘就是apb1時鐘的2倍,等於系統時鐘(72m)。

2)設定 tim3_arr 和 tim3_psc 的值。

通過這兩個暫存器,我們來設定自動重灌的值,以及分頻係數。這兩個引數加上時鐘頻率

就決定了定時器的溢位時間。

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

tclk:tim3 的輸入時鐘頻率(單位為 mhz)。

tout:tim3 溢位時間(單位為 us)

3)設定 tim3_dier 允許更新中斷。

因為我們要使用 tim3 的更新中斷,所以設定 dier 的 uie 位為 1,使能更新中斷。

4)允許 tim3 工作。

光配置好定時器還不行,沒有開啟定時器,照樣不能用。我們在配置完後要開啟定時器,

通過 tim3_cr1 的 cen 位來設定。

5)tim3 中斷分組設定。

在定時器配置完了之後,因為要產生中斷,必不可少的要設定 nvic 相關暫存器,以使能

tim3 中斷。

6)編寫中斷服務函式。

在最後,還是要編寫定時器中斷服務函式,通過該函式來處理定時器產生的相關中斷。在

中斷產生後,通過狀態暫存器的值來判斷此次產生的中斷屬於什麼型別。然後執行相關的操作,

我們這裡使用的是更新(溢位)中斷,所以在狀態暫存器 sr 的最低位。在處理完中斷之後應

該向 tim3_sr 的最低位寫 0,來清除該中斷標誌。

通過以上幾個步驟,我們就可以達到我們的目的了,使用通用定時器的更新中斷,來控制

ds1 的亮滅;

3;**timer.c;

在這裡插入**片

#include

"timer.h"

#include

"led.h"

#include

"sys.h"

void

tim3_irqhandler

(void

)//中斷服務函式

tim3->sr&=~

(1<<0)

;//清除中斷標誌位

}void

tim3_init1

(u16 arr,u16 psc)

time.h

在這裡插入**片

#ifndef _timer_h_

#define _timer_h_

#include

"sys.h"

void

tim3_init1

(u16 arr,u16 psc)

;#endif

main.c

在這裡插入**片

#include

"stm32f10x.h"

#include

"delay.h"

#include

"led.h"

#include

"timer.h"

intmain()

}

有錯誤,歡迎指正;

STM32定時器中斷

本實驗的目的是通過定時器中斷控制led燈的亮滅。筆者所用ide為iar,採用標準庫 3.5韌體庫 通過定時器產生中斷來控制led。ifndef led h define led h include stm32f10x gpio.h include stm32f10x.h include stm32f...

stm32 定時器中斷

stm32f1的定時器非常多,由2個基本定時器 tim6 tim7 4個通用定時器 tim2 tim5 和2個高階定時器 tim1 tim8 組成。基本定時器的功能最為簡單,類似於51微控制器內定時器。通用定時器是在基本定時器的基礎上擴充套件而來,增加了輸入捕獲與輸出比較等功能。高階定時器又是在通用...

STM32定時器的預裝暫存器及影子暫存器話題

摘自 經常有人問起預裝暫存器和影子暫存器的話題,其實stm32相關系列的手冊裡有介紹,有文件做介紹,這裡借花獻佛地一起分享下。在談預裝暫存器及影子暫存器的差別前,不妨先對stm32定時器的時基單元做個基本了解。stm32各系列的定時器結構和框架基本是一樣的,時基單元也一樣。下面時基單元是以stm32...