整理系統時鐘定時器--SysTick的應用

2020-12-25 電子產品世界

Cortex-M3的內核中包含一個SysTick時鐘。SysTick 為一個24位遞減計數器,SysTick設定初值並使能後,每經過1個系統時鐘周期,計數值就減1。計數到0時,SysTick計數器自動重裝初值並繼續計數,同時內部的COUNTFLAG標誌會置位,觸發中斷(如果中斷使能)。

STM32的應用中,使用Cortex-M3 內核的SysTick作為定時時鐘,設定每一毫秒產生一次中斷,在中斷處理函數裡對N減一,在Delay(N)函數中循環檢測N是否為0,不為0則進行循環等待;若為0則關閉SysTick時鐘,退出函數。

本文引用地址:http://www.eepw.com.cn/article/201611/322078.htm

外部晶振為8MHz,9倍頻,系統時鐘為72MHz,SysTick的最高頻率為9MHz(最大為HCLK/8),在這個條件下,把SysTick 效驗值設置成9000,將SysTick 時鐘設置為9MHz, 就能夠產生1ms的時間基值,即SysTick產生1ms的中斷。

延遲時間將不隨系統時鐘頻率改變。

固件庫(ST)中SysTick的相關函數:

1、SysTick_CounterCmd()//啟動 or關閉 or 清零 SysTick計數器

2、SysTick_ITConfig ()//打開or 關閉 SysTick中斷

3、SysTick_CLKSourceConfig( ) //設置SysTick時鐘源。

4、SysTick_SetReload ( )//設置SysTick重裝載值。

5、SysTick_GetCounter( )//獲取SysTick計數器的值

6、SysTick_GetFlagStatus( ) //檢測測定的SysTick是否被標記

初始化相關模塊:

SysTick_CounterCmd(SysTick_Counter_Disable);

SysTick_ITConfig(DISABLE);

SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8);
SysTick_SetReload(9000); // 設定SysTick達到1ms計數結束
SysTick_ITConfig(ENABLE); // 使能SysTick中斷

中斷處理:
void SysTickHandler (void)

{
if (TimingDelay != 0x00)
TimingDelay--;
}

延時代碼:
void Delay(u32 nTime) {
SysTick_CounterCmd(SysTick_Counter_Enable); // 使能SysTick計數器
TimingDelay = nTime; // 讀取延時時間
while(TimingDelay != 0); // 判斷延時是否結束
SysTick_CounterCmd(SysTick_Counter_Disable); // 關閉SysTick計數器
SysTick_CounterCmd(SysTick_Counter_Clear); // 清除SysTick計數器
}

應用代碼:
Delay(300); // 延時 300ms


