找了很多的資料,終於把時基定時器的給弄懂了,沒有使用庫函式,直接操作暫存器。
下面介紹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定時器的網頁收藏夾。寫下這篇文章記錄一下。先說結...