STM32入門(組み込み開発)
■第2話:STM32の基本操作-クロック、ピン設定-
(最終更新日:2025.01.04)
(絵が小さい場合はスマホを横に)
「基本的な使い方を学ぼう」
第2話では、STM32CubeMXを活用した基本的なプロジェクト作成方法を学ぶ。
まず、GUIを使ったピン設定やクロック設定の流れを解説し、STM32マイクロコントローラーの初期設定を理解する。
1.CubeMXを使ったプロジェクトの作成
STM32CubeMXは、STM32マイクロコントローラーの初期設定をGUIで簡単に行えるツールだ。
本項では、STM32CubeMXを使用して新しいプロジェクトを作成し、マイコンの基本設定を行う手順を詳しく解説する。
■STM32CubeMXの準備
STMicroelectronicsの公式サイトからダウンロードし、インストールできる。
既にSTM32CubeIDEをインストール済みの場合、CubeMXは統合されているため単独でのセットアップは不要だ。
必要なソフトは以上で、これに加えてターゲットデバイス用のドライバと評価ボードが必要になる。
■プロジェクトの開始
STM32CubeMXを起動し、[New Project]をクリックする。
MCUセレクタを使って、ターゲットマイコンを選択する。
または、Boardセレクタで評価ボードを選択する。自分が使用しているボードを選択すればよい。
■ピン設定
チップ図をクリックして使用するペリフェラル(UART, GPIO, ADCなど)を有効化する。
GPIOのPA5を出力モード(LED接続用)に設定する。
必要に応じて、ペリフェラルのピンをリマップする。
例えば、UARTのTXをPA9、RXをPA10に設定する。
■クロック設定
外部クロック(HSE)、または内部クロック(HSI)を選択する。
例えば、HSEを有効かし、PLL(位相同期回路)で72MHzに設定する。
全体のクロック設定を確認し、CPUやペリフェラルの動作周波数を調整する。
■その他の設定
GPIOのモード(入力、出力、アナログ)、プルアップ、プルダウン、速度を設定する。
ペリフェラルの詳細設定を行う。例えば、UARTのボーレート、データビット、ストップビット、パリティを設定する。
■プロジェクトの保存とコード生成
プロジェクト名と保存先を指定する。IDE(STM32CubeIDE、Keilなど)を選択する。
Generate Codeをクリックして、必要な初期コード(main.c)を生成する。
開発ボードとCubeMXがあれば開発できる
2.クロック設定やピン設定の流れ
STM32マイクロコントローラーを効率的に使用するには、クロック設定とピン設定が重要な役割を果たす。
これらの設定は、STM32CubeMXを使用することでGUIで簡単に行える。
このセクションでは、クロック設定とピン設定の手順を詳しく解説する。
■プロジェクト作成の概要
STM32CubeMXを使ったプロジェクト作成の基本手順は以下の通りになる。
プロジェクトを作成し、使用するマイコン、ボードを選択、必要なペリフェラルを有効化、
クロック設定とピン設定を行い、初期コードを自動生成する。
■ピン設定
ピン設定(GPIO設定)は、各ピンの役割(入力、出力、アナログ、ペリフェラル接続)を定義する。
ペリフェラルを有効化すると、自動的にピンが割り当てられる。
■ピン設定の手順
STM32CubeMXのチップ図をクリックして、使用するペリフェラルやピンを選択する。
(例: PA5をGPIO Output(LED制御用)として設定)
ピンのモード設定としては、入力にセンサーやスイッチからの信号を受信、出力にLEDやモーター制御を充てる。
ADC/DACとして使用し、UART、I2C、SPIなどのペリフェラル接続を設定する。
プルアップ抵抗とプルダウン抵抗を設定し、出力速度は高速通信が必要な場合はHighに設定する。
例えば、PA5をGPIO Outputとして設定(LED用)し、UARTペリフェラルを有効化し、PA9(TX)とPA10(RX)を自動で割り当てる。
■クロック構成
クロックはMCUの動作速度やペリフェラルの動作を制御する。
適切なクロック設定を行うことで、性能や消費電力を最適化できる。
また、クロックは主にシステムクロックとペリフェラルクロックで構成される。
MCU全体の主クロックがシステムクロックで、UART、SPI、ADCの周辺機能に供給されるクロックがペリフェラルクロックである。
また、外部クロック(HSE)、内部クロック(HSI)という構成の違いもある。
■クロック設定
STM32CubeMXでRCC設定タブに移行し、RCC設定を有効化する。
クロックソースとして、HSEを使うか、HSIを使うかを選択する。
システムクロックをPLLで増幅し、クロックツリーで、
SYSCLK、AHBクロック、APBクロックが意図した通りに設定されていることを確認する。
例を挙げれば、HSEをクロックソースに設定、PLLを使用して、SYSCLKを72MHzに設定、UARTのAPB2クロックを36MHzに設定する。
ピン(左)やクロック(右)の設定を行うことができる
■設定後のコード生成
設定後は、プロジェクト名と保存先を指定して、保存する。
コード生成は、開発環境(STM32CubeIDE、Keil、IARなど)を選択し、Generate Codeボタンを押して初期コードを生成する。
メインプログラム(main.c)、GPIO初期化コード(gpio.c)、HALライブラリの設定コード(stm32f1xx_hal_conf.h)が生成される。
■クロック設定とピン設定の具体例
クロック設定とピン設定の例として、LED点滅用のGPIO設定を挙げる。
クロックはHSIを使用し、SYSCLKを72MHzに設定する。
ピンはPA5をGPIO Outputとして設定する。
生成される初期化コードの一部は以下の通りになる。
生成される初期化コード
■注意点
STM32CubeMXのGUI下部に表示されるエラーメッセージを確認し、設定ミスを修正する。
クロック設定が不適切だと、ペリフェラルが正常に動作しないことがある。
複数のペリフェラルで同じピンを使用しないように注意する。
■まとめ
STM32CubeMXを使用することで、クロック設定やピン設定がGUIで直感的に行える。
適切なクロック設定は性能と消費電力のバランスを保ち、正確なピン設定はペリフェラルの正しい動作を保証する。
この章で学んだ内容を基に、GPIOやUARTなどの機能を組み合わせてプロジェクトを進めていこう。
3.GPIOの基本
GPIOは、STM32マイクロコントローラーのピンを汎用的な入出力ピンとして使用するための機能だ。
入力モードでは、センサーやスイッチの信号を読み取り、出力モードではLEDやモーターの制御信号を送る。
それ以外にも、アナログモードやオルタネートファンクションモードというものもある。
STM32では、ピンの初期化である、ピンのモード(出力/入力)や速度を設定し、
操作として、ピンをHIGH(1)、LOW(0)に設定をする。これらにより、LEDを点滅させたり、スイッチを読み取ることができる。
■STM32CubeMXでのGPIO設定
STM32CubeMXを起動し、新規プロジェクトを作成する。
使用するマイコンやボードを選択する。
次に出力モード、Speed、Pull-up/Pull-downを選択する。
必要に応じてクロックツリーでシステムクロックを設定し、プロジェクトを保存してコードを生成する。
■LEDの点滅
生成されたプロジェクト内のmain.cを開く。
初期化コードが自動生成されており、そのコードに必要なコードを追加する。
main.cのwhile(1)ループ内に以下のコードを追加する。
LEDを点滅させる
■関数の詳細
HAL_GPIO_TogglePin(GPIOx, GPIO_PIN_y)で指定したピンの出力状態をHIGH/LOW反転する。
HAL_Delay(ms)で、指定した時間(ミリ秒)だけ処理を停止する。
■必要なペリフェラル(周辺機能)の確認
各プロジェクトで必要なペリフェラルを確認し、それに対応したモデルを選択することが重要。
主なペリフェラルには以下のようなものがある。
また、MX_GPIO_Init関数はCubeMXで自動生成されている。
MX_GPIO_Init関数
■ビルドと書きこみ
プログラムを書きこむ際はNucleoボードや他のSTM32評価ボードを(ST-LINK経由で)PCに接続し、
STM32CubeIDEでプロジェクトをビルド、ボードをターゲットデバイスにして書きこみを行う。
ボード上のLEDが0.5秒ごとに点滅することが確認できれば成功だ。
■注意点
注意点としては、GPIOピンの最大電流以下で行うこと(必要に応じて抵抗を追加)、
CubeMXの設定を変更する際はプロジェクトファイルを保存すること、
コード生成後の編集は、main.cのユーザーコード部分(/* USER CODE BEGIN〜END)を変更、
CubeMXを再生成しても編集内容が上書きされないようにする。
4.まとめ
第2話では、STM32CubeMXを使用した基本操作の基礎を習得した。 クロック設定やピン設定を直感的に行い、簡単なプログラムを通じて、STM32の強力な機能を体験した。 これらの内容を理解することで、STM32での組み込み開発の土台が築けたと思う。 次章では、さらに高度な機能に挑戦する。
▼参考図書、サイト
STM32マイコン公式日本語サイト
STマイクロエレクトロニクス
「WindowsではじめるSTM32」 インプレスR&D 山本 小鉄