STM32 之定時時間計算

 

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

相關文章
相關標籤/搜索