STM32 HAL庫方式的微秒延時函式

2021-09-30 01:21:23 字數 1444 閱讀 5756

標準庫一般是使用系統嘀嗒定時器來進行微妙級別的延時,而hal庫將systick定時器用做了庫函式的超時定時器,使用的地方非常多,自己修改**使用嘀嗒定時器的話就會引起錯亂。所以此時就需要自己實現乙個微秒級別延時函式。

優點:全系列通用,只需要將巨集定義cpu_frequency_mhz根據時鐘主頻修改即可。

缺點:系統滴答定時器是hal庫初始化的,且必須有hal庫初始化。

#define cpu_frequency_mhz    72		

// stm32時鐘主頻

void

delay_us

(__io uint32_t delay)

while

((val < last)

&&(val >= curr));

}else

while

((val <= last)

||(val > curr));

} delay -

= temp;

}}

優點:實現簡單,如果是f1系列,hal_rcc_gethclkfreq()獲取的值是72000000,此方式經過測試還是比較準的,如果不考慮通用性,f1系列建議使用此種方式。

缺點:只適用f1系列72m主頻。

void

delay_us

(uint32_t us)

}

優點:stm32全系列通用

缺點:占用乙個定時器

該方法的思路是將定時器設定為1mhz的計數頻率,定時器計乙個數就是1us,實現如下:

【f1系列】

;}【f4系列】

#define dly_tim_handle  (&htim7)

void

delay_us

(uint16_t nus)

__hal_tim_disable

(dly_tim_handle)

;}

STM32HAL庫微秒延時 s

微控制器 stm32f407zet6 軟體版本 stm32cubemx 4.20.1 微控制器韌體包 stm32cube fw f4 v1.15.0 本 是我於2019年8月參加全國大學生電子設計競賽前做賽前準備時參考網路上部落格的程式 編寫,僅用於學習和交流。希望能給各位讀者些許幫助。本部落格對於...

STM32 HAL庫學習筆記

1 系統時鐘 一般用stm32cube生成,使用者只需要會用stm32cube就行。2 gpio輸出void led gpio config void 3 gpio輸入void key gpio config void 4 外部中斷void exti key config void void ext...

STM32 HAL庫學習筆記

1 普通函式與 函式的區別 對普通函式的呼叫 呼叫程式發出對普通函式的呼叫後,程式執行立即轉向被呼叫函式執行,直到被呼叫函式執行完畢後,再返 用程式繼續執行。從發出呼叫的程式的角度看,這個過程為 呼叫 等待被呼叫函式執行完畢 繼續執行 對 函式呼叫 呼叫程式發出對 函式的呼叫後,不等函式執行完畢,立...