PCB を修正する
前回作成した PCB は、USB の D+/D- がひっくり返っていたのを修正する。それ以外に今回は、- ピンに5V 端子を追加(合わせてGNDも追加)
- シルクに各端子名を表示
- パーツ配置を色々微調整
基板も初の白色にしてみる。
LED を焦がす
配線とサーマルパターンはなるべく太めに、と思って作っているのもあり、こういう時に、パーツのハンダ付けを外すのがまだ自分には難しくて、結局、LED を1個壊してしまった。。。
そして、全部ハンダ付けし終わった後、DFU 経由のファームウェア書き込みは、前回のようなトラブルもなく、すんなり出来た。だけど、2つあるLチカ用 LED のうち1つが光らない!?ハンダ付けするときに、ハンダゴテで熱し過ぎていたようだ。。。こちらもハンダの取り外し途中で壊してしまった。。。
壊れた LED を外すときに、基板の表面も焦がしてしまった。下の写真で、レジストが少し剥がれている。"D2" シルクの周りのレジストもほんのり焼けている。とほほ。
まあでもこれで何とか動いたので、最後にピンヘッダをブレッドボードに刺した状態でハンダ付けして完了!
と思ったら、この最後の最後でも、残念なハンダ付けになってしまった。。。
![]() |
5V と GND を追加したので左右で 1 ピンずつ多い |
特徴
- 3.3V 250mA
- 電源 LED
- Lチカ用 LED x2
- I2C プルアップ付き(PF0, PF1)
- BOOT0 スイッチ付き(PB8 w/ プルダウン抵抗)
- リバーシブルに使えるよう、LEDと抵抗が表裏背中合わせ

J-Link のシリアル経由で printf 波形観察
まず、STM32CubeIDE でピンの設定を行う。I2C と KEYSW, LED1, LED2 のピンは、このブレークアウト回路ではこの位置で固定になる。SWD と USART はデバッグ用。
また、コード側では、
/* USER CODE BEGIN Includes */ #include <stdio .h> /* USER CODE END Includes */ /* USER CODE BEGIN 0 */ int __io_putchar( int ch ) { HAL_UART_Transmit( &huart1, (uint8_t*) &ch, 1, 0xffffffff ); return 0; } /* USER CODE END 0 */のように printf() で USART に出力されるように実装しておいて、ADC(DMA) の結果を printf() で出力する。
ただしここで、MX_DMA_Init() と MX_ADC_Init() は、以下のようにこの順序で呼ばれないと動かないらしい。今回は CubeMX の手順で何が違ったのか、main() 関数の先頭でこの2つの呼び出し順が逆になっていて、ADC が1サンプルしか取得されず、小1時間悩んでしまった。
- /* Initialize all configured peripherals */
- MX_GPIO_Init();
- MX_USART1_UART_Init();
- MX_DMA_Init();
- MX_ADC_Init();
- MX_I2C1_Init();
あとは、Nucleo ST-Link の J-Link 化を行い、SWCLK, SWDIO, NRST, GND をつなぎ、USART1 の TX, RX もつなぐ。I2C に SSD1306 液晶ディスプレイもつなぐ。そうしてできた、最終的なブレッドボード。
そして、printf で ADC の値を出力して、ArduinoIDE の シリアルプロッタを開くと、こんな感じに波形が出た。めでたし!
感想
今回も失敗だらけだったけど、でも、LQFPのハンダ付けは2回目で、前回よりは上手く出来た?と思う。あと、今回は初めて白い基板で注文してみたけど、基板の配線をシゲシゲと眺めるのが好きなタチとしては、配線があまり見えなくて少しさみしかった。黒もあまり見えなかったんだよな。もごもご。。。
とはいえ、とりあえずブレークアウト基板は完成!?
0 件のコメント:
コメントを投稿