STM32微秒級別延時實現

2021-09-29 07:58:12 字數 1013 閱讀 1408

hal庫函式中有延時函式hal_delay();進行毫秒級別的延時,但是在實際的開發中編寫時序時有時需要進行較為準確的微秒級別延時像ssi協議介面等,本文章採用乙個通用定時器的方式實現微秒級別的延時,而不採用滴答定時器是由於hal庫函式中很多地方需要使用滴答定時器進行超時判斷,更改滴答配置恐引發意外,另外傳統的for迴圈延時不太準確。

首先配置使能定時器(我選擇的是定時器6)

第二步:配置定時器(當然在此步驟前預設讀者已經完成了系統時鐘的配置,f1系列我配置為72mhz,那麼對於定時器6來說時鐘也是72mhz)

進行72分頻(71+1)那麼得出分頻後定時器的時鐘為1mhz即1us進行資料變化一次,根據這個思想,我將定時器配置為向上計數,自動重灌,好方目前位置cubemx配置方面已經完成了,生成工程就行

第三步:開啟工程 在tim.c 文字中的begin 和end之間新增以下**即可

void delayxus(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標頭檔案中 在其他地方引用該標頭檔案即可使用該延時,經過實際測試可得還是比較準的。

STM32精確延時

前面用 stm32 的gpio 模擬液晶驅動 時序時遇到乙個問題,就是怎樣產生一段較為精確的延時。通常產生一小段延時的方法就是利用乙個遞增或者遞減迴圈進行軟體延時。例 void delay void 我在使用 mplab ide 進行pic 微控制器的開發時,mplab 提供了乙個 watch 跑錶...

STM32HAL庫微秒延時 s

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

STM32延時不同寫法

對於stm32系列的延時函式有著不同的寫法,本章將給大家帶來最簡單的延時到最精準延時函式的各種寫法及原理。在stm32系列中要學會用好systick定時器,這很重要 原理 用c中累加或者累減的方法,到一定條件後就退出。好處 好寫,用for迴圈或者while迴圈,不用去理解各種有關底層硬體的暫存器。壞...