STM32CubeMX開發之路—9使用TIM實現微秒級別的延時

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,歡迎加好友,共同學習!共同進步!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章