相關焦點

  • STM32F103 systick 是做什麼用呢
    它會根據「心跳」的節拍來工作,把整個時間段分成很多小小的時間片,每個任務每次只能運行一個「時間片」的時間長度就得退出給別的任務運行,這樣可以確保任何一個任務都不會霸佔整個系統不放。這個心跳,可以通過定時器來周期性觸發,而這個定時器就是systick。很明顯,這個「心跳」是不允許任何人來隨意地訪問和修改的。
  • 系統滴答SysTick兩種實現方式
    其實系統滴答就是一個24位的倒計時定時器,而且能夠自動裝置。儀器8位單片機如AVR/51要跑作業系統,需要專門佔用一個定時器,但是由於優先級的原因很容易被其他程序打亂。而STM32以Cortex M3為內核,它專門開闢了一個硬體定時器,具有很高的優先級,即使在系統處於睡眠狀態也能工作。
  • 系統時鐘和定時器——PWM定時器
    時鐘控制邏輯給整個晶片提供3種時鐘:FCLK用於CPU核;HCLK用於AHB總線設備,比如CPU核、存儲器控制器、中斷控制器、DMA和USB主機模塊等;PCLK用於APB總線上的設備,比如WATCHDOG、IIS、IIC、PWM、MMC、ADC、RTC等等。
  • STM32之時鐘頻率和定時器時鐘講解
    在stm32固件庫3.0中對時鐘頻率的選擇進行了大大的簡化,原先的一大堆操作都在後臺進行。系統給出的函數為SystemInit()。但在調用前還需要進行一些宏定義的設置,具體的設置在system_stm32f10x.c文件中。
  • 如何使用STM32實現systick的精確延時
    打開APP 如何使用STM32實現systick的精確延時 工程師周亮 發表於 2018-11-21 15:54:23 SYSTICK
  • 在應用程式中使定時器或計數器改善微控制器的應用功能
    在應用程式中使定時器或計數器改善微控制器的應用功能 佚名 發表於 2020-02-04 13:49:00 定時器和計數器也許在MCU設計中最普遍的外設。
  • 基於51單片機定時器的電子時鐘設計方案
    今天我們將會為大家分享一種比較基礎的電子時鐘設計方案,該方案基於51單片機定時器進行設計,精度較高,時鐘鬧鐘調節簡單。鬧鐘和時鐘的時分秒的調節是由一個按鍵控制,而另外一個按鍵控制時鐘和鬧鐘的時間的調節。當按下鬧鐘按鍵K3時時鐘就會進入設置時間界面,但是時鐘不會停止工作,按K2鍵就可以對時鐘和鬧鐘要設置的時間進行調整。單片機利用外部12MHZ晶振構成振蕩電路作為時鐘源,時鐘電路的系統結構框圖如下圖圖1所示,時鐘電路原理如下圖圖2所示。
  • STM32系統滴答_及不可不知的延時技巧上
    個人認為,若要實現systick精確延時,最好把systick優先級設置高一些,例如NVIC_SetPriority(SysTick_IRQn,0);即把SCB->SHP[11] = 0x00;則可達到systick優先級高於任合外部中斷的效果,此時延時會比較精準。
  • msp430系統時鐘詳解
    在這三個時鐘源的獨立工作或是在三個時鐘源相互協調配合(是可以通過軟體配置的)下為2553系統提供了系統時鐘ACLK、MCLK和SMCLK。   上電後,系統默認使用的主系統時鐘MCLK和子系統時鐘SMCLK是同為DCOCLK產生的1MHz時鐘,而輔助時鐘ACLK則為內部VLOCLK產生的12KHz時鐘。
  • STM32通用定時器(時鐘選擇,模式選擇)
    ITRx:內部觸發x(由另外的定時器觸發)TI1F_ED:TI1的邊沿檢測器。TI1FP1/2:濾波後定時器1/2的輸入TRGI:觸發輸入TRGO:觸發輸出 CK_PSC:應該叫分頻器時鐘輸入CK_CNT:定時器時鐘。
  • PLC定時器應用梯形圖,只要學會這2個參數,輕鬆設置定時器參數
    對於定時器也是如此。(2) 在PLC中,不同定時器的工作方式是不一樣的,對於FX2N型PLC,普通的定時器是在執行(讀)到線圈指令時,對定時器的計時值進行刷新。因此定時器接點的最大正誤差為兩個掃描周期。(5)由於定時器實際上是對時鐘脈衝進行計數的計數器,所以如果當定時器TO剛開始計時正好出現在時鐘的下降沿前一點,如圖(C)所示(6)定時器T0計數一次,50ms後又在時鐘的上升沿計數一次,這樣就相當於產生了150ms的負誤差。
  • 基於VxWorks作業系統的通用定時器設計
    摘要 VxWorks作業系統以其強實時性、可剪裁性等特點得到了廣泛應用,但其並未提供通用的定時器模塊。為解決某機載發射裝置控制盒中VxWorks系統的精確定時問題,文中在分析多種定時方式的基礎上,利用輔助時鐘中斷,通過創建定時節點,構造節點鍊表,設計了基於輔助時鐘的通用定時器模塊。經測試表明,該模塊實現了毫秒級定時,滿足了某發射裝置的定時需求,並為今後類似系統的精確定時需求提供了方便。
  • Linux C/C++定時器的實現原理和使用方法
    定時器的實現依賴的是CPU時鐘中斷,時鐘中斷的精度就決定定時器精度的極限。一個時鐘中斷源如何實現多個定時器呢?對於內核,簡單來說就是用特定的數據結構管理眾多的定時器,在時鐘中斷處理中判斷哪些定時器超時,然後執行超時處理動作。
  • MSP430系統應用結構設計與選型
    MSP430系列單片機作為性能優異的MCU在中國已經得到了廣泛的應用。MSP430具有高集成度,通常在單個晶片上集成了12位的A/D轉換器、比較器、多個定時器,以及片內USART、看門狗、片內DCO等。一般單片就可滿足大多數的應用需要。
  • STM32 V3.5固件庫下SysTick的使用
    SysTick定時器被捆綁在NVIC中,用於產生SysTick異常(異常號:15)。在以前,作業系統還有所有使用了時基的系統,都必須一個硬體定時器來產生需要的「滴答」中斷,作為整個系統的時基。
  • 可提高實時時鐘長期計時準確度時鐘程序算法
    對於採用可編程分頻定時器,由軟體模擬時鐘功能的軟體實時時鐘,則有更好的提高計時準確度的方法。因為定時器的分頻係數是可以動態改變的,如89C52內置的16位計數器,分頻係數可以在1~216內任意選取。令N=
  • 單片機原理|定時器/計數器的工作原理及應用作業
    A、定時器T0採用方式1,定時5ms,每200次中斷後實現1s到B、定時器T0採用方式2,定時100us,每1000次中斷後實現1s到C、定時器T0採用方式A、由內部時鐘頻率定時,一個時鐘周期加1B、由內部時鐘頻率定時,一個機器周期加1C、由外部時鐘頻率定時,一個時鐘周期加1
  • Inphi公司推出全球功耗最低面向模塊應用的10G/25G/28G四重NRZ時鐘...
    Inphi公司推出全球功耗最低面向模塊應用的10G/25G/28G四重NRZ時鐘和數據恢復重定時器   面向通信
  • stm32定時器時間計算
    STM32定時器的工作原理   STM32之所以能夠實現定時,是單片機內部在計數脈衝(來自晶振)   T=1/F (F為頻率)   例如:我們以51單片機舉例,假設單片機搭配12MHz的晶振,由於51單片機是12分頻(即1個機器周期有12個時鐘周期),則單片機的最小定時時間為