前回の続きです。
STM32CubeMXを使って、回路図に従いマイコンのGPIO・ペリフェラルの設定を行っていきます。
Contents
MCUの選択
New project -> MCU Selector -> STM32L051K8を選択
GPIO_Input, GPIO_Outputの設定
表示されたマイコンの図から単なる入出力ピンとして初期化したいピンの部分をクリックし、設定に応じてGPIO_Input又はGPIO_Outputを選択します。
今回の例では
- PB0( SAKURA_WAKE_IN ) … GPIO_Output
通信モジュールのスリープ状態を制御します。
High:通常モード Low:スリープモード - PB1( SAKURA_WAKE_OUT ) … GPIO_Input
通信モジュールのスリープ状態を取得します。
High:動作中 Low:スリープ中 - PA1( GPS_ENABLE ) … GPIO_Output
GPSの電源を制御します。
High: 電源入 Low:電源切
となります。
また、各ピンのユーザーラベルの設定は、
ピンを右クリック -> Enter User Label
からできます。
EXTIの設定
External Interrupt(EXTI)では、GPIOのピン変化を割り込みとして受信することができます。
- PB5( REED_SWITCH) … GPIO_EXTI5
リードスイッチが反応した瞬間を割り込みとして取得します。
基本プルアップされているので、立ち下がりエッジを割り込みのトリガとします。 - PB6( V_USB ) … GPIO_EXTI6, Pull-down
MicroUSB充電開始を割り込みとして取得します。
内部プルアップし、USBが刺されて5Vとなる瞬間、つまり立ち上がりエッジを割り込みのトリガとして設定します。
設定方法
- Pinoutタブのマイコンの図から、設定したいピンをクリックしてGPIO_EXTIxを選択します。
- ConfigurationタブのGPIOをクリックします。
- 設定したいピンを選択し、下のGPIO modeから目的のエッジを選択します。
I2Cの設定
通信モジュール、及び気圧センサとの通信に使用します。
- PeripheralsのI2C1をI2Cに設定します。
すると、PB7, PB8がそれぞれI2C1_SDA, I2C1_SCLに設定されます。
- ConfigurationタブからI2C1を選択します。
- 通信モジュールの都合上、クロックは100kHzを設定します。
- NVIC Settingsタブから割り込みの有効化を行います。
UARTの設定
UARTはGNSSモジュール(GMS-G9)のデータを受信するために使用します。
- PeripheralsのUSART1のModeをAsynchronousに設定します。
すると、PA9, PA10がそれぞれUSART1_TX, USART1_RXに設定されます。
- ConfigurationタブからUSART1を選択します。
- GPSに合わせて設定を以下のように変更します。
・Baud Rate: 9600
・Word Length: 8 Bits
・Parity: None
・Stop Bits: 1
今回は割り込みの制御、ISRのの定義は自身でで行うため、NVIC Settingsはいじりません。
RTCの設定
32.768kHzの水晶振動子(LSE: Low Speed External Clock)を用いて正確な時間を計測するために用います。
今回のサイコンでは毎秒割り込みを発生させることで、タイヤの回転速度を計算できるようにします。
クロックの設定
- RTC Source MuxでLSEを選択し、LSEを用いてRTCを動作させるようにします。
- System Clock MuxでPLLCLKを選択し、16MHzのHSI(マイコン内部にあるクロック)から32MHzで動作させます。
コードの生成
- Project -> Settingsを選択し、Toolchain /IDEをSW4STM32に設定します。
(SW4STM32は次回以降開発に使用します)
- Project -> Generate Codeを選択し、コードの生成を行います。
次回はファームウェア開発にとりかかります。
ロボットと電子工作とプログラミング!
女の子は甘いもので出来てる?