码迷,mamicode.com
首页 > 其他好文 > 详细

(STM32F4) SysTick理解使用

时间:2018-12-11 00:34:41      阅读:242      评论:0      收藏:0      [点我收藏+]

标签:需要   ret   pre   register   inf   ted   http   com   oid   

關於Cortex System Timer (Systick) 網上隨便google就可以找到許多相關範例。

他就是ARM提供的一個24-bit的下數(count-down)計時器我看大部分應用都是提供給delay使用,在RTOS也有一些應用.

簡單提及一下 Systick Register

1 typedef struct
2 {
3   __IO uint32_t CTRL;                    /*!< Offset: 0x000 (R/W)  SysTick Control and Status Register */
4   __IO uint32_t LOAD;                    /*!< Offset: 0x004 (R/W)  SysTick Reload Value Register       */
5   __IO uint32_t VAL;                     /*!< Offset: 0x008 (R/W)  SysTick Current Value Register      */
6   __I  uint32_t CALIB;                   /*!< Offset: 0x00C (R/ )  SysTick Calibration Register        */
7 } SysTick_Type;

技术分享图片

Systick CTRL register

1. COUNT FLAG[16] : Return 1 if timer counted to 0.

2. CLK SOURCE [2] : select the clock soruce, 0 : AHB / 8, 1 : AHB.

3. TICK INT [1] : Counting down to zero either assert or not the Systick exception request.

4. ENABLE [0] : Enbles the counter.

Programming manual 的 note 敘述可以利用軟體的方式去讀取 COUNT FLAG來判斷counter是否曾經到0.

Systick RELOAD register

主要是提供 24bit 的counter reload value.

Systick VAL register

當Systick timer 開始計數 VAL register就可以觀察目前計數到的數值

貼心的官方當然有提供相對應的配置function

 static __INLINE uint32_t SysTick_Config(uint32_t ticks) 

選 system clock 為主所以在配置 reload register 會影響中斷發生的時間

 SysTick_Config(SystemCoreClock / 1000) 

以這行程式碼來說 systick timer counter 1 次需要 1/168MHz的時間

Reload = 168M / 1000 = 168K , interrupt 時間 = 168K / 168M = 1ms發生一次.

官方的範例提供了 2 個function主要負責計算delay,Delay time 則是透過 Systick 配置決定的

 1 /**
 2   * @brief  Inserts a delay time.
 3   * @param  nTime: specifies the delay time length, in milliseconds.
 4   * @retval None
 5   */
 6 void Delay(__IO uint32_t nTime)
 7 { 
 8   TimingDelay = nTime;
 9 
10   while(TimingDelay != 0);
11 }
12 
13 /**
14   * @brief  Decrements the TimingDelay variable.
15   * @param  None
16   * @retval None
17   */
18 void TimingDelay_Decrement(void)
19 {
20   if (TimingDelay != 0x00)
21   { 
22     TimingDelay--;
23   }
24 }
25 
26 /**
27   * @brief  This function handles SysTick Handler.
28   * @param  None
29   * @retval None
30   */
31 void SysTick_Handler(void)
32 {
33   TimingDelay_Decrement();
34 }

 

(STM32F4) SysTick理解使用

标签:需要   ret   pre   register   inf   ted   http   com   oid   

原文地址:https://www.cnblogs.com/ollie-lin/p/10099955.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!