娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

GD32開發(fā)實(shí)戰(zhàn)指南(基礎(chǔ)篇) 第5章 跳動(dòng)的心臟-Systick

發(fā)布者:心靈之旅最新更新時(shí)間:2024-11-08 來(lái)源: elecfans關(guān)鍵字:GD32  開發(fā)實(shí)戰(zhàn)  Systick 手機(jī)看文章 掃描二維碼
隨時(shí)隨地手機(jī)看文章

開發(fā)環(huán)境:

MDK:Keil 5.30

開發(fā)板:GD32F207I-EVAL

MCU:GD32F207IK

Cortex-M的內(nèi)核中包含Systick定時(shí)器了,只要是Cortex-M系列的MCU就會(huì)有Systick,因此這是通用的,下面詳細(xì)分析。


1 Systick工作原理分析

SysTick 定時(shí)器被捆綁在 NVIC 中,用于產(chǎn)生 SysTick 異常(異常號(hào) :15)。在以前,操作系統(tǒng)和所有使用了時(shí)基的系統(tǒng)都必須有一個(gè)硬件定時(shí)器來(lái)產(chǎn)生需要的“滴答”中斷,作為整個(gè)系統(tǒng)的時(shí)基。滴答中斷對(duì)操作系統(tǒng)尤其重要。例如,操作系統(tǒng)可以為多個(gè)任務(wù)分配不同數(shù)目的時(shí)間片,確保沒(méi)有一個(gè)任務(wù)能霸占系統(tǒng) ;或者將每個(gè)定時(shí)器周期的某個(gè)時(shí)間范圍賜予特定的任務(wù)等,操作系統(tǒng)提供的各種定時(shí)功能都與這個(gè)滴答定時(shí)器有關(guān)。因此,需要一個(gè)定時(shí)器來(lái)產(chǎn)生周期性的中斷,而且最好還讓用戶程序不能隨意訪問(wèn)它的寄存器,以維持操作系統(tǒng)“心跳”的節(jié)律。

1683642280703y06zbdqjnq

Cortex-M3 在內(nèi)核部分包含了一個(gè)簡(jiǎn)單的定時(shí)器——SysTick。因?yàn)樗械?CM3 芯片都帶有這個(gè)定時(shí)器,軟件在不同芯片生產(chǎn)廠商的 CM3 器件間的移植工作就得以簡(jiǎn)化。該定時(shí)器的時(shí)鐘源可以是內(nèi)部時(shí)鐘(FCLK,CM3 上的自由運(yùn)行時(shí)鐘),或者是外部時(shí)鐘。不過(guò),外部時(shí)鐘的具體來(lái)源則由芯片設(shè)計(jì)者決定,因此不同產(chǎn)品之間的時(shí)鐘頻率可能大不相同。因此,需要閱讀芯片的使用手冊(cè)來(lái)確定選擇什么作為時(shí)鐘源。在 GD32 中SysTick 以 HCLK(AHB 時(shí)鐘)或 HCLK/8 作為運(yùn)行時(shí)鐘,見上圖。

SysTick 定時(shí)器能產(chǎn)生中斷,CM3 為它專門開出一個(gè)異常類型,并且在向量表中有它的一席之地。它使操作系統(tǒng)和其他系統(tǒng)軟件在 CM3 器件間的移植變得簡(jiǎn)單多了,因?yàn)樵谒?CM3 產(chǎn)品間,SysTick 的處理方式都是相同的。SysTick 定時(shí)器除了能服務(wù)于操作系統(tǒng)之外,還能用于其他目的,如作為一個(gè)鬧鈴、用于測(cè)量時(shí)間等。 Systick 定時(shí)器屬于Cortex 內(nèi)核部件 ,可以參考《ARM Cortex-M3 權(quán)威指南》((英)JosephYiu 著,宋巖譯,北京航空航天大學(xué)出版社出版)來(lái)了解。

2 Systick寄存器分析

在傳統(tǒng)的嵌入式系統(tǒng)軟件按中通常實(shí)現(xiàn) Delay(N) 函數(shù)的方法為:

for(i = 0; i <= x; i ++);

x --- ;

