STM32F103ZET6系統定時器SysTick


1、系統定時器SysTick的簡介

  系統定時器SysTick屬於內核外設,內嵌在NVIC中。SysTick是一個24位的向下遞減的計數器,計數器根據SysTick的時鍾源計數,當SysTick的計數器計數到0的時候,SysTick就產生一次中斷,並且SysTick的重裝載寄存器會給計數器重新賦值,以此循環往復。

  SysTick一般用於帶操作系統的應用,用來產生時基,維持操作系統的心跳。

2、SysTick的寄存器

  SysTick有4個寄存器:

    • 控制及狀態寄存器CTRL;
    • 重裝載數值寄存器LOAD;
    • 當前數值寄存器VAL,即SysTick的計數器;
    • 校准數值寄存器CALIB;

  一般只需要配置CTRL、LOAD、VAL這三個寄存器,CALIB基本不使用。

  控制及狀態寄存器CTRL

  CTRL的bit16位COUNTFLAG用來判斷SysTick計數器是否遞減到0,當SysTick遞減到0的時候,COUNTFLAG會被置1,如果沒有使用SysTick的中斷功能,可以通過查詢該位是否為1來判斷SysTick定時器是否溢出。

  CTRL的bit2位CLKSOURCE用來選擇SysTick的時鍾源:

  當CLKSOURCE = 0時,SysTick的時鍾源為AHB/8;

當CLKSOURCE = 1時,SysTick的時鍾源為AHB;

一般ABH為SYSCLK的1分頻,所以SysTick的時鍾源可以選擇為SYSCLK或SYSCLK/8。

  CTRL的bit1位TICKINT用來設置當SysTick計數到0的時候是否產生中斷:

  當TICKINT = 0時,在SysTick計數到0的時候不會產生中斷;

當TICKINT = 1時,當SysTick計數到0的時候產生中斷。

  CTRL的bit1位ENABLE是SysTick的使能位,當ENABLE = 1時,SysTick開始計數。

  重裝載數值寄存器RELOAD

  RELOAD寄存器是SysTick的自動重載數值寄存器,當SysTick的計數器遞減到0的時候,RELOAD寄存器的值會重新賦值給SysTick的計數器,讓SysTick可以重復計時。

  當前數值寄存器VAL

  當去讀取VAL寄存器的值時,返回的是SysTick計數器的當前值;當去寫VAL寄存器的時候,會使SysTick計數器的值清零,而且還會清除CTRL寄存器的bit16位COUNNTFLAG。

3、HAL庫操作SysTick

  SysTick相關的寄存器定義和庫函數操作都是在Core_CM3.h頭文件內實現的。

  在HAL中使用SysTick比較簡單,只需要通過Core_CM3.h文件中的SysTick_Config函數就可以了,通過將參數傳入SysTick_Config函數設置SysTick的自動重載數值。

  調用SysTick_Config函數,SysTick的時鍾源會被配置成AHB,並且使能中斷,SysTick的中斷優先級也在SysTick_Config函數中配置了。如果需要更改配置,可以找到SysTick_Config函數,並修改。

  SysTick的中斷服務函數在stm32f1xx_it.c文件中,SysTick的中斷處理過程在SysTick_Handler中實現。

  初始化代碼如圖:

  中斷服務函數

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM