STM32定时器延时函数
生活随笔
收集整理的這篇文章主要介紹了
STM32定时器延时函数
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
本文用STM32F205芯片中的TIM3為例,寫了兩種定時器延時函數。本人所知的延時函數方式有3種,通過定時器中斷方式的延時函數在本文中暫時不提及。為方便自己記憶,以下均為自己總結,如有錯誤,歡迎大家討論。
TIM3掛載在APB1上,30MHz,故TIM3的始終頻率為60MHz。
方法一:1. 先配置定時器的單次定時時長,定時器分頻為1M,即每計一個數需要1us。
2. 寫延時函數,當計數器的計數值大于給定的計數值時,停止計數。
注意:通過這個方法寫的定時器延時函數,微秒級延時時長必須小于單次定時時長,即自動重裝載值必須設置大一點,但也不能超過最大值。
方法二:將定時時長跟自動重裝載值聯系在一起,當檢測SR寄存器發生計數溢出,關閉定時器。
//毫秒級延時 void TIM3_Delayms(u16 xms) {TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE); ///使能TIM3時鐘TIM_TimeBaseInitStructure.TIM_Period = xms*10-1; //自動重裝載值TIM_TimeBaseInitStructure.TIM_Prescaler = 6000-1; //定時器分頻TIM_TimeBaseInitStructure.TIM_CounterMode=TIM_CounterMode_Up; //向上計數模式TIM_TimeBaseInit(TIM3,&TIM_TimeBaseInitStructure);//初始化TIM3TIM3->SR = 0;TIM_Cmd(TIM3,ENABLE); //啟動定時器while((TIM3->SR & TIM_FLAG_Update)!=SET);TIM_Cmd(TIM3,DISABLE); //關閉定時器TIM3->CNT = 0; }注意:在使用方法二的延時時,在啟動定時器前需要先將SR寄存器清空,否則會出問題。
總結
以上是生活随笔為你收集整理的STM32定时器延时函数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 互联网日报 | 5月9日 星期日 | 特
- 下一篇: 工业相机CCD与CMOS