日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當(dāng)前位置:首頁 > 單片機(jī) > 單片機(jī)
[導(dǎo)讀]STM32中的定時器有多種,按功能分成2個高級控制器定時器,4個普通定時器,2個基本定時器,2個看門狗定時器,1個系統(tǒng)滴答定時器SysTick。定時器的關(guān)鍵是定時時間的計算。比如用定時器控制繼電器的開關(guān)的時候,需要延時

STM32中的定時器有多種,按功能分成2個高級控制器定時器,4個普通定時器,2個基本定時器,2個看門狗定時器,1個系統(tǒng)滴答定時器SysTick。

定時器的關(guān)鍵是定時時間的計算。比如用定時器控制繼電器的開關(guān)的時候,需要延時一段時間才關(guān)閉或者開啟,這時候離不開定時器定時。

通用定時器定時時間計算。1秒中斷的基本實現(xiàn):

通用定時器模塊的入口時鐘經(jīng)過分頻得到計數(shù)器的時鐘,用CK_CNT表示,預(yù)分頻器的系數(shù)為:TIMx_PSC,當(dāng)TIMx_PSC=0時,表示不分頻,=1時,2分頻。以此類推。

公式為:CK_CNT=fclk_PSC/(PSC[15:0]+1),其中PSC最大為65535.

其次是TIM5計數(shù)器的計數(shù)值的設(shè)置,TIM5計數(shù)器以CK_CNT為時鐘來計數(shù)。計數(shù)到設(shè)定值產(chǎn)生中斷。

(1/分頻后計數(shù)時鐘)*計數(shù)值=設(shè)定時間。以1秒為例

(1/(72MHz/7200))*10000=1s

初始化通用定時器的一個重要的結(jié)構(gòu)體TIM_TimeBaseInitTypeDef

 

  • typedef struct   
  • {   
  • u16 TIM_Period; //自動裝載的計數(shù)值,  
  • u16 TIM_Prescaler; //分頻值,當(dāng)為0時表示不分頻所以要減1.  
  • u8 TIM_ClockDivision;//設(shè)置時鐘分割,  
  • u16 TIM_CounterMode; //向上,向下等計數(shù)模式  
  • } TIM_TimeBaseInitTypeDef; 

 

初始化結(jié)構(gòu)體后調(diào)用函數(shù)

void TIM_TimeBaseInit(TIM_TypeDef* TIMx, TIM_TimeBaseInitTypeDef * TIM_TimeBaseInitStruct) 初始化TIMx定時器時間基數(shù)單位。

其次還要清除中斷待處理位,函數(shù)void TIM_ClearITPendingBit(TIM_TypeDef* TIMx, u16 TIM_IT) 做了這項工作。其中TIM_IT:待檢查的 TIM 中斷待處理位 。

 

 
  1. TIM_FLAG_Update//  TIM 溢出中斷標(biāo)志位   
  2. TIM_FLAG_CC1//  TIM 捕獲/ 比較 1 標(biāo)志位   
  3. TIM_FLAG_CC2//  TIM 捕獲/ 比較 2 標(biāo)志位   
  4. TIM_FLAG_CC3//  TIM 捕獲/ 比較 3 標(biāo)志位   
  5. TIM_FLAG_CC4//  TIM 捕獲/ 比較 4 標(biāo)志位   
  6. TIM_FLAG_Trigger//  TIM 觸發(fā)標(biāo)志位   
  7. TIM_FLAG_CC1OF//  TIM 捕獲/ 比較 1 溢出標(biāo)志位   
  8. TIM_FLAG_CC2OF//  TIM 捕獲/ 比較 2 溢出標(biāo)志位   
  9. TIM_FLAG_CC3OF//  TIM 捕獲/ 比較 3 溢出標(biāo)志位   
  10. TIM_FLAG_CC4OF//  TIM 捕獲/ 比較 4 溢出標(biāo)志位   

 

void TIM_ITConfig(TIM_TypeDef* TIMx, u16 TIM_IT, FunctionalState NewState) 使能/禁止TIM指定的中斷,如:

 

  1. TIM_ITConfig(TIMx, TIM_IT_Update, ENABLE)//使能TIMx指定的中斷  
  2. TIM_Cmd(TIMx, ENABLE);  //計數(shù)器使能,開始工作  

在中斷處理中,檢查指定的TIM中斷發(fā)生與否

  1. if (TIM_GetITStatus(TIM5, TIM_IT_Update) != RESET) //檢查指定的TIM中斷是否發(fā)生  
  2.  {  
  3.    TIM_ClearITPendingBit(TIM5, TIM_IT_Update);//清除TIMx的中斷待處理位  
  4.     
  5.    do something... ...//做點(diǎn)什么  
  6.  } 

 

 

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除( 郵箱:macysun@21ic.com )。
換一批
延伸閱讀
關(guān)閉