cortex-m3中,有個systick 系統時鐘,systick 是cm3核心的外設,相關定義在core_cm3.h中。系統定時器內嵌在nvic中,是24位的向下遞減的計數器,每記一次數的時間是1/sysclk。
一般設定sysclk=72m。而系統時鐘一般用於作業系統產生時基。
與systick相關的暫存器有四個,ctrl控制及狀態暫存器、load重灌數值暫存器、val當前數值暫存器、calib校準數值暫存器。
程式設計要點:
(1)新建相關的.c .h 檔案,在stm32f10x_it.h申明中斷服務函式。
systick 有關的暫存器在core_cm3.h 中。
systick配置函式為:static_inline uint32_t systick_config(uint32_t ticks); // ticks 最大不超過2的24次方。當ticks遞減到0時產生中斷。函式完成的工作有:
1)設定重灌暫存器
2)設定優先順序;__static_inline void nvic_setpriority(irqn_type irqn, uint32_t priority),systick是核心外設,優先順序和普通外設不一樣,通過核心外設中斷優先順序 scb暫存器的shprx(x=1,2,3) 來設定。優先順序有0~15,值越小優先順序越高。
3)設定當前值為0
4)設定ahbclk=72m
5)使能定時器和定時器中斷
systick_config()庫函式主要配置了systick 中的三個暫存器:load、val 和ctrl;
注意:核心外設和片上外設優先順序根據二進位制轉化後比較,具有比較的相同性。
(2)使用者定義systick初始化函式 systick_init()
/* systemfrequency / 1000 1ms 中斷一次
* systemfrequency / 100000 10us 中斷一次
* systemfrequency / 1000000 1us 中斷一次
*/這是一次計數的時間,乘以load重灌的數值就是一次中斷的時間。
(3)systick定時函式來設定定時時間
全域性變數的定義使用 看這個鏈結介紹;
在systick.h 中:
#ifndef __systick_h
#define __systick_h
#include "stm32f10x.h"
#include "core_cm3.h"
#define systemcoreclock 72000000
void delay_1s(uint32_t ntime);
void delay_10us(uint32_t ntime);
void timingdelay_decrement(void);
void systick_iint(void);
#endif
在systick.c 中:
#include "./systick_bsp/systick.h"
__io uint32_t timingdelay;
__io uint32_t timingdelay_ss;
void systick_iint(void) }
void delay_10us(uint32_t ntime)
void delay_1s(uint32_t ntime)
}void timingdelay_decrement(void)
}
在stm32f10x_it.c 中寫系統時鐘中斷服務函式:
void systick_handler(void)
要點:
(1)我們知道時鐘72m的計數一次的時間為1/72 m , 多少次計數中斷一次的時間是乘以重灌暫存器的值,因為是減數計數。
一次中斷的時間是(systemcoreclock/100000)×1/72 m; 10us
(2)10us*timingdelay 就是微妙的計數
STM32學習 時鐘系統
眾所周知,時鐘系統是 cpu 的脈搏,就像人的心跳一樣。所以時鐘系統的重要性就不言而 喻了。stm32 的時鐘系統 stm32 的時鐘系統比較複雜,不像簡單的 51 微控制器乙個系統時鐘就可以解決一切。於 是有人要問,採用乙個系統時鐘不是很簡單嗎?為什麼 stm32 要有多個時鐘源呢?因為首先 st...
STM32系統時鐘
1 參考資料 stm32f1開發指南 庫函式版本 4.3小節 時鐘系統 stm32中文參考手冊v10 第六章 復位和時鐘控制 rcc 2 時鐘系統知識總結 1 stm32有5個時鐘源 hsi hse lsi lse pll hsi是高速內部時鐘,rc振盪器,頻率為8mhz,精度不高 hse是高速外部...
stm32系統時鐘
hsi 約等於8mhz rc振盪器產生的時鐘 hse 外部時鐘 css 如果檢測到外部時鐘的損壞,自動切換到hsi 系統時鐘和rtc時鐘 均有三個 systick定時器 簡單的定時器,常用來做延時和心跳時鐘 24位的倒計時定時器 ctrl暫存器 其實滴答定時器很簡單,就是設定初值,然後延遲,最後就是...