[STM32] HAL ライブラリ - タイマーを使用する

1. 基本的なタイミング機能

1. プロジェクトの基本設定 (クロック ツリー、RCC 選択、SYS)
リンク:
2. TIMx-Mode-Clock Source を入力し、Internal Clock を選択します。
ここに画像の説明を挿入
3. タイミング時間の計算式
タイミング時間 = (Prescaler+1) × (Counter +1) /タイミング たとえば、タイミング
時間が 1ms の場合、Prescaler = 72-1; Counter = 1000 - 1; (TIM2 クロック周波数は 72MHz に設定されます)
4. タイマー割り込みを有効にしてプロジェクトを生成します

5. コードを追加します
(1) ) hal_tim.c で開始タイマー割り込み関数を見つけて、それを main 関数の初期化に追加します。

  /* USER CODE BEGIN 2 */
	HAL_TIM_Base_Start_IT(&htim2);
  /* USER CODE END 2 */

(2) hal_tim_ex.c にコールバック関数があります。それを main 関数にコピーし、関数を追加します。

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
	{
    
    
		if(htim->Instance == TIM2)
		{
    
    
			//用户代码
		}
}

2. PWM機能

2.1. 通常のタイマPWM機能

1. プロジェクトの基本設定 (クロック ツリー、RCC 選択、SYS)
リンク:
2. TIMx-Mode-Clock Source を入力し、Internal Clock を選択し、使用する PWM チャネルを選択します。
ここに画像の説明を挿入
3. タイミング時間の計算式に従って PWM 周波数を設定します。たとえば
タイミング時間が 1ms の場合、Prescaler = 72-1; Counter = 1000 - 1; (TIM2 クロック周波数は 72MHz に設定) に設定すると、PWM 周波数は 1KHz になります。
4. プロジェクトの生成
5. コードの追加
(1) 初期化にタイマー開始関数を追加

  /* USER CODE BEGIN 2 */
	HAL_TIM_PWM_Start(&htim2,TIM_CHANNEL_1);
  /* USER CODE END 2 */

(2) PWM デューティサイクルを設定する

  while (1)
  {
    
    
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
		__HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_1,500);

  }

500 は設定したカウント値に関連しており、カウント値を 1000 に設定した場合、500 はデューティ サイクルが 50% であることを意味します。
ここに画像の説明を挿入

2.2、アドバンストタイマーPWM機能

通常のタイマと同様ですが、コードの初期化とデューティ比の設定が関数名が異なります アドバンスト
タイマ(TIM1、TIM8)の基本機能を設定した場合、
(1) チャネル1でPWM生成CH1を選択した場合、使用する機能は通常のタイマーデバイスと同じです

 /* USER CODE BEGIN 2 */
	HAL_TIM_PWM_Start(&htim1,TIM_CHANNEL_1);
  /* USER CODE END 2 */
  while (1)
  {
    
    
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
		__HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_1,500);
  }

(2) チャネル 1 が PWM 生成 CH1N を選択する場合、スタートアップ関数の変更が必要です

  /* USER CODE BEGIN 2 */
	HAL_TIMEx_PWMN_Start(&htim1,TIM_CHANNEL_1);
  /* USER CODE END 2 */

(3) Channel1 が PWM Generation CH1N を選択した場合、(1) と (2) の機能を使用します。このとき、2 つの相補 PWM が生成されます。

  /* USER CODE BEGIN 2 */
	HAL_TIM_PWM_Start(&htim1,TIM_CHANNEL_1);
	HAL_TIMEx_PWMN_Start(&htim1,TIM_CHANNEL_1);
  /* USER CODE END 2 */
 while (1)
  {
    
    
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
		__HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_1,300);

  }

ここに画像の説明を挿入
(4) さらなる機能
追加 アドバンストタイマは相補出力だけでなく、ブレーキ機能やデッドタイム設定機能も備えており、主にモータ制御に使用されます。

おすすめ

転載: blog.csdn.net/qq_39587650/article/details/119652203