對(duì)于GD32系列微處理器來(lái)說(shuō),執(zhí)行一條指令只有幾十個(gè) ns,進(jìn)行 for 循環(huán)時(shí),要實(shí)現(xiàn) N 毫秒的 x 值非常大,而且由于系統(tǒng)頻率的寬廣,很難計(jì)算出延時(shí) N 毫秒的精確值。針對(duì)GD32 微處理器,需要重新設(shè)計(jì)一個(gè)新的方法去實(shí)現(xiàn)該功能,以實(shí)現(xiàn)在程序中使用 Delay(N)。

Cortex-M3 的內(nèi)核中包含一個(gè) SysTick 時(shí)鐘。SysTick 為一個(gè) 24 位遞減計(jì)數(shù)器,SysTick 設(shè)定初值并使能后,每經(jīng)過(guò) 1 個(gè)系統(tǒng)時(shí)鐘周期,計(jì)數(shù)值就減 1。計(jì)數(shù)到 0 時(shí),SysTick 計(jì)數(shù)器自動(dòng)重裝初值并繼續(xù)計(jì)數(shù),同時(shí)內(nèi)部的 COUNTFLAG 標(biāo)志會(huì)置位,觸發(fā)中斷 (如果中斷使能情況下)。

在 GD32 的應(yīng)用中,使用 Cortex-M3 內(nèi)核的 SysTick 作為定時(shí)時(shí)鐘,設(shè)定每一毫秒產(chǎn)生一次中斷,在中斷處理函數(shù)里對(duì) N 減一,在Delay(N) 函數(shù)中循環(huán)檢測(cè) N 是否為 0,不為 0 則進(jìn)行循環(huán)等待;若為 0 則關(guān)閉 SysTick 時(shí)鐘,退出函數(shù)。

注: 全局變量 TimingDelay , 必須定義為 volatile 類型 , 延遲時(shí)間將不隨系統(tǒng)時(shí)鐘頻率改變。

Cortex-M3中的Systick部分內(nèi)容屬于NVIC控制部分,一共有4個(gè)寄存器,名稱和地址分別是:

  • STK_CTRL,0xE000E010--控制寄存器

1683642281331ygg5hvor5x

第0位:ENABLE,Systick 使能位

(0:關(guān)閉Systick功能;1:開啟Systick功能)

第1位:TICKINT,Systick 中斷使能位

(0:關(guān)閉Systick中斷;1:開啟Systick中斷)

第2位:CLKSOURCE,Systick時(shí)鐘源選擇

(0:使用HCLK/8 作為Systick時(shí)鐘;1:使用HCLK作為Systick時(shí)鐘)

第16位:COUNTFLAG,Systick計(jì)數(shù)比較標(biāo)志,如果在上次讀取本寄存器后,SysTick 已經(jīng)數(shù)到了0,則該位為1。如果讀取該位,該位將自動(dòng)清零

  • STK_LOAD, 0xE000E014--重載寄存器

1683642281747f5i5uqwxre

Systick是一個(gè)遞減的定時(shí)器,當(dāng)定時(shí)器遞減至0時(shí),重載寄存器中的值就會(huì)被重裝載,繼續(xù)開始遞減。STK_LOAD 重載寄存器是個(gè)24位的寄存器最大計(jì)數(shù)0xFFFFFF。

  • STK_VAL, 0xE000E018--當(dāng)前值寄存器

1683642282071e7f33le3xp

也是個(gè)24位的寄存器,讀取時(shí)返回當(dāng)前倒計(jì)數(shù)的值,寫它則使之清零,同時(shí)還會(huì)清除在SysTick控制及狀態(tài)寄存器中的COUNTFLAG標(biāo)志。

  • STK_CALRB, 0xE000E01C--校準(zhǔn)值寄存器

1683642282361vwfhmxvgzx

校準(zhǔn)值寄存器提供了這樣一個(gè)解決方案:它使系統(tǒng)即使在不同的CM3產(chǎn)品上運(yùn)行,也能產(chǎn)生恒定的SysTick中斷頻率。最簡(jiǎn)單的作法就是:直接把TENMS的值寫入重裝載寄存器,這樣一來(lái),只要沒(méi)突破系統(tǒng)極限,就能做到每10ms來(lái)一次 SysTick異常。如果需要其它的SysTick異常周期,則可以根據(jù)TENMS的值加以比例計(jì)算。只不過(guò),在少數(shù)情況下, CM3芯片可能無(wú)法準(zhǔn)確地提供TENMS的值(如, CM3的校準(zhǔn)輸入信號(hào)被拉低),所以為保險(xiǎn)起見,最好在使用TENMS前檢查器件的參考手冊(cè)。


