1,systick_clksourceconfig()分析:
在fwlib-misc.c中找到systick_clksourceconfig()函式原始碼:
void systick_clksourceconfig(uint32_t systick_clksource)
else
}功能:配置systick->ctrl暫存器
在core_cm3.h中找到systick結構體定義:
#define systick_base (scs_base + 0x0010) /* systick base address */
#define systick ((systick_type *) systick_base) /* systick configuration struct */
typedef struct
systick_type;
systick_clksourceconfig引數的兩種情況:
#define systick_clksource_hclk_div8 ((uint32_t)0xfffffffb)
#define systick_clksource_hclk ((uint32_t)0x00000004)
#define is_systick_clk_source(source) (((source) == systick_clksource_hclk) || \
((source) == systick_clksource_hclk_div8))
兩種時鐘源 :
systick_clksource_hclk_div8 外部時鐘 72/8=9m
systick_clksource_hclk 內部時鐘 hclk=72m
2,systick_config(uint32_t ticks)分析 core_cm3.h中找到systick_config函式原始碼:
static __inline uint32_t systick_config(uint32_t ticks)
#endif
作用:使能systick定時器,開啟systick中斷,配置中斷時間間隔
引數ticks:設定多少個systick時鐘週期產生一次中斷
systick實現延時函式:
1,延時函式初始化
static u8 fac_us=0; //延時微秒的頻率
static u16 fac_ms=0; //延時毫秒的頻率
void delay_init()
2,微秒延時函式
/* nus : 延時多少微秒 */
void delay_us(u32 nus)
while((temp&0x01)&&!(temp&(1<<16))); // 等待計數時間到達(位16)
systick->ctrl&=~systick_ctrl_enable_msk; // 關閉使能
systick->val =0x00; // 重置val
}3,毫秒延時函式
/* nms : 延時多少毫秒 */
void delay_ms(u16 nms)
while((temp&0x01)&&!(temp&(1<<16)));
systick->ctrl&=~systick_ctrl_enable_msk;
systick->val =0x00;
}
SysTick 系統定時器
本章參考資料 arm cortex m4f 技術參考手冊 4.5 章節 systick timer stk 和 4.48 章節 shprx,其中 stk 這個章節有 systick 的簡介和暫存器的詳細描述。因為 systick 是屬於 cm4 核心的外設,有關暫存器的定義和部分庫函式都在 core...
systick(滴答定時器)
今天主要總結一下滴答定時器的相關操作 首先,他是乙個24位的倒數定時器,當計數到0的時候,會從lora暫存器中重新裝載值,只要不把ctrl暫存器中enable清零,他就不會停止。滴答的結構體如下 typedef struct systick type 通常使用前三個暫存器。控制盒狀態暫存器 ctrl...
SysTick 系統定時器
本章參考資料 arm cortex m4f 技術參考手冊 4.5 章節 systick timer stk 和 4.48 章節 shprx,其中 stk 這個章節有 systick 的簡介和暫存器的詳細描述。因為 systick 是屬於 cm4 核心的外設,有關暫存器的定義和部分庫函式都在 core...