??作者簡介:熱愛科研的嵌入式開發者,修心和技術同步精進,
代碼獲取、問題探討及文章轉載可私信。
???愿你的生命中有夠多的云翳,來造就一個美麗的黃昏。
🍎獲取更多嵌入式資料可點擊鏈接進群領取,謝謝支持!👇
點擊領取更多詳細資料
1. 介紹
在嵌入式系統開發中,對時間的精確測量和延時是很常見的需求。STM32微控制器提供了豐富的定時器功能,可以用于實現精確的時間測量和延時。本文將介紹如何使用STM32定時器來實現精確的時間測量和延時,并提供相關代碼示例。
2. 定時器測量時間
2.1 定時器初始化配置
在使用定時器測量時間前,首先需要初始化并配置定時器。以下是一個典型的定時器初始化的代碼片段:
```c
TIM_HandleTypeDef htim2;void MX_TIM2_Init(void)
{TIM_ClockConfigTypeDef sClockSourceConfig = {0};TIM_MasterConfigTypeDef sMasterConfig = {0};htim2.Instance = TIM2;htim2.Init.Prescaler = 16000 - 1;htim2.Init.CounterMode = TIM_COUNTERMODE_UP;htim2.Init.Period = 65535;htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;if (HAL_TIM_Base_Init(&htim2) != HAL_OK){Error_Handler();}sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;if (HAL_TIM_ConfigClockSource(&htim2, &sClockSourceConfig) != HAL_OK){Error_Handler();}if (HAL_TIM_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK){Error_Handler();}
}
```
在以上代碼中,使用了TIM2定時器,并配置了定時器的時鐘源、分頻系數等參數,以便后續進行精確的時間測量。
2.2 測量時間
使用定時器測量時間一般包括以下步驟:
```c
uint32_t start_time, end_time, elapsed_time;// 啟動定時器
HAL_TIM_Base_Start(&htim2);
start_time = __HAL_TIM_GET_COUNTER(&htim2);// 進行需要測量的操作// 停止定時器
end_time = __HAL_TIM_GET_COUNTER(&htim2);
HAL_TIM_Base_Stop(&htim2);// 計算耗時
elapsed_time = end_time - start_time;
```
通過以上代碼,可以利用定時器準確地測量某段代碼的執行時間,從而實現對程序運行時間的精確測量。
3. 延時
3.1 定時器初始化配置
同樣地,使用定時器進行延時前需要進行初始化配置。以下是一個典型的定時器初始化的代碼片段:
```c
TIM_HandleTypeDef htim3;void MX_TIM3_Init(void)
{TIM_ClockConfigTypeDef sClockSourceConfig = {0};htim3.Instance = TIM3;htim3.Init.Prescaler = 16000 - 1;htim3.Init.CounterMode = TIM_COUNTERMODE_UP;htim3.Init.Period = 65535;htim3.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;htim3.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;if (HAL_TIM_Base_Init(&htim3) != HAL_OK){Error_Handler();}sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;if (HAL_TIM_ConfigClockSource(&htim3, &sClockSourceConfig) != HAL_OK){Error_Handler();}
}
```
3.2 實現延時
使用定時器進行延時一般包括以下步驟:
```c
void HAL_Delay(uint32_t milliseconds)
{uint32_t start_time, current_time;HAL_TIM_Base_Start(&htim3);start_time = __HAL_TIM_GET_COUNTER(&htim3);do {current_time = __HAL_TIM_GET_COUNTER(&htim3);} while(current_time - start_time < milliseconds);HAL_TIM_Base_Stop(&htim3);
}
```
通過以上代碼,可以使用定時器實現毫秒級的精確延時,滿足嵌入式系統中對延時精度要求較高的場景。
4. 總結
通過本文的介紹,您應當對如何使用STM32定時器來實現精確的時間測量和延時有了初步的了解。合理配置并使用定時器功能,可以實現對程序運行時間的精確測量和對延時進行有效的控制,為嵌入式系統的開發提供了更精準的時間支持。
嵌入式物聯網的學習之路非常漫長,不少人因為學習路線不對或者學習內容不夠專業而錯失高薪offer。不過別擔心,我為大家整理了一份150多G的學習資源,基本上涵蓋了嵌入式物聯網學習的所有內容。點擊這里,0元領取學習資源,讓你的學習之路更加順暢!記得點贊、關注、收藏、轉發哦。?
? 點擊鏈接掃碼進入嵌入式交流群 ?https://fss.mpay8.cn/article/dmrjinh2C6fjejm