STM32基于HAL庫實現(xiàn)微秒延時
HAL只提供了ms級的延時,但有些特殊場景,比如與通信速率較慢的設備通信時,會需要用到us級延時。STM32標準庫一般是使用系統(tǒng)嘀嗒定時器來進行微妙級別的延時,而HAL庫將SysTick定時器用做了庫函數(shù)的超時定時器,使用的地方非常多,自己修改代碼使用嘀嗒定時器的話就會引起錯亂,所以此時就需要自己實現(xiàn)一個us級別延時函數(shù)。
這里介紹一種使用定時器設計us級延時函數(shù)的方法。
思路:我們將定時器設置為1MHZ的計數(shù)頻率,這樣定時器計一個數(shù)就是1us,我們就可以通過定時器計數(shù)值得知計時時間。
以使用TIM1為例,這里我們采用STM32F103內部8MHz晶振,故需要設置預分頻系數(shù)PSC為8-1=7。同時配置PA1為GPIO輸出模式,之后用于測試延時函數(shù)的效果。

Untitled
編寫微秒延時函數(shù):
/* USER CODE BEGIN PD */
#define DLY_TIM_Handle (&htim1) // Timer handle
/* USER CODE END PD */
/* USER CODE BEGIN PFP */
void delay_us(uint16_t nus);
/* USER CODE END PFP */
/* USER CODE BEGIN 4 */
void delay_us(uint16_t nus)
{
__HAL_TIM_SET_COUNTER(DLY_TIM_Handle, 0); // set the counter value a 0
__HAL_TIM_ENABLE(DLY_TIM_Handle); // start the counter
// wait for the counter to reach the us input in the parameter
while (__HAL_TIM_GET_COUNTER(DLY_TIM_Handle) < nus);
__HAL_TIM_DISABLE(DLY_TIM_Handle); // stop the counter
}
/* USER CODE END 4 */
編寫微秒延時函數(shù)測試程序,使PA1高低電平間隔100us轉換一次:
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_1);
delay_us(100);
}
/* USER CODE END 3 */
燒錄程序,通過邏輯分析儀觀察PA1電平變化:


可以看到PA1高電平持續(xù)時間和低電平持續(xù)時間都和符合100us的預設,延時效果較好。
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。
舉報投訴
-
STM32
+關注
關注
2312文章
11189瀏覽量
374502 -
定時器
+關注
關注
23文章
3370瀏覽量
124429 -
GPIO
+關注
關注
16文章
1333瀏覽量
56429 -
Systick
+關注
關注
0文章
67瀏覽量
14014 -
HAL庫
+關注
關注
1文章
121瀏覽量
7731
發(fā)布評論請先 登錄
相關推薦
熱點推薦
怎么實現(xiàn)STM32CubeIDE HAL庫微秒us的延時Delay?
怎么實現(xiàn)STM32CubeIDE HAL庫微秒us的延時Delay?
發(fā)表于 11-25 07:40
HAL庫微秒級的延時實現(xiàn)
目錄前言一、代碼和使用二、使用和驗證1.引入頭文件2.初始化3.使用和驗證總結前言接觸HAL庫差不多兩年了,一直苦于HAL庫沒有自帶微秒級的
發(fā)表于 01-20 07:49
STM32標準庫改為HAL庫的程序實現(xiàn)
標準庫占絕大多數(shù),自己買的板子跟的資料也一般是標準庫,HAL庫很少,不過要是使用STM32CubeMx配置,那么就是使用的
發(fā)表于 11-22 11:23
?3.6w次閱讀
STM32單片機使用定時器中斷方式實現(xiàn)毫秒級延時的設計
因為STM32 HAL庫中僅有對HAl_Delay()毫秒級的延時,為實現(xiàn)精確的
發(fā)表于 06-04 14:55
?1.2w次閱讀
通用定時器實現(xiàn)STM32單片機微秒級延時函數(shù)
一、前言在實際應用中,經常用到延時函數(shù),而HAL庫的延時函數(shù)是毫秒級的,雖然可以自行修改,但該函數(shù)使用的地方較多,修改不慎可能會引起其他問題,所以本文使用一個定時器,
發(fā)表于 11-24 18:51
?20次下載
STM32CubeMX 配置STM32F407 實現(xiàn)HAL庫延時微妙方案
STM32CubeMX 配置STM32F407 實現(xiàn)HAL庫延時微妙方案
發(fā)表于 11-24 20:51
?20次下載
STM32 HAL 庫延時函數(shù) HAL_Delay 解析
HAL 庫有提供延時函數(shù),只不過它只能實現(xiàn)簡單的毫秒級別延時,沒有實現(xiàn) us 級別
發(fā)表于 01-17 09:48
?8次下載
在HAL庫中用定時器實現(xiàn)自定義延時函數(shù)delay_us()
STM32程序從標準庫移植到HAL庫的時候,會發(fā)現(xiàn)HAL庫中只有一個毫秒級
STM32 HAL庫的功能和使用方法 STM32 HAL庫和標準庫的區(qū)別
HAL(Hardware Abstraction Layer)是指硬件抽象層,是一種封裝底層硬件接口驅動的編程庫。在嵌入式系統(tǒng)中,HAL庫可以更加方便地
發(fā)表于 08-08 18:21
?7639次閱讀
STM32如何使用定時器實現(xiàn)微秒(us)級延時?
STM32如何使用定時器實現(xiàn)微秒(us)級延時? 在STM32微控制器中,可以使用定時器實現(xiàn)
STM32基于HAL庫實現(xiàn)微秒延時
評論