STM32定時器中斷實驗 TIM3

2021-07-31 21:03:25 字數 3089 閱讀 7091

1、參考資料

《stm32f1開發指南-庫函式版本》-第13章 定時器中斷時實驗

《stm32中文參考手冊v10》-第14章 通用定時器

2、時鐘選擇

計數器時鐘可以由下列時鐘源提供:

①內部時鐘(ck_int)

②外部時鐘模式1:外部輸入腳(tix)

③外部時鐘模式2:外部觸發輸入(etr)

④內部觸發輸入(itrx):使用乙個定時器作為另乙個定時器的預分頻器,

如可以配置乙個定時器timer1而作為另乙個定時器timer2的預分頻器。

3、內部時鐘選擇

4、時鐘計算方法

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

預設呼叫systeminit函式情況下:

sysclk = 72m

ahb時鐘=72m

apb1時鐘=36m

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

所以,通用定時器時鐘ck_int = 2*36m = 72m

5、計數器模式

通用定時器可以向上計數、向下計數、向上向下雙向計數模式。

①向上計數模式:計數器0計數到自動載入值(timx_arr),然後重新從0開始計數並且產生乙個計數器溢位事件。

②向下計數模式:計數器自動裝入的值(timx_arr)開始向下計數到0,然後從自動裝入的值重新開始,並產生乙個計數器向下溢位事件。

③**對齊模式(向上/向下計數):計數器從0開始計數到自動裝入的值-1,產生乙個計數器溢位事件,然後向下計數到1並且產生乙個計數器溢位事件;然後在從0開始重新計數。

6、向下計數模式(時鐘分頻因子=1)

向上計數模式(時鐘分頻因子=1)

**對齊計數模式(時鐘分頻因子=1 arr=6)

7、定時器中斷實驗相關暫存器

·計數器當前值暫存器cnt

·預分頻暫存器timx_psc

·自動重裝載暫存器(timx_arr)

·控制暫存器1(timx_cr1)

·dma中斷使能暫存器(timx_dier)

·常用庫函式

定時器引數初始化:

void tim_timebaseinit(tim_typedef* timx,tim_timebaseinittypedef* tim_timebaseinitstruct);

typedef struct

tim_timebaseinittypedef;

tim_timebasestructure.tim_period = 4999;

tim_timebasestructure.tim_prescaler =7199;

tim_timebasestructure.tim_clockdivision =   tim_ckd_div1; t

im_timebasestructure.tim_countermode =   tim_countermode_up;

tim_timebaseinit(tim3, &tim_timebasestructure);

·定時器使能函式:

void tim_cmd(tim_typedef* timx, functionalstate newstate)

·定時器中斷使能函式:

void tim_itconfig(tim_typedef* timx, uint16_t tim_it, functionalstate newstate);

·狀態標誌位獲取和清除

flagstatus tim_getflagstatus(tim_typedef* timx, uint16_t tim_flag);

void tim_clearflag(tim_typedef* timx, uint16_t tim_flag);

itstatus tim_getitstatus(tim_typedef* timx, uint16_t tim_it);

void tim_clearitpendingbit(tim_typedef* timx, uint16_t tim_it);

8、定時器中斷實現步驟

①使能定時器時鐘

rcc_apb1periphclockcmd();

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

tim_timebaseinit();

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

void tim_itconfig();

nvic_init();

④使能定時器:

tim_cmd();

⑤編寫中斷服務函式

timx_irqhandler();

9、程式要求

通過定時器中斷配置,每500ms中斷一次,然後中斷服務函式中控制led實現led1狀態取反(閃爍)。

tout(溢位事件) = (arr+1)(psc+1)/tclk

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 定時器中斷實驗

led.h ifndef led h define led h include sys.h void led init void define led0 pbout 5 紅燈 define led1 peout 5 綠燈 endif led.c include led.h include stm32...

STM32定時器中斷

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