<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>
0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

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

3天內不再提示

淺析STM32 Systick查詢定時的處理過程

冬至子 ? 來源:紛紜雜談 ? 作者:CY_CHEN ? 2023-07-21 17:47 ? 次閱讀

STM32處理器有一個24位的系統滴答定時器SysTick,它從重新加載值開始倒數到0,然后在下一個時鐘邊緣重新加載(包裝到)STK_LOAD寄存器中的值,然后在隨后的時鐘上倒數。

圖片

計數標志位COUNTFLAG在系統控制和狀態寄存器STK_CTRL的16位,當計時器減計數到0時,返回1。

時鐘源選擇位CLKSOURCE在系統控制和狀態寄存器STK_CTRL的2位,賦值為0時為8分頻,賦值為1時為1分頻。想要計數速度更快可以選擇1分頻的時鐘源。

SysTick異常請求允許位TICKINT在系統控制和狀態寄存器STK_CTRL的1位,賦值為0時禁止異常請求,賦值為1時允許異常請求。軟件可以使用COUNTFLAG來判斷SysTick是否曾經被計數為零。

計數使能位在系統控制和狀態寄存器STK_CTRL的0位,賦值0時禁止計數,賦值1時使能計數。

圖片

重裝載值RELOAD在SysTick重載值寄存器STK_LOAD的0~23位,加載寄存器指定在啟用計數器時和計數器達到0時加載到當前值寄存器STK_VAL的起始值。

圖片

當前的計數器值CURRENT在當前值寄存器STK_VAL的1~23位。前值寄存器STK_VALSysTick計數器的當前值。讀取返回SysTick計數器的當前值。任何值的寫入都會將字段清除為0,并將STK_CTRL寄存器中的COUNTFLAG位清除為0。

查詢us、ms延時函數

void Systick_Delayus(u32 us)
{
  SysTick- >CTRL &=~ (1< 2);                   //選擇時鐘源,8分頻 
  SysTick- >LOAD  =  21*us - 1;                //賦值裝載值
  SysTick- >VAL   =    0;                      //清除當前值
  SysTick- >CTRL  |=  1< 0;                    //使能計數器
  while((SysTick- >CTRL  &  (1< 16)) == 0);    //判斷計數是否結束
  SysTick- >CTRL  &=~  (1< 0);                 //禁止計數器
}
void Systick_Delayms(u16 ms)
{
  Systick_Delayus(ms * 1000);
}

圖片

從時鐘樹可以知道,系統時鐘168Mhz,8分頻后得到滴答定時器時鐘為21Mhz,裝載值(需要延時時間)可根據時鐘頻率計算求得,每秒可計數21000000次,每微秒可計數21次。裝載值和當前值都是24位,最大為16777215,最大微秒定時798915us,最大毫秒定時798ms。

結合LED燈和Systick定時讓LED燈500ms閃爍一次,主函數為

#include "stm32f4xx.h"
#include "led.h"
#include "delay.h"


int main()
{
  LED_Init();              //初始化LED燈

  while(1)                //點亮或熄滅LED燈
  {
    GPIOH- >ODR      &=~    (0x01< 10);      //輸出為0,led燈亮
    GPIOH- >ODR      &=~    (0x01< 11);      //輸出為0,led燈亮
    Systick_Delayus(500000);
    GPIOH- >ODR      |=    (0x01< 10);      //輸出為1,led燈滅
    GPIOH- >ODR      |=    (0x01< 11);      //輸出為1,led燈滅
    Systick_Delayms(500);
  }
}

編譯成功后將程序燒入,LED每500ms閃爍一次,Systick查詢定時成功。

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

    關注

    22

    文章

    1563

    瀏覽量

    107138
  • 計數器
    +關注

    關注

    32

    文章

    2209

    瀏覽量

    93376
  • 狀態寄存器
    +關注

    關注

    0

    文章

    37

    瀏覽量

    7034
  • Systick
    +關注

    關注

    0

    文章

    62

    瀏覽量

    12968
  • STM32處理器
    +關注

    關注

    0

    文章

    5

    瀏覽量

    1115
