STM32G031J6M6(STM32 MCU based boards 2.2.0)でI2C(0x40(8ビット0x80))に「A」を連続出力する。


x 動作確認済み2022/5/21 14:42

目的
プログラムは、出来ている。
ほぼ、1日いろいろ試すに使ったので説明。
「はじめて見るおともだちに説明しなくてはならない」

まずArduino STM32


![o_con466.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/9befa523-0364-55aa-18e1-2762a1fd2b46.jpeg)


設定に囲みをぶちこむ


![o_con467.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/9e1ba96e-86fa-ad04-8346-4972164f17d9.jpeg)



![o_con468.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/0acace9e-3f15-9cd6-da39-fd01e3358d81.jpeg)



```

https://github.com/stm32duino/BoardManagerFiles/raw/main/package_stmicroelectronics_index.json


```



![o_con469.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/ab6b0e92-ede2-6ba7-d28f-c22ee3505c37.jpeg)



![o_con470.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/87485707-14c6-7fe9-ad06-64619c95998a.jpeg)


ここで一旦、コーヒーブレーク
x この設定で書き込むと二度と書き込めなくなる場合があります。

まず、前提してSTM32G032J6M6のピンとポート名とI2Cの関係


```

8 PB6 I2C1_SCL
1 PB8 I2C1_SCL
1 PB7 I2C1_SDA
1 PB9 I2C1_SDA
--------------
6 PA12[PA10] I2C2_SDA
5 PA11[PA9] I2C2_SCL


```


ここで初期化するとswdを潰す


```

Wire.begin();


```


イメージです。

![o_con471.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/2101de82-5530-7192-d0f3-d0fd04b49669.jpeg)


イメージです。


![o_con472.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/43f360a5-4966-1992-93f9-57b4bccc418a.jpeg)


1ピンと8ピンが有効


```

8 PB6 I2C1_SCL
1 PB7 I2C1_SDA

```

8ピンが有効になると書き込めなくなるので
リセットの確認とリセットオンリー化して
どんな時もリセットが効くようにする

買って来た状態


![o_con473.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/5f3d06f3-53fd-eb43-87d8-0096cd075b21.jpeg)


どんな時もリセットを効かせたいのでリセットオンリーにする


![o_con474.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/85d6edf7-6f61-ab80-5e7c-7eb836a44a51.jpeg)


ここで書き込みのリセットを接続すると
リセットが効いて8ピンが潰れた場合でも書き換えが出来るようになる

連続書き換え出来る場合もあるが失敗する場合もあるので
焦らず、書き込み器とマイコンの電源を落として再接続する

ここで書き込む


![o_con475.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/7551e333-5f5e-6cf5-b523-1d990d42a09a.jpeg)



![o_con476.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/a49a72ee-593b-80a9-2c09-f93c8925f32e.jpeg)








![o_con477.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/ed610c61-aa41-9854-4313-17a1dd9c0b26.jpeg)


STM32G031J6M6の基板化


https://qiita.com/caa45040/items/9990aeb87a04d65fbcec




I2Cスレーブ　I2C-USART-USB



https://qiita.com/caa45040/items/5032e6905c9425f41495





```c++



//I2C_A_031_1

#include <Arduino.h>
#include <Wire.h>

//STM32G031J6M6 i2cピンの定義
#define sdaPin PA12    // ArduinoA4
#define sclPin PA11    // ArduinoA5

//#define en     PB7     // 1pin

#define ADDR1  0x40

//初期化
void setup() {

  delay(3000); //not Delete

//  //GPIOの初期化
//  pinMode(en, OUTPUT);

  //i2cの初期化
  //Wire.begin(sdaPin, sclPin); //STM32G031J6M6
  Wire.begin();

}//setup

//メインループ
void loop() {

//  digitalWrite(en, 1); //LED ON debug

  //I2Cに送信
  Wire.beginTransmission(ADDR1);
  Wire.write('A');
  Wire.endTransmission();

  delay(500);//0.5秒待つ


//  digitalWrite(en, 0); //LED OFF debug
  delay(500);//0.5秒待つ

}//loop



```