單片機
返回首頁

STM32—SysTick系統定時器

2021-09-02 來源:eefocus

SysTick是STM32中的系統定時器,利用SysTick可以實現精確的延時。

SysTick—系統定時器

屬于 CM3 內核中的一個外設,內嵌在 NVIC 中。系統定時器是一個 24bit 的向下遞減的計數器,計數器每計數一次的時間為 1/SYSCLK,一般我們設置系統時鐘 SYSCLK 等于 72M。當重裝載數值寄存器的值遞減到 0 的時候,系統定時器就產生一次中斷,以此循環往復。因為 SysTick 是屬于 CM3 內核的外設,所以所有基于 CM3 內核的單片機都具有這個系統定時器,使得軟件在 CM3 單片機中可以很容易的移植。系統定時器一般用于操作系統,用于產生時基,維持操作系統的心跳。


延時模式:

SysTick的延時可以有倆種模式:

1.單純遞減延時

2.利用void SysTick_Handler(void) 中斷函數延時


倆種方法都涉及到一個函數,那就是SysTick 配置庫函數 ,


__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks)

 {

 // 不可能的重裝載值,超出范圍

 if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk)

  {

  return (1UL);

 }


 // 設置重裝載寄存器

 SysTick->LOAD = (uint32_t)(ticks - 1UL);


 // 設置中斷優先級

NVIC_SetPriority (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL);


// 設置當前數值寄存器

SysTick->VAL = 0UL;


 // 設置系統定時器的時鐘源為 AHBCLK=72M

// 使能系統定時器中斷

// 使能定時器

 SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk |

 SysTick_CTRL_TICKINT_Msk |

SysTick_CTRL_ENABLE_Msk;

 return (0UL);

 }


其主要任務是裝填計時器初始值、設置時鐘源、設置中斷源優先級。初始值不能超過2^24,時鐘源一般為72M。

在這里插入圖片描述

1.單純遞減延時

毫秒級延時


void SysTick_Delay_ms(uint32_t ms)

{

uint32_t  i;

SysTick_Config(72000);  /* 設置初始值為72000 */

for(i=0;i {

while(!((SysTick->CTRL) & (1<<16))) ;       /* 檢測一次計時完成 */

}

SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk;  /* 操作寄存器 */

}


2.利用void SysTick_Handler(void) 中斷函數延時

毫秒級延時


volatile uint32_t isr_ms;

void SysTick_Delay_ms_INT(uint32_t ms)

{

isr_ms = ms;

SysTick_Config(72000);

  while(isr_ms);  /* 在中斷里遞減 */

/* 失能systick */

SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk;

}


在stm32f10x_it.c中的代碼如下:


extern volatile uint32_t isr_ms;   /* 這個變量在bsp_systick.c里面定義 */

void SysTick_Handler(void)

{

isr_ms--;

}

進入單片機查看更多內容>>
相關視頻
  • TI 新一代 C2000? 微控制器:全方位助力伺服及馬達驅動應用

  • MSP430電容觸摸技術 - 防水Demo演示

  • 直播回放: Microchip Timberwolf? 音頻處理器在線研討會

  • 新唐 8051單片機教程

  • 基于靈動MM32W0系列MCU的指夾血氧儀控制及OTA升級應用方案分享

  • 基于靈動MM32SPIN系列MCU的無感FOC便攜冰箱應用方案分享

    相關電子頭條文章
萝卜大香蕉