收藏 人收藏

    評論

    相關推薦

    STM32 SYSTICK定時器常見問題

    我們知道,STM32庫函數里通常使用來自內核的系統定時SYSTICK作為時基,實現計數延時。一般來講,ST公司提供的庫函數里將SYSTICK定時
    發表于 09-13 16:20 ?2550次閱讀

    CKS32F4xx系列MCU SysTick定時器的原理及使用方法

    本課將為大家講解CKS32F4xx系列產品的SysTick定時器原理及使用方法。SysTick定時器也叫SysTick滴答
    的頭像 發表于 12-18 09:21 ?609次閱讀
    CKS32F4xx系列MCU <b class='flag-5'>SysTick</b><b class='flag-5'>定時</b>器的原理及使用方法

    數字電視的典型的處理過程

    典型的處理過程 下面介紹數字電視的幾個典型的處理過程。
    發表于 07-31 14:23 ?1423次閱讀
    數字電視的典型的<b class='flag-5'>處理過程</b>

    淺析單片機中斷處理過程

    中斷處理過程可分為中斷響應、中斷處理和中斷返回三個階段。
    的頭像 發表于 11-06 14:31 ?1.7w次閱讀
    <b class='flag-5'>淺析</b>單片機中斷<b class='flag-5'>處理過程</b>

    STM32 Systick系統定時

    @STM32 Systick系統定時器#簡介在之前的實驗中,我們只用到的delay函數通過while語句做循環的方式來占用時間,達到延時的目的。但是這種方式延時的時間不好把控,無法應用于更加
    發表于 11-25 10:06 ?6次下載
    <b class='flag-5'>STM32</b> <b class='flag-5'>Systick</b>系統<b class='flag-5'>定時</b>器

    利用systick實現1s定時

    。SysTick一般用于操作系統的產生時基功能,以維持操作系統的“心跳”。問題描述:利用stm32自帶的滴答定時器,也就是systick定時
    發表于 11-25 11:06 ?26次下載
    利用<b class='flag-5'>systick</b>實現1s<b class='flag-5'>定時</b>

    嵌入式單片機基礎篇(十)之Systick定時器原理及應用

    來做延時,或者實時系統的心跳時鐘。這樣可以節省MCU資源,不用浪費一個定時器。比如UCOS中,分時復用,需要一個最小的時間戳,一般在STM32+UCOS系統中,都采用Systick做UCOS心跳時鐘。(3)
    發表于 11-26 11:51 ?7次下載
    嵌入式單片機基礎篇(十)之<b class='flag-5'>Systick</b><b class='flag-5'>定時</b>器原理及應用

    STM32入門(十五)----SysTick系統定時

    的Cortex-M內核的單片機都具有這個定時器?!?b class='flag-5'>STM32參考手冊》里的一句話:關于Cortex-M3核心、 SysTick定時器和NVIC的詳細說明,請參考另一篇ST的文檔和一篇A
    發表于 12-01 15:06 ?8次下載
    <b class='flag-5'>STM32</b>入門(十五)----<b class='flag-5'>SysTick</b>系統<b class='flag-5'>定時</b>器

    STM32F4: Systick滴答定時器-延時函數講解(五)

    CM3,CM4內核芯片,都有Systick定時器。Systick定時器常用來做延時,或者實時系統的心跳時鐘。這樣可以節省MCU資源,不用浪費一個定時
    發表于 12-01 15:21 ?15次下載
    <b class='flag-5'>STM32</b>F4: <b class='flag-5'>Systick</b>滴答<b class='flag-5'>定時</b>器-延時函數講解(五)

    Stm32入門——Systick定時

    Stm32入門——Systick定時Systick定時器是什么?從原理上來說,Systick
    發表于 12-07 17:51 ?12次下載
    <b class='flag-5'>Stm32</b>入門——<b class='flag-5'>Systick</b><b class='flag-5'>定時</b>器

    STM32學習筆記(5)——系統定時SysTick

    單獨拿出來講的一個內核外設(所以不要期望在STM32中文參考手冊找到它!即使找到也只會叫你看cm3內核編程手冊),說明它真的很重要。STM32學習筆記(5)——系統定時SysTick
    發表于 12-23 19:56 ?4次下載
    <b class='flag-5'>STM32</b>學習筆記(5)——系統<b class='flag-5'>定時</b>器<b class='flag-5'>SysTick</b>

    STM32筆記(七)---Systick系統定時

    SysTick系統定時器文章目錄SysTick系統定時器一、 概念1-1 Systick簡介1-2 Sy
    發表于 12-23 20:01 ?1次下載
    <b class='flag-5'>STM32</b>筆記(七)---<b class='flag-5'>Systick</b>系統<b class='flag-5'>定時</b>器

    初學stm32-Systick滴答時鐘定時

    系統的心跳時鐘。這樣可以節省MCU資源,不用浪費一個定時器。比如uCOS中,分時復用,需要一個最小的時間戳,一般在STM32+UCOS系統中,都采用Systick做uCOS心跳時鐘。Systi
    發表于 12-31 19:46 ?15次下載
    初學<b class='flag-5'>stm32-Systick</b>滴答時鐘<b class='flag-5'>定時</b>

    STM32SysTick滴答定時器(delay延時函數講解)

    Systick定時器,是一個簡單的定時器,對于CM3、CM4內核芯片,都有Systick定時器。Syst
    發表于 02-10 10:35 ?13次下載
    【<b class='flag-5'>STM32</b>】<b class='flag-5'>SysTick</b>滴答<b class='flag-5'>定時</b>器(delay延時函數講解)

    STM32 SysTick定時器講解

    本文將介紹SysTick定時器、其工作原理與寄存器、及對應的應用實例
    的頭像 發表于 04-21 11:31 ?1351次閱讀
    <b class='flag-5'>STM32</b> <b class='flag-5'>SysTick</b><b class='flag-5'>定時</b>器講解
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>