專注電子技術(shù)學(xué)習(xí)與研究
當(dāng)前位置:單片機(jī)教程網(wǎng) >> STM32 >> 瀏覽文章

STM32中SysTick在3.5固件庫中的應(yīng)用

作者:真誠冰雪天涯   來源:不詳   點(diǎn)擊數(shù):  更新時(shí)間:2014年07月27日   【字體:

一、SysTick
STM32內(nèi)核中有一個(gè)系統(tǒng)定時(shí)器,它是一個(gè)24位遞減計(jì)數(shù)器。工作原理是系統(tǒng)時(shí)基定時(shí)器設(shè)定初值并使能后,每經(jīng)過1個(gè)系統(tǒng)時(shí)鐘周期,計(jì)數(shù)值就減,當(dāng)計(jì)數(shù)值減到0時(shí),系統(tǒng)定時(shí)器會(huì)重新自動(dòng)重裝初值,并繼續(xù)下一次計(jì)數(shù),同時(shí)內(nèi)部的COUNTFLAG標(biāo)志位會(huì)置位。觸發(fā)中斷。
在很早的固件庫中,提供了很多函數(shù),來對SysTick進(jìn)行設(shè)置,但是到了3.5版本的標(biāo)準(zhǔn)固件庫中,移除了相關(guān)驅(qū)動(dòng)函數(shù),用戶必須調(diào)用CMSIS 定義的函數(shù),其中CMSIS只提供了一個(gè)Systick設(shè)置的函數(shù),替代了STM32原來有的所有的驅(qū)動(dòng)函數(shù),這樣做的目的,可能是簡化Systick 的設(shè)置,可是降低了用戶對SysTick的可控性。
在CMSIS中提供的函數(shù)是  SysTick_Config(uint32_t ticks); 該函數(shù)設(shè)置了自動(dòng)重載入計(jì)數(shù)器(LOAD)的值,SysTick IRQ的優(yōu)先級,復(fù)位了計(jì)數(shù)器(VAL)的值,開始計(jì)數(shù)并打開SysTick IRQ中斷。SysTick時(shí)鐘默認(rèn)使用系統(tǒng)時(shí)鐘。
其中這個(gè)函數(shù)定義在Core_cm3.h中 ,源代碼如下所示:
   static __INLINE uint32_t SysTick_Config(uint32_t ticks)
 {
   if (ticks > SysTick_LOAD_RELOAD_Msk)  return (1);                                                                                              
   SysTick->LOAD  = (ticks & SysTick_LOAD_RELOAD_Msk) - 1;             
   NVIC_SetPriority (SysTick_IRQn, (1<<__NVIC_PRIO_BITS) - 1);        
   SysTick->VAL   = 0;                                                
   SysTick->CTRL  = SysTick_CTRL_CLKSOURCE_Msk |
                    SysTick_CTRL_TICKINT_Msk   |
                    SysTick_CTRL_ENABLE_Msk;                          
   return (0);                                              
 }
從上面的函數(shù)中可以看出,這個(gè)函數(shù)把Systick的初值,中斷優(yōu)先級,使能中斷,開啟定時(shí)器都完成了。大大簡化了程序。
其中ticks 代表的是初值。例如系統(tǒng)時(shí)鐘是72Mhz 那么要產(chǎn)生1ms的時(shí)基,那么我們可以這樣去寫。
SysTick_Config(SystemCoreClock/1000);  當(dāng)然也可以寫成:SysTick_Config(72000);

關(guān)閉窗口

相關(guān)文章