SysTick定時(shí)器除了能服務(wù)于操作系統(tǒng)之外,還能用于其它目的:如作為一個(gè)鬧鈴,用于測(cè)量時(shí)間等。要注意的是,當(dāng)處理器在調(diào)試期間被喊停( halt)時(shí),則SysTick定時(shí)器亦將暫停運(yùn)作。


3 Systick定時(shí)器實(shí)現(xiàn)

SysTick屬于Cortex-M內(nèi)核的部分,因此其相關(guān)的定義在core_cm3.h文件中。


3.1 main文件分析

主函數(shù)如下:


/*

    brief      main function

    param[in]  none

    param[out] none

    retval     none

*/

int main(void)

{

    //systick init

    sysTick_init();

    /* configure LED1 GPIO port */

    led_init(LED1);


    /* configure LED2 GPIO port */

    led_init(LED2);


    /* configure LED3 GPIO port */

    led_init(LED3);


    /* configure LED4 GPIO port */

    led_init(LED4);


    while(1) 

    {

        /* turn on LED1, turn off LED4 */

        led_on(LED1);

        led_off(LED4);

        /*delay 500ms*/

        delay_ms(500);


        /* turn on LED2, turn off LED1 */

        led_on(LED2);

        led_off(LED1);

        /*delay 500ms*/

        delay_ms(500);


        /* turn on LED3, turn off LED2 */

        led_on(LED3);

        led_off(LED2);

        /*delay 500ms*/

        delay_ms(500);


        /* turn on LED4, turn off LED3 */

        led_on(LED4);

        led_off(LED3);

        /*delay 500ms*/

        delay_ms(500);

    }

}

在 main 函數(shù)中,sysTick_init和 delay_us() 這兩個(gè)函數(shù)比較陌生,它們的功能分別是配置好 SysTick 定時(shí)器和進(jìn)行精確延時(shí)。整個(gè) main 函數(shù)的流程就是初始化 LED 及SysTick 定時(shí)器之后,就進(jìn)入死循環(huán),點(diǎn)亮LED的時(shí)間為精確的 500 ms。


3.2 gd32f207i_systick_eval.c文件分析

配置并啟動(dòng) SysTick

我們看一下systick_init()這個(gè)函數(shù),其功能是啟動(dòng)系統(tǒng)滴答定時(shí)器 SysTick。


/*

    brief      SysTick init

    param[in]  none

    param[out] none

    retval     none

*/

void sysTick_init(void)

{

/* SystemFrequency / 1000    1ms中斷一次

  * SystemFrequency / 100000  10us中斷一次

  * SystemFrequency / 1000000 1us中斷一次

  */

    /* setup systick timer for 1000Hz interrupts */

    if(SysTick_Config(SystemCoreClock / 100000U)){

        /* capture error */

        while(1){

        }

    }


    // 關(guān)閉滴答定時(shí)器  

    SysTick->CTRL &= ~ SysTick_CTRL_ENABLE_Msk;


    /* configure the systick handler priority */

    NVIC_SetPriority(SysTick_IRQn, 0x00U);

}

本函數(shù)實(shí)際上只是調(diào)用了 SysTick_Config() 函數(shù),它是屬于內(nèi)核層的 Cortex-M3 通用函數(shù),位于 core_cm3.h 文件中。若調(diào)用 SysTick_Config() 配置 SysTick 不成功,則進(jìn)入死循環(huán),初始化 SysTick 成功后,先關(guān)閉定時(shí)器,在需要的時(shí)候再開啟。SysTick_Config() 函數(shù)無(wú)法在GD32 外設(shè)固件庫(kù)文件中找到其使用方法。所以我們?cè)?Keil 環(huán)境下直接跟蹤這個(gè)函數(shù)到 core_cm3.h 文件,查看函數(shù)的定義。


