stm32F4 時基定時器(2)

2021-06-08 06:40:56 字數 2096 閱讀 3384

找了很多的資料,終於把時基定時器的給弄懂了,沒有使用庫函式,直接操作暫存器。

下面介紹stm32中的systick,systick 部分內容屬於nvic控制部分,一共有4個暫存器,名稱和位址分別是:

stk_csr,        0xe000e010  --  控制暫存器

stk_load,     0xe000e014  --  

過載暫存器

stk_val,        0xe000e018  --  

當前值暫存器

stk_calrb,   0xe000e01c  --   

校準值暫存器

首先看stk_csr

控制暫存器:

暫存器內有4個位

t具有意義:

第0位:enable,systick 使能位  (0:關閉systick功能;1:開啟systick功能)

第1位:tickint,systick 中斷使能位    (0:關閉systick中斷;1:開啟systick中斷)

第2位:clksource,systick時鐘源選擇  (0:使用hclk/8 作為systick時鐘;1:使用hclk作為systick時鐘)

第3位:countflag,systick計數比較標誌,

如果在上次讀取本暫存器後,systick 已經數到了0,則該位為1。如果讀取該位,該位將自動清零

stk_val當前值暫存器:

也是個24位的暫存器,

讀取時返回當前倒計數的值,寫它則使之清零,同時還會清除在

systick 

控制及狀態暫存器中的

countflag 

標誌。stk_calrb  校準值暫存器:

這個暫存器好像目前的水平我還用不到,大體意思明白點,

位31 noref :1=沒有外部參考時鐘(stclk 不可用)0=外部參考時鐘可用

位30 skew:1=校準值不是準確的1ms 0=校準值是準確的1ms

stk_load  

過載暫存器:

systick是乙個遞減的定時器,當定時器遞減至0時,過載暫存器中的值就會被重裝載,繼續開始遞減。stk_load  過載暫存器是個24位的暫存器最大計數0xffffff。

下面我們就應用

systick

定時器來裸奔,把它作為乙個定時器來用,

還是老一套,在暫存器標頭檔案中新增定義暫存器:

#include "stm32f4_discovery.h"

#define calib (*((volatile unsigned long *)0xe000e01c))

#define val (*((volatile unsigned long *)0xe000e018))

#define load (*((volatile unsigned long *)0xe000e014))

#define systick_csr (*((volatile unsigned long *)0xe000e010))

typedef struct

systick_type;

#define systick ((systick_type *) systick_base )

void gpio_configuration(void)

void systick_configuration(void)

__io uint32_t timingdelay = 20000;

int main() }

}void systick_handler(void)

STM32F4定時器學習

高階定時器 time1 time8 通用定時器 time2time5,tim9tim14 基本定時器 time6 和 time7 等 tim2 tim5 的暫存器介紹 控制暫存器 1 timx cr1 只用到了 timx cr1 的最低位,也就是計數器使能位,該位必須置 1,才能讓定時器開始計數。d...

stm32f4 定時捕獲

概述 1000hz 20 80 占空比現象 1000hz 51 58 占空比現象 關於本文的更多詳情請往下看。筆者針對於初學者提供的例程都是去掉了許多不必要的功能,精簡了官方的 對初學者一看就明白,以簡單明瞭的工程供大家學習。stm32f4 tim輸入波形捕獲 脈衝頻率 占空比 例項 訪問密碼 st...

STM32F4定時器初始化的含義

最近在弄stm32乙太網的時候,看到定時器的中斷,發現忘記了一些定時器的內容。比如stm32f4的初始化定時器,tim3 int init 5000 1,8400 1 這一句就沒有理解了,這個是多久進入一次的定時器中斷呢?趕緊去翻了一下我之前stm32定時器的網頁收藏夾。寫下這篇文章記錄一下。先說結...