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

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

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

淺析STM32 Systick查詢定時(shí)的處理過(guò)程

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

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

圖片

計(jì)數(shù)標(biāo)志位COUNTFLAG在系統(tǒng)控制和狀態(tài)寄存器STK_CTRL的16位,當(dāng)計(jì)時(shí)器減計(jì)數(shù)到0時(shí),返回1。

時(shí)鐘源選擇位CLKSOURCE在系統(tǒng)控制和狀態(tài)寄存器STK_CTRL的2位,賦值為0時(shí)為8分頻,賦值為1時(shí)為1分頻。想要計(jì)數(shù)速度更快可以選擇1分頻的時(shí)鐘源。

SysTick異常請(qǐng)求允許位TICKINT在系統(tǒng)控制和狀態(tài)寄存器STK_CTRL的1位,賦值為0時(shí)禁止異常請(qǐng)求,賦值為1時(shí)允許異常請(qǐng)求。軟件可以使用COUNTFLAG來(lái)判斷SysTick是否曾經(jīng)被計(jì)數(shù)為零。

計(jì)數(shù)使能位在系統(tǒng)控制和狀態(tài)寄存器STK_CTRL的0位,賦值0時(shí)禁止計(jì)數(shù),賦值1時(shí)使能計(jì)數(shù)。

圖片

重裝載值RELOAD在SysTick重載值寄存器STK_LOAD的0~23位,加載寄存器指定在啟用計(jì)數(shù)器時(shí)和計(jì)數(shù)器達(dá)到0時(shí)加載到當(dāng)前值寄存器STK_VAL的起始值。

圖片

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

查詢us、ms延時(shí)函數(shù)

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

圖片

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