/** \brief  System Tick Configuration


    The function initializes the System Timer and its interrupt, and starts the System Tick Timer.

    Counter is in free running mode to generate periodic interrupts.


    \param [in]  ticks  Number of ticks between two interrupts.


    \return          0  Function succeeded.

    \return          1  Function failed.


    \note     When the variable __Vendor_SysTickConfig is set to 1, then the

    function SysTick_Config is not included. In this case, the file device.h

    must contain a vendor-specific implementation of this function.


 */

__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks)

{

  if ((ticks - 1) > SysTick_LOAD_RELOAD_Msk)  return (1);      /* Reload value impossible */


  SysTick->LOAD  = ticks - 1;                                  /* set reload register */

  NVIC_SetPriority (SysTick_IRQn, (1<<__NVIC_PRIO_BITS) - 1);  /* set Priority for Systick Interrupt */

  SysTick->VAL   = 0;                                          /* Load the SysTick Counter Value */

  SysTick->CTRL  = SysTick_CTRL_CLKSOURCE_Msk |

                   SysTick_CTRL_TICKINT_Msk   |

                   SysTick_CTRL_ENABLE_Msk;                    /* Enable SysTick IRQ and SysTick Timer */

  return (0);                                                  /* Function successful */

}

在這個(gè)函數(shù)定義的前面有關(guān)于它的注釋,如果我們不想去研究它的具體實(shí)現(xiàn),可以根據(jù)這段注釋了解函數(shù)的功能 :這個(gè)函數(shù)啟動(dòng)了 SysTick ;并把它配置為計(jì)數(shù)至 0 時(shí)引起中斷 ;輸入的參數(shù) ticks 為兩個(gè)中斷之間的脈沖數(shù),即相隔 ticks 個(gè)時(shí)鐘周期會(huì)引起一次中斷 ;配置 SysTick 成功時(shí)返回 0,出錯(cuò)時(shí)返回 1。但是,這段注釋并沒(méi)有告訴我們它把 SysTick 的時(shí)鐘設(shè)置為 AHB 時(shí)鐘還是 AHB/8,這是一個(gè)十分關(guān)鍵的問(wèn)題,于是,我們將對(duì)這個(gè)函數(shù)的具體實(shí)現(xiàn)進(jìn)行分析,與大家再分享一下如何分析底層庫(kù)函數(shù)。分析底層庫(kù)函數(shù),要有 SysTick 定時(shí)器工作分析的知識(shí)準(zhǔn)備。


檢查輸入?yún)?shù)

SysTick_Config() 第 3 行代碼是檢查輸入?yún)?shù) ticks,因?yàn)?ticks 是脈沖計(jì)數(shù)值,要被保存到重載寄存器 STK_LOAD 寄存器中,再由硬件把 STK_LOAD 值加載到當(dāng)前計(jì)數(shù)值寄存器 STK_VAL 中使用,STK_LOAD 和 STK_VAL 都是 24 位的,所以當(dāng)輸入?yún)?shù) ticks 大于其可存儲(chǔ)的最大值時(shí),將由這行代碼檢查出錯(cuò)誤并返回。


位指示宏及位屏蔽宏

檢查 ticks 參數(shù)沒(méi)有錯(cuò)誤后,就稍稍處理一下把 ticks-1 賦值給 STK_LOAD 寄存器,要注意的是減 1,若 STK_VAL 從 ticks?1 向下計(jì)數(shù)至 0,實(shí)際上就經(jīng)過(guò)了 ticks 個(gè)脈沖。這句賦值代碼使用了宏 SysTick_LOAD_RELOAD_Msk,與其他庫(kù)函數(shù)類似,這個(gè)宏是用來(lái)指示寄存器的特定位置或進(jìn)行位屏蔽的。


/* SysTick Control / Status Register Definitions */

#define SysTick_CTRL_COUNTFLAG_Pos         16                                             /*!< SysTick CTRL: COUNTFLAG Position */

#define SysTick_CTRL_COUNTFLAG_Msk         (1ul << SysTick_CTRL_COUNTFLAG_Pos)            /*!< SysTick CTRL: COUNTFLAG Mask */


