8 Systick系統滴答實現

2021-07-03 13:53:46 字數 2095 閱讀 4428

之前為了學習嵌入式,寫了有1m多的word文件的學習筆記,但是因為是邊學邊寫的,總是難免有不清楚的地方或者疏漏的地方,因此在這裡重新將學習筆記重新整理,以章節的形式寫出部落格,這也是前面關於整個stm32資料夾內部落格的由來。說起來,systick系統滴答實現很簡單,說起來就是資料裝載,自減,資料為0時觸發中斷,同時資料過載,看起來似乎不難,當然實際設計也不難,但其中涉及的知識點卻不少(也算是第一次接觸到arm最重要的外設nvic)

學習一種外設,那麼首先肯定要查外設相關暫存器的功能*,systick本身暫存器比較少,僅有4個(參考cortex-m3權威指南8.7章節)

ctrl 狀態和控制暫存器bit0 systick定時器使能位

bit1  systick中斷使能位

bit2  systick時鐘選擇位

bit16 systick狀態標誌位,讀取置0(不使能中斷的可通過查詢該標誌位來實現系統滴答)load 數值過載暫存器當計數器到達0時將load的值裝載到「當前值暫存器」

val  當前值暫存器訪問暫存器時的當前值,屬性是寫-清除。清零該值可以同時清零 ctrl的bit16

calib 校準值暫存器

用於systick的時鐘精確校準。

因為一般對時間的精確度並沒有那麼高,所以校準暫存器就不在說明,這裡主要說明上面3個暫存器的配置:

#define tick_per_second 2 //每s滴答次數

systick->load =sysclk/tick_per_second - 1;

systick->val = 0x0;

systick->ctrl = 0x00000007; //定時器使能,中斷使能,選擇系統時鐘作為中斷響應。

《時鐘程式編寫》

1.初始化系統時鐘(具體參見rcc章節)

2. 使能相關gpio口的時鐘(參加流水燈中gpio配置)

3.初始化systick時鐘(如上面的初始化暫存器**)

4.確定向量表位置,設定systick中斷優先順序, 預設-1

語句如下

scb->vtor = 0x0800000000|(0x0 & (u32)0x1fffff80); //將向量表定位到flash的0x0偏移處

nvic_setpriority(systick_irqn, (1<<__nvic_prio_bits) - 1); //設定優先順序

本例中中斷函式為

void  systick_handle(void)

即可實現系統滴答實驗

當然滴答時鐘初始化還有更簡單的內部函式(在core_cm3.h中)

直接呼叫systick_config(sysclk/tick_per_second)即可。 完成上面的初始化,用乙個全域性變數做標誌位,即可利用系統滴答實現led閃爍。

這個程式比較簡單,但其中涉及到arm中斷的知識卻並不簡單,關於arm中的中斷我會另開一頁去講,這裡主要講為什麼中斷函式名為systick_handle(), 這個需要檢視stm32f10x.s檔案

向量表:_vector  .......

dcd     systick_handler           ; systick handler

......

systick_handler proc

export  systick_handler           [weak]

b       //跳轉到當前指定位址.

endp

dcd(偽**,據定義偽指令一般用於為特定的資料分配儲存單元,同時可完成已分配儲存單元的初始化),

了解過函式指標的應該知曉函式名某種意義也是乙個位址,那麼當systick中斷產生時,就會轉到名為systick_handler的c語言函式。

當systick->val中值置0,且中斷和時鐘使能時,此時中斷產生,這時指令匯流排就會從向量表中找出正確的異常向量,然後在服務程式的入口取指(這也是為什麼要重新定位向量表的原因,因為實際**包括向量表都是在flash中的,定位向量表不是移動向量表,而是指定向量表的實際起始位址)。實際中斷的產生比這複雜的多,這裡不在贅述,後序會詳細講。

stm32 系統滴答定時器Systick

systick定時器簡介 systick定時器就是系統滴答定時器,systick定時器,是乙個簡單的定時器,對於st的cm3,cm4,cm7核心晶元,都有systick定時器。systick定時器常用來作延時,或者實時系統的心跳時鐘,這樣可以節省mcu資源,不用浪費乙個定時器。systick定時器是...

stm32的systick(系統滴答定時器)

systick定時器被 在nvic中,用於產生systick異常。以前,大多數作業系統需要乙個硬體定時器來產生作業系統需要的滴答中斷,來作為整個系統的時基。for example,為多個任務許以不同數目的時間片,確保沒有乙個任務能霸佔系統 或者把每個定時器週期的某個時間範圍賜予特定的任務等,還有作業...

實訓日記8 情緒評分系統實現

之前的部落格我們設計出了根據情緒對不同型別的文章進行評分的演算法,現在我們使用python對其進行實現。使用這個標準向量可以計算余弦相似度。根據上述演算法思想,實現 如下 import numpy as np 標準情緒向量 st emotion def rate type,emotion 計算評分 ...