天天看點

STM32學習--定時器(基本定時器)1.功能及原理2.寄存器3.使用方法

1.功能及原理

  基本定時器TIM6和TIM7各包含一個16位自動裝載計數器,由各自的可程式設計預分頻器驅動。它們可以作為通用定時器提供時間基準,特别地可以為數模轉換器(DAC)提供時鐘。實際上,它們在晶片内部直接連接配接到DAC并通過觸發輸出直接驅動DAC。這2個定時器是互相獨立的,不共享任何資源。

STM32學習--定時器(基本定時器)1.功能及原理2.寄存器3.使用方法

  由圖可知其時鐘源僅能來源于PCLK1,當PCLK1預分頻系數為1時 TIMCLK =PCLK1,否則TIMCLK =2*PCLK1。計數器的驅動時鐘= TIMCLK/PSC。

  基本定時器的計數器為累加計數器,計數器值(CNT)從0開始累加到自動裝載值(ARR)時會産生一個溢出事件,每次溢出事件會産生更新事件,使能中斷後會産生相應中斷。

  比較特别的一點是關于運作時修改ARR和PSC的值。這個需要了解影子寄存器,ARR和PSC都有兩個寄存器,一個儲存我們寫入的值,影子寄存器實際上是正在運作時的值。

  ARR的影子寄存器由_CR1中的ARPE位控制是否使能。ARPE為0時預裝載值立即傳輸到影子寄存器中,CNT計數到新的預裝載值時就産生溢出事件;ARPE為0時預裝載值會在一個更新事件之後才會傳輸到影子寄存器中,CNT計數到原預裝載值後才更新影子寄存器,下次計數時才會按新的預裝載值進行計數。

PSC的影子寄存器隻會在一個更新事件之後才會傳輸到影子寄存器中。

  關于更新事件還有兩個點:

  _CR1中URS位可以選擇UEV事件的請求源,為0:如果使能了中斷或DMA,以下任一事件可以産生一個更新中斷或DMA請求:計數器溢出、設定UG位、 通過從模式控制器産生的更新(其實這個好像沒有)。為1時,如果使能了中斷或DMA,隻有計數器溢出可以産生更新中斷或DMA請求。

  UDIS位禁止更新,為0時更新事件使能,為1時不産生更新事件(UEV),影子寄存器保持它的内容(ARR、 PSC)。但是如果設定了UG位則計數器和預分頻器将被重新初始化。

  單脈沖模式 :在_CR1中OPM選擇,為1時,在發生下次更新事件時,計數器停止計數(清除CEN位)。

2.寄存器

  TIMx_CR1:除了前面介紹了ARPE、OPM、URS、UDIS,就隻有CEN,就是使能定時器。

  TIMx_CR2:設定主模式選擇MMS,由于時鐘僅可來源于PCLK1,是以個人覺得它不能工作在從模式下。但可以在主模式下工作。

000: 複位 – 使用TIMx_EGR寄存器的UG位作為觸發輸出(TRGO)。

001: 使能 –> 計數器使能信号CNT_EN被用作為觸發輸出(TRGO)。

010:更新 – 更新事件被用作為觸發輸出(TRGO)。

  TIMx_DIER:隻用2個位,分别是使能DMA和使能中斷。

  TIMx_SR:隻用1個位,辨別更新中斷。

  TIMx_EGR:隻用1個位,UG:産生更新事件,置1時,重新初始化定時器的計數器并産生對寄存器的更新。注意:預分頻器也被清除(但預分頻系數不變)。

  TIMx_CNT、TIMx_PSC、TIMx_ARR:分别是計數值、分頻系數、預裝載值。

3.使用方法

  基本使用方法:

  ①TIMx時鐘使能。

  ②設定 TIMx_ARR 和 TIMx_PSC 的值。

  ③設定 TIMx_DIER 允許更新中斷。

  ④允許 TIMx 工作,開始計數。

  ⑤TIMx 中斷分組設定。

  ⑥編寫中斷服務函數,在處理完中斷之後應,該向 TIMx_SR 的最低位寫 0,來清除該中斷标志。

繼續閱讀