[電子工作]TrueSTUDIO(STM32の開発環境)の使い方ーーーー目次ーーーー ーーーーーーーーーー 1.STM32の性能を発揮するには?上記の通り、Arduino IDEのSTM32開発環境で開発可能ですが、STM32の性能が発揮できません。 全ての機能を使うためには、専用のコンパイラが必要です。
2.Atollic TrueSTUDIOを使ってみようSTM32のソフト開発環境として、mbedやTrueSTUDIOがあります。mbedはArduino IDEに近い 感じで開発が行えそうですが、私はTrueSTUDIOを使ってみました。 Atollic TrueSTUDIOは現在、STMicroが買収したためSTM32の標準Cコンパイラと言えると思います。 STM32を搭載したボードであれば何でも使え、ハードを生かしたソフトが開発できるはず(!)です。 特徴は次の通り。 ・IDEはEclipseベース。 ・ST-Linkでデバッガを使うことができる。
3.プロジェクトの作り方様々な方法がありますが、各端子の機能を設定したり、SPIやI2C等のハードウェア設定を 簡単に行いたい場合、STM32CubeMXを使うのが良いと思います。手順は次の通り。 (1)右上のMXと書かれたアイコン「STM32CubeMX」を押す。
(2)STM32CubeMX画面で、NewProjectのACCESS TO BOARD SELECTORを押す。 (3)New Project from a Board画面で、ボード又はMCUを選択し、StartProjectを押す。
(4)Board Project Options画面で、「はい」を選ぶ。
(5)Pinout & Confgurationで、使用する端子を左クリックし、端子の機能を選択する。 その後、各種ハードウェアの設定を行う。 systemCore : DMAやGPIOなど Analog : ADCやCOMPなど Connectivity : I2CやSPIなど
(6)ProjectManagerで、プロジェクト名、保存するフォルダーを設定し、Toolchain/IDEはTrueSTUDIO を選ぶ。
(7)GENETATE CODEを押し、CodeGenerationはどれを選んでもOKです。なお、Pinoutやハードの設定 を変更したら、毎回、GENERATE CODEを押す必要があります。
(8)右上のCと書かれたアイコン「C/C++」を押す。
(9)STM32 workspace画面の、プロジェクト・エクスプローラーから作成したプロジェクトを選び、 Srcの下を見ると、設定したピンアサイン、ハード設定のひな型が書かれた「main.c」ができています。
(10)「main.c」を書き換えます。ここで注意点があります。 まず、コードの中のコメントは絶対に消さないで下さい。 また、必ず、「USER ??? BEGIN」と「USER ??? END」のコメントの間に自分のコードを書いて下さい。 (5)〜(7)のSTM32CubeMXで、ピン設定や、各種回路の設定を変更した時、ユーザーコードを 保存するためで、これ以外の場所に書かれたコードは消えてしまいます! その後、トンカチのアイコン「Build」を押すとコンパイルされます。 エラーが発生したファイルには赤×がつき、その行は赤くなっているので、修正して下さい。
(11)虫のアイコン「debug」を押すと、プログラムがボードに転送され、デバッガが起動します。再開(F8) を押すと、転送したソフトが実行されます。 終了(Ctrl+F2)を押すと終了し、C/C++画面に戻ります。
(12)以降、(10)と(11)を繰り返し、
4.基本的なコマンド下記に、よく使うコマンドを記載します。 詳しくは、STMicroが公開しているマニュアルをご覧ください。 ・GPIO : デジタルの入出力 GPIO_PinState HAL_GPIO_ReadPin (GPIO_TypeDef * GPIOx, uint16_t GPIO_Pin) :GPIOの値を読み出す void HAL_GPIO_WritePin (GPIO_TypeDef * GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState) :GPIOに値を設定 void HAL_GPIO_TogglePin (GPIO_TypeDef * GPIOx, uint16_t GPIO_Pin) :GPIOの値を反転する
・PWM : パルス出力 ちょっと困ったが、TimerのLPTIMを使うとPWM出力が可能なようです。でも、パルス数を 前もって設定できないようで、自分でカウントする必要がありそうです。 HAL_StatusTypeDef HAL_LPTIM_PWM_Start (LPTIM_HandleTypeDef * hlptim, uint32_t Period, uint32_t Pulse) :PWM出力開始 HAL_StatusTypeDef HAL_LPTIM_PWM_Stop (LPTIM_HandleTypeDef * hlptim) :PWM出力停止 HAL_StatusTypeDef HAL_LPTIM_OnePulse_Start (LPTIM_HandleTypeDef * hlptim, uint32_t Period, uint32_t Pulse) :1ショットパルスの出力開始 HAL_StatusTypeDef HAL_LPTIM_OnePulse_Stop (LPTIM_HandleTypeDef * hlptim) :1ショットパルスの出力停止
・ADC : アナログ入力 正しい使い方は分からないが、現状、HAL_ADC_Start()、HAL_ADC_GetValue()、HAL_ADC_Stop() を繰り返さないと、変換できない。 HAL_StatusTypeDef HAL_ADC_Start (ADC_HandleTypeDef * hadc) :A/D変換開始 uint32_t HAL_ADC_GetValue (ADC_HandleTypeDef * hadc) :A/D変換した値の読み出し(bit精度はSTM32CubeMX等で設定) HAL_StatusTypeDef HAL_ADC_Stop (ADC_HandleTypeDef * hadc) :A/D変換終了
・SPI : クロック同期の高速シリアルインタフェース(一般に、数Mbps〜100Mbpsで使われる) HAL_StatusTypeDef HAL_SPI_Transmit (SPI_HandleTypeDef * hspi, uint8_t * pData, uint16_t Size, uint32_t Timeout) :SPIの送信(CSなどは、GPIOの出力として制御すること) HAL_StatusTypeDef HAL_SPI_Receive (SPI_HandleTypeDef * hspi, uint8_t * pData, uint16_t Size, uint32_t Timeout) :SPIの受信(CSなどは、GPIOの出力として制御すること)
・I2C : I2C又はSMBusなどと呼ばれている2線シリアルバス (100kbpsのスタンダードモードと400kbpsのファーストモードが一般的) HAL_StatusTypeDef HAL_I2C_Master_Transmit (I2C_HandleTypeDef * hi2c, uint16_t DevAddress, uint8_t * pData, uint16_t Size, uint32_t Timeout) :I2Cのマスタとして送信 HAL_StatusTypeDef HAL_I2C_Master_Receive (I2C_HandleTypeDef * hi2c, uint16_t DevAddress, uint8_t * pData, uint16_t Size, uint32_t Timeout) :I2Cのマスタとして受信 HAL_StatusTypeDef HAL_I2C_Slave_Transmit (I2C_HandleTypeDef * hi2c, uint8_t * pData, uint16_t Size, uint32_t Timeout) :I2Cのスレーブとして送信 HAL_StatusTypeDef HAL_I2C_Slave_Receive (I2C_HandleTypeDef * hi2c, uint8_t * pData, uint16_t Size, uint32_t Timeout) :I2Cのスレーブとして受信
・ウェイト/遅延 : タイマー待ち void HAL_Delay (__IO uint32_t Delay) :Delay(ms)待つ
Arduinoの紹介はこちら。
Arduino IDEで液晶パネル、タッチパネル、SDカードを使う方法は、こちら。
ESP32の詳細はこちら。 |