STM32CubeMX開發之路—9使用TIM實現微秒級別的延時
運行環境
- Windows10
- STM32CubeMX___Version 5.0.0
- Keil5(MDK5)___Version 5.15
簡介
本例程主要講解如何使用是定時器實現微秒級別的延時。
STM32CubeMx基本配置
基礎配置過程請參考 STM32CubeMx(Keil5)開發之路—配置第一個項目
printf重定向例程請參考 STM32CubeMx(Keil5)開發之路——3發送USART數據和printf重定向
STM32CubeMx PWM配置
1——點擊TIM3進行設置
2——選擇 “Internal Clock” 選項
3——點擊下方Parameter Settings
4——照下圖所示設置預分頻等參數
代碼修改
1——選擇main.c文件
2——代碼區添加如下微秒延時代碼
/* USER CODE BEGIN 0 */
int fputc(int ch, FILE *f)
{
HAL_UART_Transmit(&huart1, (uint8_t *)&ch,1, 0xFFFF);
return ch;
}
/* 進行5000微秒以內的延時*/
void delay_us(uint16_t us)
{
/* 中斷會打斷微秒延時函數,
* 但計數器計數不會停
* 防止計數器增加到65535之後重新開始計數
*/
uint16_t differ=50000-us;
HAL_TIM_Base_Start(&htim3);
__HAL_TIM_SET_COUNTER(&htim3,differ);
while(differ<50000)
{
differ=__HAL_TIM_GET_COUNTER(&htim3);
}
HAL_TIM_Base_Stop(&htim3);
}
/* USER CODE END 0 */
接着在mian函數中添加如下測試代碼
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
printf("this is 1 us Delay");
for(i=0;i<1000;i++)
{
delay_us(4000);
}
}
/* USER CODE END 3 */
燒錄代碼後打開出口調試助手,正確的話會看到大約沒4秒輸出一次 " this is 1 us Delay " 信息
備註:提供一下個人微信號 Hleafleafleaf,歡迎加好友,共同學習!共同進步!