こんにちは、しゅうです。
今回はSTM32のピン配置をしていきます。
ピン配置の前に
今回採用しているマイコン、STM32F103RBはピン数が少なめなため、少々工夫をしながらピン配置をしていく必要があります。なので、まずは必要な機能をまとめます。
- モータ用のPWM出力
- エンコーダの読み取り
- 割り込み用のタイマ
- 光センサの値の読み取り
- UI周り
- バッテリー用のLED
- モード指定用のLED
- プログラム書き込み/実行モードの切り替えスイッチ
- 実行モードの選択用スイッチ
- 電源用トグルスイッチ
- ブザー
この他に、part14で設定した割り込み用のタイマーも設定しておきます。さらにSPI通信やI2C通信用のピンも開けておいた方が今後の開発の幅が広がりそうです。
設定
STM32CubeIDEを開いて、タイマーや入出力ピンなどの設定をして行きます。汎用入出力ピンはどこに設定しても特に問題ないので、先に通信やタイマーに関係するピンを設定しちゃいます。下の画像の丸で囲っている部分を先に設定します。
システムコア
最初に、SYSとRCCの設定をします。
SYSは、DebugのモードをSerial Wireに設定しておきます。右上のPA13とPA14が割り振られます。
RCCは、High Speed ClockとLow Speed Clockを共にCrystal/Ceramic Resonatorに設定しておきます。左上あたりの、PC14, PC15, PD0, PD1が割り振られます。
通信関係
次にマイコン⇆パソコン間や(今後使うかもしれない)マイコン⇆センサ間の通信規格の設定を行います。
はじめに、センサ状態の表示用にUART通信を使います。この時、Boot0ピンを切り替える必要があることを忘れないようにしましょう。実際の設定は回路設計やプログラム書き込み時にお話しします。
今回はUSART1を使います。ModeはAsynchronousにして、その下のオプションはDisableのままにしておきます。これで、PB6とPB7ピンが割り振られています。細かい設定は実際に使うときに確認します!
そこで、このまま実装を行なった場合は、プログラムの書き込みはST-Linkなどを用いたSWD通信を用いることになります。
UARTを使う場合は、TIMの設定から変更していく必要になります…
次にマイコン⇆センサ間のためにI2CとSPI通信を設定します。
I2Cは下の画像のように、I2C2をI2Cとして使います。PB10とPB11ピンが割り振られます。場合によってはPB12ピンも使うので開けておくことにします!現状は使用予定は特にありません…!
SPIは下の画像のように、SPI2をSPIとして使います。ModeはFull-Duplex MasterでHardwareはDisableのままにしておきます。PB13からPB15ピンまでがSPI通信用に割り振られています。また、SPI通信用にCS (Chip Select)用にPB12ピンをGPIO_Outputとして設定しておきます。
タイマ関係
次は各タイマの設定を行います。TIM1は左右のモータのPWM出力用として使うのでCH1とCH2は左、CH3とCH4は右モータ用とします。TIM1のチャンネルはそれぞれPWM Generationに設定します。Clock SourceはInternal Clockを使います。すると、PA8からPA11までが割り振られます。
TIM2とTIM3は左右のエンコーダを扱うために使います。それぞれ同じ設定が行われるので、TIM2を例として下の画像で示します。Combined ChannelsをEncoder Modeにするだけです。TIM2はPA0とPA1、TIM3はPA6とPA7に割り振られます。
TIM4は割り込み用に使います。ピン配置には影響しませんが忘れないうちに設定しておきます。
UIやセンサ用などのピン設定
残っているピンに、UIやセンサ用などのピン設定を行なっていきます。
LED
表示用LEDを4つとバッテリー用LEDを1つ使います。表示用はPC10からPC12とPD2に割り振り、バッテリー用はPB8に割り振ります。全てGPIO_Outputに設定しています。場合によっては、バッテリー用LEDを増やして残量を確認できるようにしたり、通信時の表示用LEDを追加するかもしれません。
スイッチ
押しボタンを実装するので、3つ分配置します。PC7からPC9をGPIO_Inputに設定します。
センサ
光を照射するために4つGPIO_Outputを、受光した値をAD変換するためのADCピンを4つ用意します。左側の発光用にPC0とPC1、右側用にPC4とPC5を割り振ります。ADCピンはAnalogメニューのADC1を選択して、IN8, IN9, IN12, IN13を選択します。IN8とIN9はPB0とPB1に割り振られて、IN12とIN13はPC2とPC3に割り振られます。
最終的な結果は下の画像を参照してください。
おまけ:ブザー
今回こっそりとPA4、PA5ピンをブザー用に割り振っています。IC回路を駆使してブザーを鳴らせたらいいなと思いました。
マイコンからデジタル出力を行い、IC回路で目的の波形を出力してみる試みです。こちらはどこかのタイミングでブレットボード上で一旦試してみる必要がありますね。
まとめ
以上でマイコン側のピン設定ができました。プログラムの出力は特にしなくていいですが、設定ファイルが消えないように保存することだけは忘れないようにしましょう〜
この情報を使って次回から回路設計を行ってまいります!