国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【STM32/FreeRTOS】SysTick定時(shí)器及FreeRTOS系統(tǒng)節(jié)拍

這篇具有很好參考價(jià)值的文章主要介紹了【STM32/FreeRTOS】SysTick定時(shí)器及FreeRTOS系統(tǒng)節(jié)拍。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

目錄

一、SysTick定時(shí)器

1、SysTick寄存器介紹

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

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

(3)當(dāng)前數(shù)值寄存器

2、SysTick寄存器配置函數(shù)

二、FreeRTOS中的SysTick定時(shí)器

1、SysTick配置函數(shù)及分析

2、SysTick中斷函數(shù)

三、其他操作配置FreeRTOS的SysTick

1、找到頭文件 FreeRTOSConfig.h 有如下定義。

2、搜索?configTICK_RATE_HZ,在port.c中。

3、搜索?portNVIC_SYSTICK_CTRL_REG,在port.c中。

4、下面證明地址是不是SYSTICK的配置地址。

?5、跳轉(zhuǎn)到 SysTick 定義處。


一、SysTick定時(shí)器

SysTick系統(tǒng)定時(shí)器是屬于內(nèi)核中的一個(gè)外設(shè),內(nèi)嵌在NVIC中。該定時(shí)器是一個(gè)24位的向下遞減的計(jì)數(shù)器。在裸機(jī)編程中常用做延時(shí)函數(shù),而在FreeRTOS中則用來(lái)給系統(tǒng)提供時(shí)鐘的,因此非常重要。

1、SysTick寄存器介紹

SysTick共有4個(gè)相關(guān)寄存器,通常只用到3個(gè)(校準(zhǔn)寄存器少用)。

寄存器名稱 寄存器描述
CTRL SysTick控制及狀態(tài)寄存器
LOAD SysTick重裝載數(shù)值寄存器
VAL SysTick當(dāng)前數(shù)值寄存器
CALIB SysTick校準(zhǔn)數(shù)值寄存器

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

【STM32/FreeRTOS】SysTick定時(shí)器及FreeRTOS系統(tǒng)節(jié)拍,stm32,單片機(jī),嵌入式硬件

可通過(guò)讀取第16位判斷計(jì)數(shù)是否到0。

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

?????? 用來(lái)存放重裝載數(shù)的,改變?cè)撝狄哉{(diào)節(jié)計(jì)數(shù)時(shí)間。數(shù)值范圍:0—(2^24-1)即(0-16777215)。

【STM32/FreeRTOS】SysTick定時(shí)器及FreeRTOS系統(tǒng)節(jié)拍,stm32,單片機(jī),嵌入式硬件

(3)當(dāng)前數(shù)值寄存器

?????? 該寄存器的值在遞減,計(jì)數(shù)到0時(shí)會(huì)自動(dòng)重載,數(shù)值為重裝載數(shù)值寄存器內(nèi)的值。

【STM32/FreeRTOS】SysTick定時(shí)器及FreeRTOS系統(tǒng)節(jié)拍,stm32,單片機(jī),嵌入式硬件

2、SysTick寄存器配置函數(shù)

????????在庫(kù)文件core_cm4.h (M4內(nèi)核)中有相關(guān)配置函數(shù),也可以重寫(xiě)。

__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks) /*參數(shù)ticks為計(jì)數(shù)值,最大2^24(已有減1操作)*/
{
  if ((ticks - 1) > SysTick_LOAD_RELOAD_Msk)  return (1);/*判斷傳入的值是否滿足,不能超過(guò)0xffffff*/
 
  SysTick->LOAD  = ticks - 1;                      /*將數(shù)值傳入重裝載數(shù)值寄存器*/
  NVIC_SetPriority (SysTick_IRQn, (1<<__NVIC_PRIO_BITS) - 1);  /*設(shè)置Systick中斷優(yōu)先級(jí)*/
  SysTick->VAL   = 0;                                       /*清空當(dāng)前值寄存器*/
  SysTick->CTRL  = SysTick_CTRL_CLKSOURCE_Msk |
                   SysTick_CTRL_TICKINT_Msk   |
                   SysTick_CTRL_ENABLE_Msk;  
                  
    /* SysTick_CTRL_CLKSOURCE_Msk = 1<<2 */
    /* SysTick_CTRL_TICKINT_Msk   = 1<<1 */
    /* SysTick_CTRL_ENABLE_Msk    = 1<<0 */
    /*將第0、1、2位置1,即使能定時(shí)器,使能中斷,選擇系統(tǒng)時(shí)鐘(168M或72M)*/
 
  return (0);                                                
 
}

