意外と情報を探すのに手間取ったのでメモ
main.cpp
#include <Arduino.h>
#include <Wire.h>
#include <U8x8lib.h>
// - (add) PB8(SCL)/PB9(SDA) - SSD1306 128*32
U8X8_SSD1306_128X32_UNIVISION_HW_I2C u8x8(U8X8_PIN_NONE);
void setup(void)
{
Wire.setSCL(PB8);
Wire.setSDA(PB9);
u8x8.begin();
}
void loop(void)
{
u8x8.setCursor(0, 0);
u8x8.setFont(u8x8_font_8x13B_1x2_f);
u8x8.println("Boot F103C6");
u8x8.clear();
}
platformio.ini
[env:genericSTM32F103C6]
platform = ststm32
board = genericSTM32F103C6
framework = arduino
lib_deps = olikraus/U8g2@^2.35.5
upload_protocol = stlink
安く手に入ったボード,せっかくなので 128x32 の表示機を添えて,ガシガシはんだ付けで配線して使えるように作成中でした。
STM32 + ArduinoでI2Cのピンアサインを変える
genericSTM32F103C6 ですと SCL が PB6 SDA が PB7 が前提です。PB8 と PB9 に配線したので,main.cpp
でピン定義を変更しました。
main.cpp(抜粋)
Wire.setSCL(PB8);
Wire.setSDA(PB9); // これを実行した後に u8x8 を初期化
u8x8.begin();
u8x8定義
ピン定義を変更した上で,STM32ではI2C1に接続しましたので,
main.cpp(抜粋)
U8X8_SSD1306_128X32_UNIVISION_HW_I2C u8x8(U8X8_PIN_NONE);
で普通に使えました。