#define SysTick_CTRL_CLKSOURCE_Pos          2                                             /*!< SysTick CTRL: CLKSOURCE Position */

#define SysTick_CTRL_CLKSOURCE_Msk         (1ul << SysTick_CTRL_CLKSOURCE_Pos)            /*!< SysTick CTRL: CLKSOURCE Mask */


#define SysTick_CTRL_TICKINT_Pos            1                                             /*!< SysTick CTRL: TICKINT Position */

#define SysTick_CTRL_TICKINT_Msk           (1ul << SysTick_CTRL_TICKINT_Pos)              /*!< SysTick CTRL: TICKINT Mask */


#define SysTick_CTRL_ENABLE_Pos             0                                             /*!< SysTick CTRL: ENABLE Position */

#define SysTick_CTRL_ENABLE_Msk            (1ul << SysTick_CTRL_ENABLE_Pos)               /*!< SysTick CTRL: ENABLE Mask */


/* SysTick Reload Register Definitions */

#define SysTick_LOAD_RELOAD_Pos             0                                             /*!< SysTick LOAD: RELOAD Position */

[1] [2]
關(guān)鍵字:GD32  開發(fā)實(shí)戰(zhàn)  Systick 引用地址:GD32開發(fā)實(shí)戰(zhàn)指南(基礎(chǔ)篇) 第5章 跳動(dòng)的心臟-Systick

上一篇:【技術(shù)分享】星空派GD32開發(fā)板LVGL移植經(jīng)驗(yàn)分享
下一篇:keil中GD32 MCU IAP中APP的存儲(chǔ)地址如何設(shè)置?

推薦閱讀最新更新時(shí)間:2025-06-26 18:47

