【STM32】HALライブラリPWMで呼吸光実験を実現

タスクの目的: CubeMX ソフトウェアで PWM 信号を出力するようにタイマーを設定する方法をマスターします。

タスクの内容: PWM 信号を使用して、開発ボード上のインジケーター LED を制御します。PWM 周期を 20 ms に設定し、デューティ サイクルは 0% から始まり、ステップは 10% です。100% まで増分した後、0% から開始してこのプロセスを繰り返します。デューティ サイクル変更の時間間隔は 100 ミリ秒です。

タスクの遂行:

1. デザインアイデア

デューティ サイクル Duty とステップ値 Step の 2 つの変数を定義します。デューティ サイクルは 0 から 100% まで段階的に増加し、ステップ比は 10%、ステップ時間間隔は 100 ms です。PWM信号の周期は20ms、タイマ14のタイミングクロックTIM2_CLKは84MHz、プリスケーラ係数PSCは84−1に設定可能、オートリロード値ARRは20000−1である。

デューティサイクルは0から始まるため、キャプチャ/コンペアレジスタTIM14_CCR1の初期値を0に書き込み、while(1)ループ内でキャプチャ/コンペアレジスタ設定マクロ関数__HAL_TIM_SetCompare()を呼び出してレジスタの内容を変更します。 、 0 から始まり、徐々に増加し、プロセスを繰り返します。

2. 導入プロセス

ボードを使用すると、時間厳守のアトム エクスプローラーになります。

最初のステップはシステムクロックを設定することです

ステップ 2: ピンを構成する

PF9 は LED ライトと TIM14 の多重化端子ですので、TIM14 を PWM のタイマーとして設定します。

3 番目のステップは、タイマー TIM14 を設定することです。

TIM14 は APB1 バスに接続されており、APB1 バスのクロックは 84MHz です。PWM の周期は 20ms なので、PSC=84-1、ARR=20000-1、デューティ サイクル パルス=0 に設定し、プリロード機能を有効にします。

4 番目のステップ、コードの生成

5番目のステップ、コードを書く

/* USER CODE BEGIN 2 */
	uint16_t Duty=0;
	uint16_t step=2000;//定义占空比和步进值 step=20000*10%=2000
	
	HAL_TIM_PWM_Start(&htim14,TIM_CHANNEL_1);
  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
		for(Duty=0;Duty<=20000;Duty=Duty+step)
		{
			__HAL_TIM_SetCompare(&htim14,TIM_CHANNEL_1,Duty);
			HAL_Delay(100);
		}
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
		
  }
  /* USER CODE END 3 */

操作結果:

プログラムをコンパイルおよびリンクして実行可能コードを生成し、ST-Link エミュレータを介して開発ボードにダウンロードします。インジケータ LED が消灯状態から始まり、徐々に明るさが増していくのが確認でき、このプロセスを繰り返します。

おすすめ

転載: blog.csdn.net/weixin_45015121/article/details/129220738
おすすめ