性能は高いのに最近あまり耳にしないSTM32F401CCU6(Black Pill)ですが、一年ほど前にお安く手に入れたのに使えてなかったです。またSSD1306も購入後眠っていたので、両方活用しようと考えました。しかし、ネット上の情報も少なく、STM32CubeIDEを使うのが主流のよう。まずはArduinoIDEで何とか動かしたいと色々模索してみたら、案外簡単なことだったのでご紹介します。
まず、ESP32などに押され気味なBlack Pillです。ご存じない方はこちらを参考に。
https://www.mischianti.org/2022/07/02/black-pill-stm32f4-pinout-specs-and-arduino-ide-configuration-4/
プログラム書込みモード(DFU)に入るのにも癖があります。個体差もあるかも知れませんが、私のは比較的簡単に入れます。[NRST]と[BOOT0]を同時押しののち少し様子を見て、[NRST]をほんの僅か早く離すと「STM32 BOOTLOADER」が現れます。この辺りは、デバイスマネージャーを開いておいて見ながら作業すると良いですね。
さて、上記サイトを参考にArduinoIDEでボードを使えるようにします。私の環境のArduinoIDE2.0.3のスクショでは見にくいので上記サイトの図をお借りしています。
「Adafruite_SSD1306」のLibraryを導入し、その後「File→Examples→Adafruite SSD1306→ssd1306_128x64_i2c」と進みます。いつもの作法通り、Verify、Uploadとすんなりいきますが、書き込み後に表示されません。ウーン、相変わらず私が良く解っていないだけ?
I2CアドレスはNANOで使ったときに「0x3C」とわかっていたのですが、念のため調べてみることにしました。「File→Examples→Wire→i2c_scannaer」と進み、このスケッチを書き込み動かしてみたところおかしい。i2cのアドレスが見つからないとのメッセージが出てきます。沈思黙考ののちWire.begin()の前に以下のように指定してみました。これで無事動くようになりました。めでたし、めでたし💦。Exampleそのものですし長いので、ソースは載せません。
Wire.setSDA(PB7);
Wire.setSCL(PB6);
Wire.begin();