systick系統(tǒng)嘀嗒實(shí)驗(yàn)stm32神舟號(hào)開發(fā)板_第1頁
systick系統(tǒng)嘀嗒實(shí)驗(yàn)stm32神舟號(hào)開發(fā)板_第2頁
systick系統(tǒng)嘀嗒實(shí)驗(yàn)stm32神舟號(hào)開發(fā)板_第3頁
已閱讀5頁,還剩3頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

第14章Systick系統(tǒng)嘀嗒實(shí) Systick系統(tǒng)嘀嗒實(shí) 什么是Systick定時(shí) Systick定時(shí)器和其他定時(shí)器的區(qū) Systick定時(shí)器有哪些作 Systick定時(shí)器的時(shí)......................................................................................................... Systick定時(shí)器定時(shí)時(shí)間的計(jì) 14Systick系統(tǒng)嘀嗒Systick系統(tǒng)嘀嗒實(shí)驗(yàn)我們學(xué)習(xí)NVIC向量中斷控制器的時(shí)候,ST提供的參考手冊(cè)中幾乎沒有涉及NVIC的內(nèi)容。我們要了解它里面的寄存器的話還要參考《STM32F10xxx的Cortex-M3編程手冊(cè).pdf》。Systick定時(shí)器的情況和NVIC類似。STM32采用的Cortex-M3的核,NVICSystickCortex-M3的手冊(cè)中都有詳細(xì)的介紹。要注STM32NVIC、SystickCortex-M3NVIC、Systick是有一些差異的。什么是Systick定時(shí)器SysTick,系統(tǒng)滴答聲。系統(tǒng)滴答滴答很形象地表示了它是一個(gè)系統(tǒng)節(jié)拍器。SysTick是一個(gè)24位的倒計(jì)數(shù)定時(shí)器,注意是倒計(jì)數(shù)!當(dāng)計(jì)到0時(shí),它就會(huì)自動(dòng)從RELOAD寄存器中自動(dòng)重裝載定時(shí)初值。只要不把CTRL寄存器中的ENABLE位清0,它就永Systick定時(shí)器和其他定時(shí)器的區(qū)別①SystickARM②Systick好像是不可中斷,啟動(dòng)之后做OS的時(shí)基非常好,不像一般定時(shí)器,占用了一級(jí)Systick定時(shí)器有哪些作用產(chǎn)生操作系統(tǒng)的時(shí)鐘SysTick定時(shí)器被在NVIC中,用于產(chǎn)生SYSTICK異常(異常號(hào):15。在以前,大多操作系統(tǒng)需要一個(gè)硬件定時(shí)器來產(chǎn)生操作系統(tǒng)需要的滴答中斷,作為整個(gè)系統(tǒng)的時(shí)基。因此,需要一個(gè)定時(shí)器來產(chǎn)生周期性的中斷,而且最好還讓用戶程序不能隨意它的寄存器,以維持操作系統(tǒng)“心跳”的節(jié)律。SysTick的最大使命,就是定期地產(chǎn)生異常請(qǐng)求,作為系統(tǒng)的時(shí)基。OS都需要這種“滴答”來推動(dòng)任務(wù)便于不同處理器之間程序移植Cortex‐M3處理器內(nèi)部包含了一個(gè)簡單的定時(shí)器。因?yàn)樗械腃M3都帶有這個(gè)定時(shí)器,軟件在不同CM3器件間的移植工作得以化簡。該定時(shí)器的時(shí)可以是內(nèi)部時(shí)鐘(FCLK,CM3上的自由運(yùn)行時(shí)鐘,或者是外部時(shí)鐘(CM3處理器上的STCLK信號(hào)。不過,STCLK的具體來源則由設(shè)計(jì)者決定,因此不同產(chǎn)品之間的時(shí)鐘頻率可能會(huì)大不相同,你需要檢視的器件手冊(cè)來決定選擇什么作為時(shí)。SysTick定時(shí)器能產(chǎn)生中斷,CM3為它專門開出一個(gè)異常類型,并且在向量表中有它的一席之地。它使操作系統(tǒng)和其它系統(tǒng)軟件在CM3器件間的移植變得簡單多了,因?yàn)樵谒蠧M3產(chǎn)品間對(duì)其處理作為一個(gè)SysTick定時(shí)器還可以用作鬧鐘,作為啟動(dòng)一個(gè)特定任務(wù)的時(shí)間依據(jù)。它作為一個(gè)鬧鈴,用于測量時(shí)間。要注意的是,當(dāng)處理器在調(diào)試期間被喊停(halt)時(shí),則SysTick定時(shí)器亦將暫停運(yùn)作。Systick定時(shí)器的時(shí)可以是內(nèi)部時(shí)鐘(FCLK,CM3上的自由運(yùn)行時(shí)鐘),或者是外部時(shí)鐘(CM3處理器上的STCLK信號(hào)。不過,STCLK的具體來源則由設(shè)計(jì)者決定,因此不同產(chǎn)品之間的時(shí)鐘頻率STM32中,我們可以通過代碼配置Systick定時(shí)器的時(shí)鐘等于AHB時(shí)鐘或者是AHB時(shí)鐘/8Systick的寄存器SysTick相關(guān)的4個(gè)寄存器名稱和地址如下0xE000E010-控制寄存0xE000E014-重載寄存0xE000E018-當(dāng)前值寄存0xE000E01C-校準(zhǔn)值寄存面的學(xué)習(xí)中,我們使用的延時(shí)函數(shù)delay(voiddelay(IOuint32_tnCount){for(;nCount!=0;nCount--}延時(shí)是通過給nCount設(shè)置值,CPU循環(huán)執(zhí)行變量nCount自減實(shí)現(xiàn)。對(duì)于STM32系列微處理器說,很難計(jì)算出延時(shí)的精確值。當(dāng)我們需要精確延時(shí)是,可以利用Systick來設(shè)計(jì) SysTick控制與狀態(tài)寄存器可以看到實(shí)際使用只用到了其中的4位,如下表所示位CLKSOURCE用于選擇Systick1時(shí),Systick定時(shí)器時(shí)鐘為AHB0時(shí),Systick定時(shí)器時(shí)鐘為AHB/8。SysTick_LOAD重裝值寄存器SysTick一個(gè)遞減的計(jì)數(shù)器計(jì)數(shù)器遞減到“0重裝寄存器中的值就會(huì)被重裝SysTick_VAL當(dāng)前值寄存器使用SysTick當(dāng)前值寄存器來查找寄存器中的當(dāng)前值。具體寄存器的位分配如下所示使用校準(zhǔn)寄存器通過乘法或是除法運(yùn)算可以將寄存器調(diào)節(jié)成任意所需的時(shí)鐘速率,如下所示Systick定時(shí)器定時(shí)時(shí)間的計(jì)算我們給Systick定時(shí)器,配置的時(shí)鐘頻率是72MHz1Hz表示1秒震蕩172MHz表示1秒震蕩72M次,那么每次振蕩時(shí)間是1/72MHZ?,F(xiàn)在需要振蕩72M/ 次,總共所花的時(shí)間用以下公式來算 需要振蕩的次數(shù)*每次的振蕩時(shí)間= *1/72M= =0.000001秒=例程01systick系統(tǒng)嘀嗒實(shí)驗(yàn)調(diào)用函數(shù)LED_Init()初始化板載LED燈,調(diào)用函數(shù)SysTick_Init()配置Systick,進(jìn)入代碼,并且按下【復(fù)位】鍵,可以看到LED1燈每隔1秒就閃爍1次 #include"ledh"#include"systick.h"intmain(void){{} }voidSysTick_Init(uint32_tHzPreSecond){if(SysTick_Config(SystemCoreClock/{while}}這個(gè)函數(shù)配置24位的倒計(jì)數(shù)Systick定時(shí)器,當(dāng)計(jì)到0時(shí)引起中斷,并從STK_LOAD寄存器中自動(dòng)重裝載定時(shí)初值。只要不把它在SysTick控制及狀態(tài)寄存器中的使能位清除,就永不停息。輸入的參數(shù)ticksSTK_LOAD寄存器,為兩個(gè)中斷之間的脈沖數(shù)(定時(shí)初值,即相隔ticks個(gè)時(shí)鐘周期會(huì)引起一次中斷;配置SysTick成功時(shí)返回0,出錯(cuò)進(jìn)返回1。第一行代碼“if(ticks>SysTick_LOAD_RELOAD_Msk)return(1)”ticks,因?yàn)閠icks是定時(shí)初值,要被保存到重載寄存器STK_LOAD寄存器中,再由硬件把STK_LOAD值加載到當(dāng)前計(jì)數(shù)值寄存器STK_VAL使用的,STK_LOAD和STK_VAL都是24位的,所以當(dāng)輸入?yún)?shù)ticks大于其可第二行代碼“SysTick->LOAD=(ticks&SysTick_LOAD_RELOAD_Msk)-1”稍稍處理一下把ticks-1STK_LOAD寄存器,要注意的是1,若STK_VALticks-1向下計(jì)數(shù)0,實(shí)際上就經(jīng)過了ticks個(gè)脈沖。這句賦值代碼中使用到了宏SysTick_LOAD_RELOAD_Msk,與其它庫函數(shù)類似,這樣子的宏是用來指示寄存器的特定位置或進(jìn)行位用的。類似的宏定義如下:SysTick_LOAD_RELOAD_Msk0xFFFFFFul左移0位。像這樣子的操作,在控制寄存器的代碼(大部分“NVIC_SetPriority(SysTick_IRQn1<<NVIC_PRIO_BITS)1)”配置中斷向SysTick中斷的原因。 會(huì)把在STK_LOAD寄存器中的ticks值加載給它。AHB(72MHz同時(shí)使能Systick定時(shí)器和Systick定時(shí)器中斷。例程02systick系統(tǒng)嘀嗒雙任務(wù)在main函數(shù)里實(shí)現(xiàn)3個(gè)LED燈閃爍,在systick定時(shí)器中斷里實(shí)現(xiàn)蜂鳴器鳴叫,真

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論