結(jié)合LED燈和Systick定時(shí)讓LED燈500ms閃爍一次,主函數(shù)為

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


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

  while(1)                //點(diǎn)亮或熄滅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查詢定時(shí)成功。

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

    關(guān)注

    22

    文章

    1592

    瀏覽量

    108323
  • 計(jì)數(shù)器
    +關(guān)注

    關(guān)注

    32

    文章

    2261

    瀏覽量

    94905
  • 狀態(tài)寄存器
    +關(guān)注

    關(guān)注

    0

    文章

    39

    瀏覽量

    7135
  • Systick
    +關(guān)注

    關(guān)注

    0

    文章

    62

    瀏覽量

    13131
  • STM32處理器
    +關(guān)注

    關(guān)注

    0

    文章

    5

    瀏覽量

    1138
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    STM32 SYSTICK定時(shí)器常見(jiàn)問(wèn)題

    我們知道,STM32庫(kù)函數(shù)里通常使用來(lái)自內(nèi)核的系統(tǒng)定時(shí)SYSTICK作為時(shí)基,實(shí)現(xiàn)計(jì)數(shù)延時(shí)。一般來(lái)講,ST公司提供的庫(kù)函數(shù)里將SYSTICK定時(shí)
    發(fā)表于 09-13 16:20 ?3104次閱讀

    數(shù)字電視的典型的處理過(guò)程

    典型的處理過(guò)程 下面介紹數(shù)字電視的幾個(gè)典型的處理過(guò)程。
    發(fā)表于 07-31 14:23 ?1552次閱讀
    數(shù)字電視的典型的<b class='flag-5'>處理過(guò)程</b>

    淺析單片機(jī)中斷處理過(guò)程

    中斷處理過(guò)程可分為中斷響應(yīng)、中斷處理和中斷返回三個(gè)階段。
    的頭像 發(fā)表于 11-06 14:31 ?1.8w次閱讀
    <b class='flag-5'>淺析</b>單片機(jī)中斷<b class='flag-5'>處理過(guò)程</b>

    STM32單片機(jī)對(duì)Systick心跳定時(shí)器的設(shè)計(jì)

    用途: 1.產(chǎn)生操作系統(tǒng)的時(shí)鐘節(jié)拍 2.便于不同處理器之間程序移植 SysTick定時(shí)器被捆綁在NVIC中,異常號(hào)15 3.作為一個(gè)鬧鈴測(cè)量時(shí)間用于測(cè)量時(shí)間, 但當(dāng)
    發(fā)表于 12-11 15:44 ?4203次閱讀

    什么是SysTick定時(shí)器?實(shí)現(xiàn)STM32時(shí)鐘系統(tǒng)的詳細(xì)資料說(shuō)明

    什么是SysTick定時(shí)器?實(shí)現(xiàn)STM32時(shí)鐘系統(tǒng)的詳細(xì)資料說(shuō)明主要內(nèi)容包括了:Systick原理和配置方法,ALIENTEK 延時(shí)函數(shù)delay講解
    發(fā)表于 01-02 08:00 ?3次下載
    什么是<b class='flag-5'>SysTick</b><b class='flag-5'>定時(shí)</b>器?實(shí)現(xiàn)<b class='flag-5'>STM32</b>時(shí)鐘系統(tǒng)的詳細(xì)資料說(shuō)明

    如何使用STM32單片機(jī)systick來(lái)實(shí)現(xiàn)延時(shí)定時(shí)功能

    1、前言 CM4內(nèi)核的處理和CM3一樣,內(nèi)部都包含了一個(gè)SysTick定時(shí)器,SysTick 是一個(gè)24 位的倒計(jì)數(shù)定時(shí)器,當(dāng)計(jì)到0 時(shí),將
    的頭像 發(fā)表于 02-14 06:25 ?6928次閱讀
    如何使用<b class='flag-5'>STM32</b>單片機(jī)<b class='flag-5'>systick</b>來(lái)實(shí)現(xiàn)延時(shí)<b class='flag-5'>定時(shí)</b>功能

    【野火指南者】STM32F103延時(shí)函數(shù)及其系統(tǒng)定時(shí)器—SysTick

    學(xué)習(xí)目的:1、學(xué)習(xí)STM32的系統(tǒng)定時(shí)器及其相關(guān)的寄存器2、使用STM32的系統(tǒng)定時(shí)器來(lái)配置延時(shí)函數(shù)內(nèi)容介紹:一、Systick簡(jiǎn)介二、
    發(fā)表于 11-24 20:06 ?7次下載
    【野火指南者】<b class='flag-5'>STM32</b>F103延時(shí)函數(shù)及其系統(tǒng)<b class='flag-5'>定時(shí)</b>器—<b class='flag-5'>SysTick</b>

    STM32 Systick系統(tǒng)定時(shí)

    @STM32 Systick系統(tǒng)定時(shí)器#簡(jiǎn)介在之前的實(shí)驗(yàn)中,我們只用到的delay函數(shù)通過(guò)while語(yǔ)句做循環(huán)的方式來(lái)占用時(shí)間,達(dá)到延時(shí)的目的。但是這種方式延時(shí)的時(shí)間不好把控,無(wú)法應(yīng)用于更加
    發(fā)表于 11-25 10:06 ?6次下載
    <b class='flag-5'>STM32</b> <b class='flag-5'>Systick</b>系統(tǒng)<b class='flag-5'>定時(shí)</b>器

    STM32入門(十五)----SysTick系統(tǒng)定時(shí)

    的Cortex-M內(nèi)核的單片機(jī)都具有這個(gè)定時(shí)器。《STM32參考手冊(cè)》里的一句話:關(guān)于Cortex-M3核心、 SysTick定時(shí)器和NVIC的詳細(xì)說(shuō)明,請(qǐng)參考另一篇ST的文檔和一篇A
    發(fā)表于 12-01 15:06 ?8次下載
    <b class='flag-5'>STM32</b>入門(十五)----<b class='flag-5'>SysTick</b>系統(tǒng)<b class='flag-5'>定時(shí)</b>器

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

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

    Stm32入門——Systick定時(shí)

    Stm32入門——Systick定時(shí)Systick定時(shí)器是什么?從原理上來(lái)說(shuō),Systick
    發(fā)表于 12-07 17:51 ?12次下載
    <b class='flag-5'>Stm32</b>入門——<b class='flag-5'>Systick</b><b class='flag-5'>定時(shí)</b>器

    STM32學(xué)習(xí)筆記(5)——系統(tǒng)定時(shí)SysTick

    單獨(dú)拿出來(lái)講的一個(gè)內(nèi)核外設(shè)(所以不要期望在STM32中文參考手冊(cè)找到它!即使找到也只會(huì)叫你看cm3內(nèi)核編程手冊(cè)),說(shuō)明它真的很重要。STM32學(xué)習(xí)筆記(5)——系統(tǒng)定時(shí)SysTick
    發(fā)表于 12-23 19:56 ?4次下載
    <b class='flag-5'>STM32</b>學(xué)習(xí)筆記(5)——系統(tǒng)<b class='flag-5'>定時(shí)</b>器<b class='flag-5'>SysTick</b>

    STM32筆記(七)---Systick系統(tǒng)定時(shí)

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

    初學(xué)stm32-Systick滴答時(shí)鐘定時(shí)

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

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

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