void Time_Init(void) { TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_DeInit(TIM3); //復位TIM3定時器 TIM_TimeBaseStructure.TIM_Period =7999; //設置自動重裝載寄存器鎖存值,1ms溢出 TIM_TimeBaseStructure.TIM_Prescaler = 799800; //9分頻 TIM_TimeBaseStructure.TIM_ClockDivision = 0x0; //時鐘分頻因子 TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //計數器向上計數模式 TIM_TimeBaseInit(TIM3,&TIM_TimeBaseStructure); //寫TIM3各寄存器參數 TIM_ClearFlag(TIM3,TIM_FLAG_Update); //清除TIM3的標誌位 TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE); //使能TIM中斷 TIM_Cmd(TIM3,ENABLE); //使能TIM外設 }
以上爲stm32定時器設置代碼spa
TIM_Period
TIM_Period 設置了在下一個更新事件裝入活動的自動重裝載寄存器週期的值。它的取值必須在 0x0000 和
0xFFFF 之間。
TIM_Prescaler
TIM_Prescaler 設置了用來做爲 TIMx 時鐘頻率除數的預分頻值。它的取值必須在 0x0000 和 0xFFFF 之間
code
首先設置預分頻值,orm
Td = Ti / (TIM_Prescaler + 1) 事件
Td定時器的計數頻率it
Ti 內部時鐘源頻率(APB1的倍頻器送出時鐘)io
TIM_Prescaler 用戶設定的預分頻係數,取值範圍0~65535。class
例如:RCC中AHB=72MHZ、APB1=36MHZ、APB2=72MHZ,則CK_INT=72MKZ。date
假如用的是 TIM3 TIM3屬於APB1 則 Ti=36MHZ 取TIM_Prescaler=7199定時器
則 Td = 36Mhz / 7200 = 5000hz 故 則定時器的計數週期=1/5000HZ=0.2msim
則若是想定時1s TIM_Period = 5000
5000 * 0.2 ms = 1s