stm32 systcoretick延時函式

2021-10-25 02:30:49 字數 1356 閱讀 8590

systick 定時器延時

cm3 核心的處理器,內部包含了乙個systick 定時器,systick 是乙個24 位的倒計數定時器,當計到0 時,將從reload 暫存器中自動重裝載定時初值。只要不把它在systick 控制及狀態暫存器中的使能位清除,就永不停息。systick 在stm32 的參考手冊裡面介紹的很簡單,其詳細介紹,請參閱《cortex-m3 權威指南》。

這裡面也有兩種方式實現:

a.中斷方式

如下,定義延時時間time_delay,systick_config()定義中斷時間段,在中斷中遞減time_delay,從而實現延時。

volatile unsigned long time_delay; // 延時時間,注意定義為全域性變數

//延時n_ms

void delay_ms(volatile unsigned long nms)

time_delay=nms;//讀取定時時間

while(time_delay);

systick->ctrl=0x00; //關閉計數器

systick->val =0x00; //清空計數器}

//延時nus

void delay_us(volatile unsigned long nus)

time_delay=nus;//讀取定時時間

while(time_delay);

systick->ctrl=0x00; //關閉計數器

systick->val =0x00; //清空計數器

//在中斷中將time_delay遞減。實現延時
void systick_handler(void)

b.非中斷方式

主要仿照原子的《stm32不完全手冊》。systick 的時鐘固定為hclk 時鐘的1/8,在這裡我們選用內部時鐘源72m,所以systick的時鐘為9m,即systick定時器以9m的頻率遞減。systick 主要包含ctrl、load、val、calib 等4 個暫存器,

程式如下,相當於查詢法。

//仿原子延時,不進入systic中斷

void delay_us(u32 nus)

while((temp&0x01)&&(!(temp&(1<<16))));//等待時間到達

systick->ctrl=0x00; //關閉計數器

systick->val =0x00; //清空計數器

}void delay_ms(u16 nms)

while((temp&0x01)&&(!(temp&(1<<16))));//等待時間到達

systick->ctrl=0x00; //關閉計數器

systick->val =0x00; //清空計數器

}

STM32 STM32啟動方式

在復位時,會按照boot的狀態判斷進入哪種模式,boot腳不用保持長狀態。模式1 boot0拉低,使用使用者快閃儲存器區,這是最正常啟動的模式,即,在正常啟動時,boot0應該下拉為低電平 模式3 從sram執行,由於stm32的flash擦寫的次數是有限的,所以為了保護我們的flash,延長mcu...

STM32 STM32 GPIO模式理解

stm32的gpio的配置模式有好幾種,包括 模擬輸入 浮空輸入 上拉輸入 下拉輸入 開漏輸出 推挽輸出 復用開漏輸出 復用推挽輸出 如圖是gpio的結構原理圖 1.模擬輸入 從上圖我們可以看到,我覺得模擬輸入最重要的一點就是,他不經過輸入資料暫存器,所以我們無法通過讀取輸入資料暫存器來獲取模擬輸入...

STM32 STM32學習記錄3 按鍵輸入

1 io配置 上拉輸入模式 區別在於沒有輸入訊號的時候預設輸入高電平 因為 有弱上拉 下拉輸入模式 區別在於沒有輸入訊號的時候預設輸入低電平 因為有弱下拉 對於浮空輸入模式顧名思義也就 是輸入什麼訊號才是什麼訊號,對於浮空輸入要保證有明確的輸入訊號。2 stm32的gpio既可以設定為輸出也可以設定...