0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內(nèi)不再提示

SysTick時鐘

汽車電子技術 ? 來源:滑小稽筆記 ? 作者:電子技術園地 ? 2023-03-01 17:40 ? 次閱讀

4.1 SysTick概述

Cortex-M3內(nèi)核的處理器,內(nèi)部包含了一個SysTick定時器,SysTick是一個24位的倒計數(shù)定時器,當計數(shù)到0時,將從ReLoad寄存器中自動重裝載定時初值,開始新一輪計數(shù)。只要不把它在SysTick控制及狀態(tài)寄存器中的使能位清除,就永不停息。

   SysTick定時器能產(chǎn)生中斷,CM3為它專門開出一個異常類型,并且在向量表中有它的一席之地。它使操作系統(tǒng)和其它系統(tǒng)軟件在CM3器件間的移植變得簡單多了,因為在所有CM3產(chǎn)品間對其處理都是相同的。

   我們在程序中使用SysTick時鐘來作為延時函數(shù),這樣就不會占用定時器資源,SysTick時鐘是一個直接掛載在AHB總線上的一個定時器,輸入的時鐘頻率直接就是AHB總線上的時鐘頻率,使用SysTick定時器進行延時,可以精確的設置延時時間,與之前51單片機for循環(huán)累加的精度是完全不一樣的。

4.2 相關寄存器

4.2.1 控制及狀態(tài)寄存器CTRL

31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
- flag
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
- CLK IRQ EN

Bit 16:計數(shù)狀態(tài)(只讀)

0:該位數(shù)據(jù)已經(jīng)被讀走

   1:上次讀取到該位的數(shù)據(jù)后,計數(shù)值達到了0

Bit 2:時鐘源選擇

0:外部時鐘源

   1:內(nèi)核時鐘

Bit 1:中斷標志位

0:計數(shù)到0不產(chǎn)生中斷

   1:計數(shù)到0產(chǎn)生SysTick中斷

Bit 0:定時器使能位

0:關閉定時器

   1:開啟定時器

4.2.2 重裝載數(shù)值寄存器LOAD

31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
- ReLoad[7:0]
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
ReLoad[15:0]

ReLoad[23:0]:當計數(shù)到0后,該寄存器的數(shù)據(jù)自動更新到VAL中。

4.2.3 當前數(shù)值寄存器VAL

31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
- VAL[7:0]
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
VAL[15:0]

VAL[23:0]:讀取時返回當前倒計數(shù)的值,寫它:清零,同時還會清除在SysTick控制及狀態(tài)寄存器中的flag標志。

4.2.4 校準值寄存器CALIB

31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
REF flag - TENMS[7:0]
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
TENMS[15:0]

Bit 31:外部參考時鐘可用標志

0:外部參考時鐘可用

   1:外部參考時鐘不可用

Bit 30:校準值10ms標志

0:校準是準確的10ms

   1:校準不是準確的10ms

Bit 23~Bit 0:10ms的時間內(nèi)倒計數(shù)的格數(shù)。若該值讀回零,則表示無法使用校準功能

4.3 SysTick驅(qū)動函數(shù)

4.3.1 創(chuàng)建目錄

(1)在SYSTEM目錄下創(chuàng)建delay文件夾,并創(chuàng)建delay.c和delay.h文件。如下圖所示。

圖片

圖片

(2)將delay.c添加進工程,delay.h添加進程序。

圖片

圖片

(3)在delay.h文件中輸入如下內(nèi)容。

圖片

(4)底層寄存器文件添加寄存器組

圖片

(5)底層寄存器文件添加基礎地址

圖片

4.3.2 初始化

圖片

這里首先選擇外部時鐘源,由于系統(tǒng)時鐘72MHz,并且SYSTICK時鐘固定位系統(tǒng)時鐘的1/8,所以1us的計數(shù)脈沖實際是72/8,也就是9個脈沖才是1us,這個1us的脈沖數(shù)就是基礎時鐘。

4.3.3 us級別延時函數(shù)

圖片

4.3.4 ms級別延時函數(shù)

圖片

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 處理器
    +關注

    關注

    68

    文章

    19293

    瀏覽量

    229964
  • 定時器
    +關注

    關注

    23

    文章

    3250

    瀏覽量

    114881
  • Systick
    +關注

    關注

    0

    文章

    62

    瀏覽量

    13106