二、FreeRTOS中的SysTick定時(shí)器

在FreeRTOS中SysTick定時(shí)器尤為重要,因?yàn)樗墙oFreeRTOS系統(tǒng)提供時(shí)鐘的。在FreeRTOS中任務(wù)的切換即每個(gè)任務(wù)運(yùn)行的時(shí)間是由SysTick定時(shí)器提供的。

1、SysTick配置函數(shù)及分析

在FreeRTOS中已經(jīng)提供了SysTick配置的函數(shù)vPortSetupTimerInterrupt(),函數(shù)在port.c文件中。當(dāng)調(diào)用了開(kāi)啟任務(wù)調(diào)度函數(shù)vTaskStartScheduler()后里面就會(huì)調(diào)用該函數(shù)完成SysTick的配置。vPortSetupTimerInterrupt()函數(shù)分析:
?

#if ( configOVERRIDE_DEFAULT_TICK_CONFIGURATION == 0 ) /*條件編譯*/
 
    __weak void vPortSetupTimerInterrupt( void )
 
    {
        /* Calculate the constants required to configure the tick interrupt. */
 
        #if ( configUSE_TICKLESS_IDLE == 1 ) /*條件編譯,這段不編譯*/
            {
                ulTimerCountsForOneTick = ( configSYSTICK_CLOCK_HZ / configTICK_RATE_HZ );
                xMaximumPossibleSuppressedTicks = portMAX_24_BIT_NUMBER / ulTimerCountsForOneTick;
                ulStoppedTimerCompensation = portMISSED_COUNTS_FACTOR / ( configCPU_CLOCK_HZ / configSYSTICK_CLOCK_HZ );
            }
        #endif /* configUSE_TICKLESS_IDLE */
 
        portNVIC_SYSTICK_CTRL_REG = 0UL;            /*清空控制及狀態(tài)寄存器*/
        portNVIC_SYSTICK_CURRENT_VALUE_REG = 0UL;   /*清空當(dāng)前值寄存器*/
 
        /*設(shè)置重裝載數(shù)值寄存器數(shù)值*/
        /*168000000/1000=  168000重裝載值,168000/168M=0.001S=1MS*/
        portNVIC_SYSTICK_LOAD_REG = ( configSYSTICK_CLOCK_HZ / configTICK_RATE_HZ ) - 1UL;
        /*設(shè)置控制及狀態(tài)寄存器*/                    
        portNVIC_SYSTICK_CTRL_REG = ( portNVIC_SYSTICK_CLK_BIT | portNVIC_SYSTICK_INT_BIT | portNVIC_SYSTICK_ENABLE_BIT );
                            /*( 1UL << 2UL ) | ( 1UL << 1UL ) | ( 1UL << 0UL ) */
                            /*選擇處理器時(shí)鐘、開(kāi)定時(shí)器中斷、使能定時(shí)器*/
 
    }
 
#endif /* configOVERRIDE_DEFAULT_TICK_CONFIGURATION */

?

2、SysTick中斷函數(shù)

在SysTick中斷函數(shù)中并不是直接執(zhí)行任務(wù)切換,而是將xTickCount進(jìn)行加1操作,xTickCount是FreeRTOS的系統(tǒng)時(shí)鐘節(jié)拍數(shù),具體實(shí)現(xiàn)函數(shù)則是xTaskIncrementTick(),該函數(shù)在中斷函數(shù)中被調(diào)用。中斷函數(shù)的實(shí)現(xiàn)在port.c文件中也有定義:xPortSysTickHandler(),因此在SysTick中斷函數(shù)中直接調(diào)用該函數(shù)即可。

void SysTick_Handler(void)
{     
    if(xTaskGetSchedulerState()!=taskSCHEDULER_NOT_STARTED) //系統(tǒng)已經(jīng)運(yùn)行
    {
        xPortSysTickHandler(); //調(diào)用port.c中已寫(xiě)好的中斷函數(shù)
    }
 
}

