1.基本定時器(TIM6/TIM7)
包含時鐘源(CK_INT),1個16位自動重載遞增計數器(CK_ARR),1個16位可編程預分頻器(CK_PSC),計數器寄存器(CK_CNT),觸發DAC的控制器組成。時鐘源爲APB外設時鐘,定時事件生成事件主要由CK_PSC和CK_ARR兩個寄存器值覺得。例如需要1s延時,時鐘源週期爲100us,設置CK_ARR爲9999,CK_CNT從0開始到9999,總共技術10000次,即1s後更新事件和中斷標誌。
typedef struct
{
uint32_t Prescaler; //預分頻係數,0~65535,時鐘源經過該係數纔是定時器時鐘
uint32_t CounterMode; //計數模式,向上或向下,基本定時器只有向上
uint32_t Period; //時鐘週期
uint32_t ClockDivision; //時鐘分頻,基本定時器無此功能
uint32_t RepetitionCounter; //重複計數,高級控制定時器所用
uint32_t AutoReloadPreload; //自動預裝載值
}TIM_Base_InitTypeDef;
應用例子如下:
#include "basic_tim.h"
TIM_HandleTypeDef Basic_Tim6;
void Basic_Tim_Config(void){
HAL_TIM_Base_MspInit(&Basic_Tim6);
__HAL_RCC_TIM6_CLK_ENABLE();
Basic_Tim6.Instance=TIM6;
Basic_Tim6.Init.Prescaler=10799; //TIM6頻率=APB2/(Prescaler+1)=10000Hz
Basic_Tim6.Init.Period=9999; //累計10000個週期後產生中斷(1s)
Basic_Tim6.Init.AutoReloadPreload=TIM_AUTORELOAD_PRELOAD_ENABLE;
HAL_TIM_Base_Init(&Basic_Tim6);
HAL_NVIC_SetPriority(TIM6_DAC_IRQn,1,1);
HAL_NVIC_EnableIRQ(TIM6_DAC_IRQn); //優先級配置
}
2.高級定時器(TIM1/TIM8)
包含1個16位自動重載計數器,由可編程預分頻器驅動,多達6個獨立通道(6路輸出控制,4路輸入捕獲),在基礎定時器的基礎上引入了外部引腳,可用於多種用途,例如測量輸入信號的脈衝寬度(輸入捕獲),生成輸出波形(輸出比較,PWM等)。發生更新(計數器上溢/下溢、計數器初始化),突發事件,輸入捕獲,輸出比較時會生成中斷/DMA請求。
3.通用定時器
TIM2和TIM5是32位遞增/遞減/遞增遞減自動重載計數器,TIM3和TIM4是16位,4個獨立通道。
TIM9~TIM15是16位自動重載遞增計數器,2個獨立通道。