STM32G031とVSCode+STM32CubeでI2Cスレーブの受信文字をシリアル出力(受信)(STM32-I2C-USART)(CH340N)



x 過去ログを見よ->

x I2C-UASRT コンバータ (STM32-I2C-USART)

x STM32G031J6M6 VSCode PlatformIO CubeIDE I2C

x CubeMXは、stm32g031f6px
x VSCodeは、nucleo-g031
x プルアップ抵抗は、忘れずに

x ちょつとやる気が出てきたのでバイナリを何とかする予定　おわつた

目的
I2Cスレーブのテスト
I2Cは、PA11とPA12
シリアルは、9600bpsでPA2(4ピン)から出力


-273-


![o_con273.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/82a1c5ea-e8f7-8f48-32a7-b10b9edde757.jpeg)


-509-


![o_con509.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/ee254475-ba45-f322-ec9b-443c89ebda86.jpeg)



-o_con173


![o_con173.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/44f18749-6341-392b-28fe-a3cccff445eb.jpeg)


-o_con160


![o_con160.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/555e2c59-9de7-e2ae-85cb-737f2e1106b5.jpeg)



![o_con174.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/a9e5e91c-e565-bcfc-78e8-baed1c9d6649.jpeg)


![o_con175.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/6c752778-ec28-e7ce-dd1f-1bb9b8085f5a.jpeg)




参考



https://gsmcustomeffects.hatenablog.com/entry/2017/04/03/023111





I2C_SLAVE_TEST2_031_2のファイルを適当にコピー
I2C_SLAVE_TEST2_031_2_BINに実行用バイナリーがある



https://os.mbed.com/users/caa45040/code/f303_h_p1/


いろいろ
新規プログラムは、実質3行でほぼ設定ゲーである。
設定してボタンを押してようすを見るゲームの様だ。




![o_con153.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/0b090b63-d754-b419-167b-353ebd671975.jpeg)




![o_con154.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/1b9820a9-9312-764d-2457-c7dcd46986a7.jpeg)




![o_con155.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/f2c9bbc7-ebdf-5aef-3c10-7aa61b53f38e.jpeg)



![o_con156.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/e4a6a62d-34a3-588e-8994-77fe01dd8bc9.jpeg)



![o_con157.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/defb71c1-a94d-dabf-5589-efae196762c7.jpeg)



![o_con158.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/91e3a005-a1aa-417f-708c-d2574264d82b.jpeg)


-その3 215


![o_con215.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/4a3ef2e2-f09e-8054-b346-eec40c1ed33f.jpeg)

-その4 o_con217

![o_con217.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/9c60cb3c-7c74-922b-4a6a-0866ac47821f.jpeg)


-218


![o_con218.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/45cda46f-16aa-bab4-7c35-a512c504b1de.jpeg)



-212

![o_con212.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/8a2456b5-6992-1de7-3ce4-0770d564ef5b.jpeg)


-262


![o_con262.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/3c513492-016a-31ec-5891-7a01e5d1668e.jpeg)


-265-



![o_con265.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/6a3d692f-f64c-76f1-c862-f181318bfacb.jpeg)

書き換え
5V - SWCLK
SDA-T
SCL-R


![o_con269.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/2076f165-c4d2-987b-7144-f47a4764f3e0.jpeg)



-266-


![o_con266.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/2622f5f9-315e-c134-9b0d-66a5716d95bc.jpeg)



-213

![o_con213.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/7238c86d-4b0e-d7c2-3c81-a39654645cb0.jpeg)


-214


![o_con214.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/d11c1899-7b8e-85c4-e125-905332ceefe8.jpeg)


-237


![o_con237.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/25d39182-4333-cb4b-c0ad-d497fd32274d.jpeg)


-283


![o_con283.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/f29611d0-071b-039d-86b5-f0386915b734.jpeg)



main内のwhile内



```c++




        //I2Cのアドレスの設定も忘れずに「hi2c2.Init.OwnAddress1 = 0x80;」

        uint8_t aRxBuffer[10] = {0};

        while (HAL_I2C_Slave_Receive(&hi2c2,aRxBuffer, 1, 1000) != HAL_OK) {};

        //LED ON debug
        HAL_GPIO_WritePin(GPIOB, GPIO_PIN_7, GPIO_PIN_SET);
        //HAL_Delay(500); //debug


        //I2Cスレーブの受信データの表示
        HAL_UART_Transmit(&huart2,aRxBuffer, 1, 10);

        //I2Cスレーブの受信データの表示
        //HAL_UART_Transmit(&huart2, (uint8_t *)"\tRead A: ", 9, 10);
        //uint8_t n1  = '0' + (aRxBuffer[0] % 16);
        //uint8_t n10 = '0' + (aRxBuffer[0] / 16);
        //HAL_UART_Transmit(&huart2, &n10, 1, 10);
        //HAL_UART_Transmit(&huart2, &n1, 1, 10);
        //HAL_UART_Transmit(&huart2, (uint8_t *)"\r\n", 2, 10);

        //LED OFF debug
        HAL_GPIO_WritePin(GPIOB, GPIO_PIN_7, GPIO_PIN_RESET);
        //HAL_Delay(500); //debug




```


I2C内(忘れずに)



```c++



  hi2c2.Init.OwnAddress1 = 0x80;



```




![o_con176.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/602fe246-9c48-f940-abac-e458e4550554.jpeg)


STM32G31J6M6用　Aを連続出力


![o_con177.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/61630579-8b2d-8638-c9e1-c67822116b1d.jpeg)


```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

}//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




```


STM32G031J6M6 HELLO.. 表示


![o_con178.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/584eb7ff-fe95-16bb-756c-0cfffabcd021.jpeg)



```c++


//I2C_HELLO_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

//文字列の表示 nana_seg
int ns_printf(char *str1)
{

  //文字の中身がゼロか
  while (*str1) {

    //I2Cに送信
    Wire.beginTransmission(ADDR1);
    Wire.write( *str1 ++  );
    Wire.endTransmission();

    delay(1);//連続送信防止の為に1ms待つ

  } //while

  //戻り値
  return (0);

}//ns_printf


//初期化
void setup() {

  delay(3000); //not Delete

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

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

}//setup


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

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

  //I2Cに文字列を出力
  ns_printf("hello world\r\n");

  delay(500);//0.5秒待つ


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

}//loop




```



資料


HALライブラリによるSTM32マイコンのUART機能使用方法


https://qiita.com/Kosuke_Matsui/items/5e95c8e77f39f78e834e


おまけ

普通のシリアルとして使うプログラム


```c++



int ledPin = PB7; // LEDをPB7番ピンに
int inPin  = PA0; // デジタルピンPA0に入力
int val = 0;     // 読み取った値を保持する変数

void setup() {
  pinMode(ledPin, OUTPUT);   // LED用に出力に設定
  pinMode(inPin, INPUT);     // スイッチ用に入力に設定
}

void loop() {
  val = digitalRead(inPin);                    // 入力ピンを読む
  digitalWrite(ledPin, (val==LOW)? HIGH: LOW); // LEDのピンを読み取った値に変更(反転)
}





```