【STM32/FreeRTOS】SysTick定時(shí)器及FreeRTOS系統(tǒng)節(jié)拍,stm32,單片機(jī),嵌入式硬件

三、其他操作配置FreeRTOS的SysTick

1、找到頭文件 FreeRTOSConfig.h 有如下定義。

#define configCPU_CLOCK_HZ                        ((unsigned long)168000000)    //CPU頻率
#define configTICK_RATE_HZ                        (( portTickType )1000)    //時(shí)鐘節(jié)拍頻率,這里設(shè)置為1000,周期就是1ms

2、搜索?configTICK_RATE_HZ,在port.c中。

portNVIC_SYSTICK_LOAD_REG = ( configSYSTICK_CLOCK_HZ / configTICK_RATE_HZ ) - 1UL;
        portNVIC_SYSTICK_CTRL_REG = ( portNVIC_SYSTICK_CLK_BIT | portNVIC_SYSTICK_INT_BIT | portNVIC_SYSTICK_ENABLE_BIT );

3、搜索?portNVIC_SYSTICK_CTRL_REG,在port.c中。

#define portNVIC_SYSTICK_CTRL_REG            ( * ( ( volatile uint32_t * ) 0xe000e010 ) )
#define portNVIC_SYSTICK_LOAD_REG            ( * ( ( volatile uint32_t * ) 0xe000e014 ) )

4、下面證明地址是不是SYSTICK的配置地址。

STM32庫(kù)函數(shù)中core_cm4.h中配置systick函數(shù)為?uint32_t SysTick_Config(uint32_t ticks)

