STM32CubeMXを始めましょう。 パート1

パート2

パート3



Habrの聴衆を歓迎します。STM32をゼロから学び始めたい人のために書かれた、開発環境STM32CubeMXの使用に関する最初の投稿に注目したいと思います。







マイクロコントローラのいくつかの周辺機器とSTM32CubeMXでの構成を調べて、いくつかの投稿を書く予定でした。 しかし、これらの投稿は独自のドキュメントを置き換えるものではなく、完全であると主張するものでもありません。 私の意見では、STM32周辺機器の典型的な使用例の一部のみを検討します。

誰かがこの資料が役立つと思うことを願っています。



1.簡単な紹介



最初に、少し説明します。 この資料を学習するには、STM32マイクロコントローラーを備えたデバッグボードが必要です。 私はSTM32F746Gディスカバリーボードを使用しますが、これは間違いなく最高の1つであり、それに応じて高価なディスカバリーボードです。









ただし、ほとんどの素材を習得するには、最も単純なSTM32ボードでも十分です。 ディスカバリーボードをお勧めします。 既にST-Linkデバッガが含まれており、作業にはMiniUSBケーブルのみが必要です。 まず、電源さえ必要ありません。ボードは同じケーブルを介して給電されます。



当然、STM32F746G以外のマイクロコントローラーを使用する場合、異なるクロック周波数、異なるピン配置などのプロジェクトで修正を行う必要がありますが、本質は変わりません。 回路図とPDFを含むボードのドキュメントをマイクロコントローラにすぐにダウンロードすることをお勧めします。



さらなる作業のために、ほとんどすべてのオシロスコープがあればいいのですが、それなしで始めることができます。



繰り返しになりますが、ボードの購入についての質問を予想して、私はaliexpressで購入しました。



また、STM32CubeMX自体(無料でダウンロード)、およびCプロジェクトとST-Linkサポートを操作するためのIDEも必要です。 それらの多くがあります、商用のものがあります、無料のものがあります、そして、私は意図的にどんな名前も与えません。 誰もが自分で選択します。



2. Hello World、またはLED制御



まず、STM32CubeMXをダウンロードしてインストールする必要があります。 st.comから無料でダウンロードできます。 STM32CubeMXはWindowsバージョンにのみ存在するとすぐに言います。 彼らはそれがワインの下でうまく働くと書いています、私は個人的にそれを試していません。



[ファイル] / [新しいプロジェクト]に移動し、目的のマイクロコントローラーを選択します。 このため、ウィンドウの上部でフィルターを使用すると便利です。







この例では、STM32F746NGHxです。



次に、クロックを設定します。 [ピン配置]タブで、外部クオーツを使用する作業を選択します。









[クロック構成]タブの[HCLK(MHz)]フィールドに216と入力します。応答として、「現在選択されているソースを使用して解決策が見つかりません。 他のソースを使用したいですか?「Answer」OKをクリックし、PLL Source MuxマルチプレクサーでHSEソースを選択します。 PLLM、PLLN、およびPLLPは、図に示すように設定されます。 HCLK = 216MHzであることを確認します。







次に、LEDを制御するGPIOを構成する必要があります。 これはポートPI1です。 [ピン配置]タブで、出力PI1を見つけてクリックし、GPIO_Outputに設定します。







さらに便利なように、ピンに名前を付けることができます。 これはオプションですが、コードを読みやすくするために行いましょう。 これを行うには、[システム]列の[構成]タブで、[GPIO]ボタンをクリックします。







[ピン構成]ウィンドウに移動し、[ユーザーラベル]フィールドに「Led」と書き込みます。







これで、コードを生成できます(プロジェクト/コードの生成)。 STM32CubeMXは、ソースコードだけでなく、多くの一般的なIDEのプロジェクトファイルも生成します。 コードにはフォームのコメントが含まれていることに注意してください。



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





独自のコードを記述できるのはそれらのみです。そうしないと、ソースコードを再生成するとコードが上書きされます。



したがって、main()でwhile(1)ループを見つけ、その中に以下を記述します。



 HAL_GPIO_TogglePin(Led_GPIO_Port, Led_Pin); //Toggle the state of pin HAL_Delay(500); //  
      
      





これでプロジェクトを開始できます。 ボードを接続し、ファームウェアをダウンロードします。 ボードのLEDは1 Hzの周波数で点滅するはずです。



ただし、上記のアプローチは理想的ではありません。 HAL_Delay関数の内部には空のループが含まれており、この時点でプログラムは他に役立つことはできません。 問題を解決するには、割り込みの使用とリアルタイムオペレーティングシステムの使用の2つの方法があります。 オペレーティングシステムについては別の機会に書きますが、ここで割り込みの処理方法を学習します。



3.タイマーと割り込み



TIM1などのタイマーを設定します。 これを行うには、[ピン配置]タブでこのタイマーのクロックソースを選択します。









クロックソースは、周辺機器の内部クロック周波数であり、この例では108 MHzです。 [Clock Configuration]タブでメインクロック周波数を分割することにより、この値を調整または変更できます。



[構成]タブに移動し、タイマーの頻度を構成します。 TIM1ボタンを押し、表示されるウィンドウの[パラメーター設定]タブで、プリスケーラーとカウンター周期の値を設定します。







除算係数は、目的の値から1減らす必要があることに注意してください。 実際、タイマー割り込みの頻度は次の式で見つけることができます。



更新イベント= TIM_CLK /((PSC + 1)*(ARR + 1)*(RCR + 1))


この場合、周波数は216e6 /((53999 + 1)*(1999 + 1))= 2Hzになります。 この場合、前の例のように、LEDの点滅周波数は1Hzになります。



割り込みコントローラータブ(NVIC設定)で、TIM1更新割り込みを有効にする必要があります。











これでSTM32CubeMXの作業が完了し、コードを生成できます。 ソースでは、最初にタイマー自体を開始し、次に割り込みハンドラーを挿入して、LEDを点滅させる必要があります。



 /* USER CODE BEGIN 0 */ void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) { if (htim->Instance==TIM1) //check if the interrupt comes from TIM1 { HAL_GPIO_TogglePin(Led_GPIO_Port, Led_Pin); //Toggle the state of pin } } /* USER CODE END 0 */ int main(void) { ... /* USER CODE BEGIN 2 */ //  HAL_TIM_Base_Start_IT(&htim1); /* USER CODE END 2 */ /* Infinite loop */ /* USER CODE BEGIN WHILE */ while (1) { /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ //  ,      . } /* USER CODE END 3 */ }
      
      





ファームウェアをコンパイルして入力します。 予想どおり、LEDは前の例とまったく同じように点滅します。 ただし、これは現在中断により発生しているため、プロセッサは他のタスクを自由に実行できます。



4.次は?



これが最初の部分を終えるところです。 次に計画されていることは何ですか? 次のパートでは、内蔵DACの操作について説明し、DMAのトピックに触れます。 小さな発表として:このような美しい正弦波を生成する方法を学習します。









(実際、この正弦波はあまり美しくありませんが、より良くなります)。



将来の計画では、USBコントローラー(VCPモードのスターター用、仮想COMポート)、イーサネットコントローラー、ADCを使用します。おそらく、FreeRTOSの使用に関するトピックに触れます。



PS



この記事で紹介した例は、Atollic TrueStudio IDEのNucleo F767ZIボード(STM32F767ZIマイクロコントローラー)にも実装されています。 ここからダウンロードできます: https : //github.com/arktur04/stm32-habr



All Articles