收藏 人收藏

    評論

    相關推薦

    systick時鐘節(jié)拍和精確延時問題

    我需要用systick時鐘節(jié)拍設置成1ms,以便以1ms/次的速率產(chǎn)生一個周期性中斷,同時我還需要1us以及1ms的精確延時,這個有沒有辦法實現(xiàn)啊,延時主要用在dht11傳感器讀取數(shù)據(jù),只要能精確到微秒或是能夠讀出dht11的數(shù)據(jù),即使不太精確也行,求大神指點解決思路
    發(fā)表于 05-14 16:18

    SysTick時鐘是指外部8M時鐘還是PLL倍頻后的系統(tǒng)時鐘?

    SysTick->CTRL|=0xfffffffb;//設置外部時鐘作為SysTick時鐘這個是把外部時鐘設置為
    發(fā)表于 06-18 09:00

    使用FreeRTOS時Systick時鐘的配置分享

    FreeRTOS按照教程移植好之后就可以使用了。需要注意的是從官網(wǎng)下載的針對keil環(huán)境下STM32F103的FreeRTOS文件,使用systick時鐘作為rtos的時鐘,而這個systic
    發(fā)表于 07-30 11:39

    STM32的SysTick時鐘源是來自Cortex系統(tǒng)定時器嗎

    置頂/星標公眾號,不錯過每一條消息!有位朋友在后臺大概問了這樣一個問題:STM32的SysTick時鐘源是來自Cortex系統(tǒng)定時器嗎?引伸:為什么ST...
    發(fā)表于 08-19 08:19

    SYSTICK時鐘固定為HCLK時鐘的1/8

    delay函數(shù)static u8fac_us=0;//us延時倍乘數(shù)static u16 fac_ms=0;//ms延時倍乘數(shù)//初始化延遲函數(shù)//SYSTICK時鐘固定為HCLK時鐘的1/8
    發(fā)表于 08-19 07:22

    STM32的SysTick時鐘

    有位朋友在后臺大概問了這樣一個問題:STM32的SysTick時鐘源是來自Cortex系統(tǒng)定時器嗎?引伸:為什么STM32CubeMX中Cortex系統(tǒng)定時器可選擇1分頻(和8分頻)?1寫在前面看到
    發(fā)表于 08-19 06:47

    請問STM32中如何使用systick時鐘進行延時的中斷與非中斷?

    請問STM32中如何使用systick時鐘進行延時的中斷與非中斷?
    發(fā)表于 11-16 07:56

    STM32的SysTick時鐘源到底是從哪來呢

    STM32的SysTick時鐘源來自哪里?STM32的SysTick時鐘源是來自Cortex系統(tǒng)定時器嗎?
    發(fā)表于 11-24 08:05

    STM32的SysTick時鐘源是來自Cortex系統(tǒng)定時器嗎

    STM32的SysTick時鐘源是來自Cortex系統(tǒng)定時器嗎?為什么STM32CubeMX中Cortex系統(tǒng)定時器可選擇1分頻(和8分頻)?
    發(fā)表于 11-24 07:24

    SysTick時鐘簡介

    。不過,STCLK 的具體來源則由芯片設計者決定,因此不同產(chǎn)品之間的時鐘頻率可能會大不相同,你需要查找芯片的器件手冊來決定選擇什么作為時鐘源。Cortex-M3 的內(nèi)核中包含一個 SysTick
    發(fā)表于 02-18 07:53

    CH579M的SysTick時鐘如何設置?

    當系統(tǒng)嘀嗒時鐘設定為 32MHz,系統(tǒng)嘀嗒校準值固定為 32000,將產(chǎn)生 1mS 時間基準。(SysTick時鐘如何設置,沒有找到設置的函數(shù))
    發(fā)表于 08-25 07:33

    STM32的SysTick時鐘源是來自Cortex系統(tǒng)定時器嗎?

    初始化調(diào)用這段代碼之后,SysTick將會實現(xiàn)1ms中斷一次。這段代碼實現(xiàn)1ms中斷一次相信大家都能理解,但是這里SysTick初始化和上面說的時鐘『/8』有關系嗎?
    的頭像 發(fā)表于 04-03 13:54 ?5373次閱讀
    STM32的<b class='flag-5'>SysTick</b><b class='flag-5'>時鐘</b>源是來自Cortex系統(tǒng)定時器嗎?

    STM32中的SysTick時鐘源來自哪里?

    STM32的SysTick時鐘源來自哪里?
    的頭像 發(fā)表于 03-03 14:32 ?7883次閱讀

    STM32入門學習筆記之SysTick時鐘

    Cortex-M3內(nèi)核的處理器,內(nèi)部包含了一個SysTick定時器,SysTick是一個24位的倒計數(shù)定時器,當計數(shù)到0時,將從ReLoad寄存器中自動重裝載定時初值,開始新一輪計數(shù)。只要不把它在SysTick控制及狀態(tài)寄存器中
    的頭像 發(fā)表于 02-16 09:59 ?1083次閱讀
    STM32入門學習筆記之<b class='flag-5'>SysTick</b><b class='flag-5'>時鐘</b>

    STM32的SysTick時鐘源來自哪里?

    STM32的SysTick時鐘源來自哪里?
    的頭像 發(fā)表于 10-26 15:58 ?2000次閱讀
    STM32的<b class='flag-5'>SysTick</b><b class='flag-5'>時鐘</b>源來自哪里?