SysTick->LOAD  = (uint32_t)(ticks - 1UL);                         /* set reload register */
  NVIC_SetPriority (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */
  SysTick->VAL   = 0UL;                                             /* 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 (0UL);                                                     /* Function successful 

?5、跳轉(zhuǎn)到 SysTick 定義處。

#define SCS_BASE            (0xE000E000UL)                            /*!< System Control Space Base Address  */
#define ITM_BASE            (0xE0000000UL)                            /*!< ITM Base Address                   */
#define DWT_BASE            (0xE0001000UL)                            /*!< DWT Base Address                   */
#define TPI_BASE            (0xE0040000UL)                            /*!< TPI Base Address                   */
#define CoreDebug_BASE      (0xE000EDF0UL)                            /*!< Core Debug Base Address            */
#define SysTick_BASE        (SCS_BASE +  0x0010UL)                    /*!< SysTick Base Address               */
#define NVIC_BASE           (SCS_BASE +  0x0100UL)                    /*!< NVIC Base Address                  */
#define SCB_BASE            (SCS_BASE +  0x0D00UL)                    /*!< System Control Block Base Address  */

#define SCnSCB              ((SCnSCB_Type    *)     SCS_BASE      )   /*!< System control Register not in SCB */
#define SCB                 ((SCB_Type       *)     SCB_BASE      )   /*!< SCB configuration struct           */
#define SysTick             ((SysTick_Type   *)     SysTick_BASE  )   /*!< SysTick configuration struct       */

FreeRTOS學(xué)習(xí)筆記——SysTick中斷-CSDN博客

STM32使用FreeRTOS時(shí)SysTick哪里配置的?_systic在哪配的-CSDN博客

FreeRTOS 之六 任務(wù)調(diào)度原理解析(Systick、PendSV、SVC)_freertos svc-CSDN博客

【STM32/FreeRTOS】SysTick定時(shí)器及FreeRTOS系統(tǒng)節(jié)拍_freertos systick-CSDN博客文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-821527.html

到了這里,關(guān)于【STM32/FreeRTOS】SysTick定時(shí)器及FreeRTOS系統(tǒng)節(jié)拍的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • stm32的學(xué)習(xí)——SysTick定時(shí)器的使用

    stm32的學(xué)習(xí)——SysTick定時(shí)器的使用

    SysTick定時(shí)器也稱為滴答定時(shí)器,SysTick定時(shí)器是內(nèi)核中的一個(gè)外設(shè),內(nèi)嵌在NVIC(嵌套向量中斷控制器)里面,在cortex M3、M4中都存在,很方便用戶移植。 雖然我用的是cortex M4的內(nèi)核,但是他的內(nèi)核文檔在這方面和Cortex M3的相似。 所以我這里參考了M3的內(nèi)核中文文檔。M3和M4內(nèi)核

    2024年02月04日
    瀏覽(23)
  • 【STM32筆記】低功耗模式、WFI命令等進(jìn)入不了休眠的可能原因(系統(tǒng)定時(shí)器SysTick一直產(chǎn)生中斷)

    【STM32筆記】低功耗模式、WFI命令等進(jìn)入不了休眠的可能原因(系統(tǒng)定時(shí)器SysTick一直產(chǎn)生中斷)

    【STM32】低功耗模式、WFI命令等進(jìn)入不了休眠的可能原因(系統(tǒng)定時(shí)器SysTick一直產(chǎn)生中斷) 【STM32筆記】低功耗模式配置及避坑匯總 前文: blog.csdn.net/weixin_53403301/article/details/128216064 【STM32筆記】HAL庫(kù)低功耗模式配置(ADC喚醒無(wú)法使用、低功耗模式無(wú)法燒錄解決方案) __WFI

    2024年02月10日
    瀏覽(119)
  • 【HAL庫(kù)】STM32CubeMX開(kāi)發(fā)----非阻塞延時(shí)實(shí)驗(yàn)----SysTick(滴答定時(shí)器)中斷

    【HAL庫(kù)】STM32CubeMX開(kāi)發(fā)----非阻塞延時(shí)實(shí)驗(yàn)----SysTick(滴答定時(shí)器)中斷

    STM32CubeMX 下載和安裝 詳細(xì)教程 【HAL庫(kù)】STM32CubeMX開(kāi)發(fā)----STM32F103/F207/F407----目錄 HAL庫(kù) 有自帶的 ms級(jí) 延時(shí)函數(shù): HAL_Delay(); 缺點(diǎn): 這是 阻塞延時(shí) 方式,就是延時(shí)期間,什么都不能干,這樣很浪費(fèi)資源。 這篇文章主要介紹,利用 SysTick(滴答定時(shí)器)中斷 實(shí)現(xiàn) 非阻塞延時(shí) 的實(shí)驗(yàn)

    2024年02月16日
    瀏覽(96)
  • FreeRTOS軟件定時(shí)器 基于STM32

    FreeRTOS軟件定時(shí)器 基于STM32

    文章目錄 一·、軟件定時(shí)器的基本概念 二、軟件定時(shí)器應(yīng)用場(chǎng)景 三、軟件定時(shí)器的精度 四、軟件定時(shí)器的運(yùn)作機(jī)制 五、軟件定時(shí)器函數(shù)接口講解 1.軟件定時(shí)器創(chuàng)建函數(shù) xTimerCreate() 2.軟件定時(shí)器啟動(dòng)函數(shù) xTimerStart() ?3.軟件定時(shí)器停止函數(shù)? xTimerStop() ?4.軟件定時(shí)器任務(wù) 5.軟件

    2024年02月11日
    瀏覽(22)
  • 【STM32】FreeRTOS軟件定時(shí)器學(xué)習(xí)

    【STM32】FreeRTOS軟件定時(shí)器學(xué)習(xí)

    ? 軟件定時(shí)器 FreeRTOS提供了現(xiàn)成的軟件定時(shí)器功能,可以一定程度上替代硬件定時(shí)器,但精度不高。 實(shí)驗(yàn):創(chuàng)建一個(gè)任務(wù),兩個(gè)定時(shí)器,按鍵開(kāi)啟定時(shí)器,一個(gè)500ms打印一次,一個(gè)1000ms打印一次。 實(shí)現(xiàn):在【STM32】FreeRTOS事件組學(xué)習(xí)基礎(chǔ)上修改。 上面的代碼是CubeMX封裝好的。

    2024年02月12日
    瀏覽(32)
  • (第48-59講)STM32F4單片機(jī),F(xiàn)reeRTOS【事件標(biāo)志、任務(wù)通知、軟件定時(shí)器、Tickless低功耗】【純文字講解】【】

    【吐血總結(jié)】FreeRTOS難點(diǎn)、Systick中斷-滴答定時(shí)器、PendSV中斷-任務(wù)切換、SVC中斷-系統(tǒng)底層、時(shí)間片調(diào)度-時(shí)鐘節(jié)拍【已完結(jié)】 (第1-8講)STM32F4單片機(jī),F(xiàn)reeRTOS基礎(chǔ)知識(shí)總結(jié)【視頻筆記、代碼講解】【正點(diǎn)原子】【原創(chuàng)】 (第9-10講)STM32F4單片機(jī),F(xiàn)reeRTOS任務(wù)創(chuàng)建和刪除(動(dòng)態(tài)方

    2024年02月01日
    瀏覽(33)
  • STM32—系統(tǒng)定時(shí)器

    SysTick是一種系統(tǒng)定時(shí)器,可以用于實(shí)現(xiàn)操作系統(tǒng)、任務(wù)調(diào)度、時(shí)鐘管理等功能。它通常集成在微控制器中,并且是硬件實(shí)現(xiàn)的,具有高精度和可靠性。 在ARM Cortex-M處理器中,SysTick定時(shí)器可以配置為計(jì)數(shù)器模式或外部時(shí)鐘模式。在計(jì)數(shù)器模式下,SysTick定時(shí)器使用內(nèi)部時(shí)鐘作為

    2024年02月21日
    瀏覽(19)
  • STM32F4基礎(chǔ):時(shí)鐘系統(tǒng)、中斷及定時(shí)器

    STM32F4基礎(chǔ):時(shí)鐘系統(tǒng)、中斷及定時(shí)器

    ? ? ? ? 時(shí)鐘系統(tǒng)是CPU的脈搏, 由于STM32 本身非常復(fù)雜,外設(shè)非常的多,并不是所有外設(shè)都需要系統(tǒng)時(shí)鐘這么高的頻率,比如看門(mén)狗以及 RTC 只需要幾十 k 的時(shí)鐘即可,因此STM32F4 的時(shí)鐘系統(tǒng)比較復(fù)雜 ,不像簡(jiǎn)單的 51 單片機(jī)一個(gè)系統(tǒng)時(shí)鐘就可以解決一切。 ? ? ? ? 如下圖所

    2023年04月09日
    瀏覽(20)
  • 【致敬未來(lái)的攻城獅計(jì)劃】— 連續(xù)打卡第十六天:FSP固件庫(kù)系統(tǒng)定時(shí)器(滴答定時(shí)器SysTick)每2秒LED閃爍一次

    【致敬未來(lái)的攻城獅計(jì)劃】— 連續(xù)打卡第十六天:FSP固件庫(kù)系統(tǒng)定時(shí)器(滴答定時(shí)器SysTick)每2秒LED閃爍一次

    1.連續(xù)打卡第一天:提前對(duì)CPK_RA2E1是瑞薩RA系列開(kāi)發(fā)板的初體驗(yàn),了解一下 2.開(kāi)發(fā)環(huán)境的選擇和調(diào)試(從零開(kāi)始,加油) 3.欲速則不達(dá),今天是對(duì)RA2E1 基礎(chǔ)知識(shí)的補(bǔ)充學(xué)習(xí)。 4.e2 studio 使用教程 5.Keil配置使用(使用 RASC 生成 Keil 工程) 6.Keil配置使用(使用 RASC 生成 Keil 工程)

    2024年02月01日
    瀏覽(22)
  • 【STM32】STM32學(xué)習(xí)筆記-定時(shí)器定時(shí)中斷 定時(shí)器外部時(shí)鐘(14)

    【STM32】STM32學(xué)習(xí)筆記-定時(shí)器定時(shí)中斷 定時(shí)器外部時(shí)鐘(14)

    1.1 TIM_InternalClockConfig 1.2 TIM_TimeBaseInit 1.3 TIM_TimeBaseInitTypeDef 1.4 TIM_ClearFlag 1.5 TIM_ITConfig 1.6 TIM_Cmd 1.7 中斷服務(wù)函數(shù) 參考程序 1.8 TIM_ETRClockMode2Config timer.h timer.c main.c timer.h timer.c main.c 09-定時(shí)器定時(shí)中斷.rar 10-定時(shí)器外部時(shí)鐘.rar 參考: 【STM32】江科大STM32學(xué)習(xí)筆記匯總

    2024年02月03日
    瀏覽(97)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包