STM32 HAL庫實現微秒級別延時
HAL庫函數中有延時函數HAL_Delay();進行毫秒級別的延時,但是在實際的開發中編寫時序時有時需要進行較為准確的微秒級別延時像SSI協議接口等,本文章采用一個通用定時器的方式實現微秒級別的延時,而不采用滴答定時器是由於HAL庫函數中很多地方需要使用滴答定時器進行超時判斷,更改滴答配置恐引發意外,另外傳統的for循環延時不太准確。
首先配置使能定時器(我選擇的是定時器6)

第二步:配置定時器(當然在此步驟前默認讀者已經完成了系統時鍾的配置,F1系列我配置為72MHz,那么對於定時器6來說時鍾也是72MHz)

進行72分頻(71+1)那么得出分頻后定時器的時鍾為1MHz即1us進行數據變化一次,根據這個思想,我將定時器配置為向上計數,自動重裝,好方目前位置cubeMX配置方面已經完成了,生成工程就行
第三步:打開工程 在tim.c 文本中的begin 和end之間添加以下代碼即可
/****************************************** ***功能:實現us級別延時 *******************************************/ void delay_us(uint16_t us) { uint16_t differ=0xffff-us-5; //設定定時器計數器起始值 __HAL_TIM_SET_COUNTER(&htim6,differ); HAL_TIM_Base_Start(&htim6); //啟動定時器 while(differ<0xffff-6) //補償,判斷 { differ=__HAL_TIM_GET_COUNTER(&htim6); //查詢計數器的計數值 } HAL_TIM_Base_Stop(&htim6); }
第四步:將void delayXus(uint16_t us);添加至tim.h頭文件中 在其他地方引用該頭文件即可使用該延時,經過實際測試可得還是比較准備的
void delay_us(uint16_t us);
以上整理提供by 荒野大嫖客 有問題可以一起探討探討或者cubemx中文QQ群發表 里面大牛比較多