S3C2440 開發(fā)實(shí)戰(zhàn)(10):signal & async 異步通信
進(jìn)程之間發(fā)送信號(hào) 這里我們使用 kill 命令,在進(jìn)程與進(jìn)程之間進(jìn)行傳輸信號(hào)。 比如殺死一個(gè)進(jìn)程也是通過(guò)進(jìn)程之間發(fā)送信號(hào): #kill -9 pid 相對(duì)應(yīng)的如果要發(fā)送信號(hào),則要注冊(cè)信號(hào)處理函數(shù)(和注冊(cè)中斷服務(wù)函數(shù)類似),并且編寫一個(gè)信號(hào)服務(wù)函數(shù),然后寫一個(gè)一直休眠的函數(shù)就ok了。應(yīng)用程序 signal.c 代碼如下: #include stdio.h #include signal.h void mysignal_fun(int signum){ static int count = 0; printf( signal = %d, %d timesn , signum, count++); } int
[單片機(jī)]
S3C2440 <font color='red'>開發(fā)</font>板<font color='red'>實(shí)戰(zhàn)</font>(10):signal & async 異步通信
S3C2440 開發(fā)實(shí)戰(zhàn)(11):同步互斥
原子操作實(shí)現(xiàn) 目的:防止兩個(gè)進(jìn)程同時(shí)打開同一個(gè)文件。在后一個(gè)進(jìn)程打開文件時(shí)自行退出。 定義原子變量 定義原子變量v并且初始化為1 atomic_t canopen = ATOMIC_INIT(1); 獲得鎖 對(duì)原子變量進(jìn)行自減操作來(lái)判斷是否有進(jìn)程正在打開目標(biāo)文件,若有恢復(fù)原子變量并返回-1(-EBUSY)。 if(!atomic_dec_and_test(&canopen)){ atomic_inc(&canopen); return -EBUSY; } 釋放鎖 對(duì)原子變量進(jìn)行自加操作釋放鎖。 atomic_inc(&canopen); 總驅(qū)動(dòng)函數(shù) #include linux/module.h #i
[單片機(jī)]
基于GD32段碼顯示器設(shè)計(jì)
說(shuō)明一下:選用了IIC驅(qū)動(dòng)方式,硬件連接SCL、SDAIN和SDAOUT引腳, 也就是說(shuō)有應(yīng)答檢測(cè)是從SDAOUT引腳返回給MCU的。 硬件平臺(tái):微控制器選擇GD32F103 PCA8538評(píng)估板 紅外遙控器 并使用紅外遙控器進(jìn)行控制 銳鑫同創(chuàng)提供的示例十分豐富,注釋清晰,移植太方便了。 IIC,RTC,DS18B20等驅(qū)動(dòng)完全都不用改,項(xiàng)目完成很順利。 核心代碼部分分析: 主循環(huán)里 if(now!=timer.sec){}中每秒進(jìn)行溫度和時(shí)間更新。 if(Remote_Rdy){}檢測(cè)遙控器發(fā)出的指令并執(zhí)行。 PCA8538_TIME();參數(shù)較多,大家可以詳細(xì)看一下,實(shí)現(xiàn)溫度和時(shí)間同時(shí)顯示,有點(diǎn)復(fù)雜 (相對(duì)于寄存器
[單片機(jī)]
GD32 MCU入門教程】GD32 MCU GPIO 結(jié)構(gòu)與使用注意事項(xiàng)
1.前言 本文是專門為基于GD32 MCU開發(fā)的工程設(shè)計(jì)人員提供,主要介紹了GPIO的功能配置、內(nèi)部結(jié)構(gòu)以及在不同場(chǎng)景使用時(shí)的注意事項(xiàng),旨在幫助GD32 MCU開發(fā)者優(yōu)化對(duì)通用型輸入輸出端口(GPIO)的使用,正確快速的使用GD32 MCU進(jìn)行產(chǎn)品開發(fā)。 GPIO,通用型輸入輸出端口的簡(jiǎn)稱,可以通過(guò)軟件配置其輸出或者輸入,GD32 的 GPIO 引腳與外部設(shè)備連接,從而實(shí)現(xiàn)與外部通信,控制以及信號(hào)輸入的功能,是 GD32 MCU 中很常見,使用最廣泛的模塊。 每個(gè) GPIO 引腳可以由軟件配置為輸出(推挽或開漏)、輸入、外設(shè)備用功能或者模擬模式。 每個(gè) GPIO 引腳都可以配置為上拉、下拉或浮空模式或無(wú)上拉/下拉。 GD32
[單片機(jī)]
【<font color='red'>GD32</font> MCU入門教程】<font color='red'>GD32</font> MCU GPIO 結(jié)構(gòu)與使用注意事項(xiàng)
GD32 MCU 榮獲 Embedded Award 2020 最佳硬件產(chǎn)品大獎(jiǎng)
兆易創(chuàng)新GD32 MCU于德國(guó)紐倫堡參加了今年首個(gè)國(guó)際頂級(jí)展會(huì)—Embedded World 2020,GD32VF103系列RISC-V內(nèi)核MCU在硬件領(lǐng)域提名中脫穎而出并贏得冠軍,一舉捧得年度全場(chǎng)唯一的最佳硬件產(chǎn)品大獎(jiǎng)! 兆易創(chuàng)新 GD32 MCU是中國(guó)高性能32位通用微控制器市場(chǎng)的領(lǐng)跑者,中國(guó)最大的Arm? Cortex?-M MCU家族,7年來(lái)先后推出了中國(guó)第一個(gè)Arm? Cortex?-M3、 Cortex?-M4、 Cortex?-M23內(nèi)核通用MCU產(chǎn)品系列以及全球第一個(gè)開源指令集架構(gòu)RISC-V內(nèi)核32位通用MCU產(chǎn)品,并同步為全球用戶提供專業(yè)靈活的技術(shù)支持與交付服務(wù)。 紐倫堡Embedded Worl
[嵌入式]
<font color='red'>GD32</font> MCU 榮獲 Embedded Award 2020 最佳硬件產(chǎn)品大獎(jiǎng)
STM32 SysTick定時(shí)器和delay延遲函數(shù)
一,什么是Systick定時(shí)器   Systick定時(shí)器也叫滴答定時(shí)器,是內(nèi)核級(jí)別的24位倒計(jì)數(shù)簡(jiǎn)單定時(shí)器,常用做延遲和系統(tǒng)心跳時(shí)鐘(如:UCOS)   優(yōu)點(diǎn):節(jié)省MCU資源,不需要浪費(fèi)一個(gè)定時(shí)器,只要不清除Systick使能位,就不會(huì)停止,即使在睡眠模式下也能工作   捆綁在NVIC中斷優(yōu)先級(jí)管理,能產(chǎn)生Systick異常(中斷),可設(shè)置中斷優(yōu)先級(jí) 二,Systick相關(guān)寄存器   CTRL: Systick控制和狀態(tài)寄存器   LOAD: Systick重裝載寄存器   VAL: Systick當(dāng)前值寄存器   CALIB: Systick校準(zhǔn)值寄存器   定時(shí)器工作方式:   每經(jīng)過(guò)一個(gè)Systick時(shí)鐘周期,VAL寄存
[單片機(jī)]
STM32 <font color='red'>SysTick</font>定時(shí)器和delay延遲函數(shù)
stm32專題九:SysTick(一)系統(tǒng)嘀嗒定時(shí)器原理
SysTick是存在于stm32內(nèi)核的定時(shí)器,嵌套在NVIC中,24位,只能遞減。在stm32中文參考手冊(cè)中,對(duì)于SysTick的描述其實(shí)很少,主要如下。systick的時(shí)鐘可以為AHB時(shí)鐘,或者是AHB時(shí)鐘8分頻=9M。而校準(zhǔn)值固定為9000,也就是說(shuō),當(dāng)時(shí)鐘頻率為9M時(shí),9000的固定值對(duì)應(yīng)1ms時(shí)間基準(zhǔn),9000 000對(duì)應(yīng)1s時(shí)間。 在core-CM3編程手冊(cè)中,有配置systick的寄存器描述。 SysTick控制和狀態(tài)寄存器STK_CTRL 位描述: COUNTFLAG:如果上一次計(jì)數(shù)到0,則返回1,為計(jì)數(shù)標(biāo)志。 CLKSOURCE:選擇時(shí)鐘源,為0時(shí)即為AHB時(shí)鐘8分頻,為1時(shí)直接就等于AHB總
[單片機(jī)]
stm32專題九:<font color='red'>SysTick</font>(一)系統(tǒng)嘀嗒定時(shí)器原理
STM32入門學(xué)習(xí)之SysTick系統(tǒng)定時(shí)器(STM32F030F4P6基于CooCox IDE)
#include stm32_lib/inc/stm32f0xx_misc.h #include stm32_lib/inc/stm32f0xx_rcc.h int main(void){ //配置初值,系統(tǒng)定時(shí)器是倒數(shù)計(jì)時(shí)器,減1的 //注意:該函數(shù)的參數(shù)類型雖為uinit32_t,實(shí)際最大值為16777215,也就是2^24 SysTick_Config(SystemCoreClock/10); while(1); } //中斷函數(shù) void SysTick_Handler(void){ //這里做你想做的事情 } 系統(tǒng)定時(shí)器,就是這么簡(jiǎn)單!時(shí)鐘為系統(tǒng)時(shí)鐘,只要配置好倒計(jì)時(shí)數(shù)即可。 特別
[單片機(jī)]
STM32入門學(xué)習(xí)之<font color='red'>SysTick</font>系統(tǒng)定時(shí)器(STM32F030F4P6基于CooCox IDE)
小廣播
設(shè)計(jì)資源 培訓(xùn) 開發(fā)板 精華推薦

最新單片機(jī)文章

 
EEWorld訂閱號(hào)

 
EEWorld服務(wù)號(hào)

 
汽車開發(fā)圈

 
機(jī)器人開發(fā)圈

電子工程世界版權(quán)所有 京ICP證060456號(hào) 京ICP備10001474號(hào)-1 電信業(yè)務(wù)審批[2006]字第258號(hào)函 京公網(wǎng)安備 11010802033920號(hào) Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 岑溪市| 随州市| 澎湖县| 包头市| 南部县| 洞口县| 大同县| 繁昌县| 阿图什市| 鹤庆县| 平原县| 长沙市| 云阳县| 东港市| 赞皇县| 绥滨县| 明光市| 理塘县| 永康市| 香港| 海丰县| 南岸区| 西充县| 监利县| 阿克| 高雄县| 横山县| 淮北市| 元阳县| 永寿县| 库尔勒市| 乌兰察布市| 萝北县| 体育| 潜山县| 龙川县| 博野县| 定南县| 连平县| 淄博市| 塔河县|