こんにちはショウです。前回発注した基板の確認をしたので、今回はLEDとスイッチの動作確認をしていきます。
動作確認
動作確認と同時に、プログラムを階層分けして、マイクロマウスの走行や探索部分を使い回せるように作成していきました。
前の機体まではそこまで考えてプログラムを作成する余裕がなかったので、マイコンを変えた際の移植性を改善する目的で行っています。
デバッガの設定
まず最初に書き込みにも使うデバッガの設定をしていきます。
Nucleoボードの時には最初から設定されていたので設定をしないで動かしていましたが、今回は設定していく必要がありました。
設定にはCubeMXの画面のSYSからDebugの欄でデバッグ方法を選択します。今回はSerial Wireを使って書き込みやデバッグを行います。Serial Wireはデバッガの中でも一番少ないピン数でデバッグを行う事のできる方法で、マイクロマウスのようにピン数に余裕がなくても使うことができます。
デバッガとしては使うことができますが、文字を出力する機能はないので、TeraTermなどに文字を表示するためには別にUARTを設定しておく必要があります。UARTは必要になったところで設定します。
電源確認
電源を接続して電源確認用のLEDが点灯するか確認して行きます。
LEDが点灯することで、レギュレータが動いていて、3.3Vが供給されていることが確認できます。
ただし、レギュレータの部分のはんだ付けが不十分な場合、3.3Vではなく低い電圧として出力されている場合があります。(2回目の基板で発生しました。)この場合、電源用LEDは点灯していて、マイコン自体に電源は投入されているので、動作自体はするのですが、AD変換などの基準値になる電圧が変わってしまうので、予想と違う値が返ってきます。
エンコーダ基板の部分に3.3VとGNDがあるので、パッドにテスターを当てて電圧がちゃんと出ているか確認しておきます。
赤色LEDが電源確認用LED
LED(GPIO)の確認
動作確認の手順としてはNucleoボードの時と同じでLEDから確認していきます。
まずはCubeIDEに含まれているCubeMXの機能でピン設定の確認をしていきます。
すでにPart17でピン配置をする際に設定をしていますが、配線中に配置変更をしている場合もあるのでここでもう一度確認しておきます。ピン設定を発注したKiCadのデータと比較して確認をします。
今回はPB2,PF1,PF0,PC15,PB6を使用しています。配置は配線の都合です。
ピンの確認ができたらクロックの設定をしていきます。
ここの設定も外部クロックを使わなかったのでそのままMAX値の170MHzにしておきます。
Clock Configurationの設定はPart7に書いてあります。
自動的に設定してくれるので楽ができます。
最初にLチカをすることで、マイコンに電源が投入され、少なくともちゃんと書き込みができ、一番単純な機能であるGPIOが動いていることが確認できます。
自作基板の場合そもそも回路が間違っていて、マイコンに電源が入らない、マイコンのリセットの設定を間違えてシングルチップモードにならないなどが起こります。
Lチカのプログラム自体はPart4の時と同じです。
しかし、今回はピンにLEDの番号で名前をつけているので、ピンの指定がLED0やLED1で指定しています。
また、動作確認が終了したら、インジケータ用のLEDを関数一つでまとめて点灯できるように関数を作っておくと使用時に楽になります。
void SetLED(uint8_t data){ if((data&0x01)==0x01){ LL_GPIO_SetOutputPin(LED0_GPIO_Port,LED0_Pin); }else{ LL_GPIO_ResetOutputPin(LED0_GPIO_Port,LED0_Pin); } if((data&0x02)==0x02){ LL_GPIO_SetOutputPin(LED1_GPIO_Port,LED1_Pin); }else{ LL_GPIO_ResetOutputPin(LED1_GPIO_Port,LED1_Pin); } if((data&0x04)==0x04){ LL_GPIO_SetOutputPin(LED2_GPIO_Port,LED2_Pin); }else{ LL_GPIO_ResetOutputPin(LED2_GPIO_Port,LED2_Pin); } if((data&0x08)==0x08){ LL_GPIO_SetOutputPin(LED3_GPIO_Port,LED3_Pin); }else{ LL_GPIO_ResetOutputPin(LED3_GPIO_Port,LED3_Pin); } if((data&0x10)==0x10){ LL_GPIO_SetOutputPin(LED4_GPIO_Port,LED4_Pin); }else{ LL_GPIO_ResetOutputPin(LED4_GPIO_Port,LED4_Pin); } }
スイッチの確認
次にモード選択ができるようにスイッチの設定をしていきます。
スイッチに使用しているピンはPA11,PA12です。
一般的にプッシュスイッチはプルアップ抵抗を設置して、スイッチを押すとGNDと導通し、マイコンのピンがLOWになるという形で使われることが多いです。
しかし、今回はUART書き込みの時につかうBOOT0と片方のスイッチを共用しています。BOOT0はマイコン起動時にHIGHが入力されているとUART書き込みモードになるため、普段はLOWになるようにプルダウンしておく必要があります。そのため、共用するにはプルアップではなくプルダウンで使う必要があります。
そのため、ピン設定で内部プルダウンの設定をしておきます。
ピンの設定をしたら、スイッチを使えるようにプログラムを作成していきます。
LLライブラリのLL_GPIO_IsInputPinSet関数がピンのHIGH、LOWを返してくれます。スイッチを押した時にHIGHになるので、関数から1が返ってくるとスイッチが押されている状態です。
スイッチ押された時にLEDが点灯するようにして確認すればOKです。
デバッガを使って変数の値を確認することもできます。
今回はここまでになります。