STM32G031とI2Cを使い0x40(8ビット表記0x80)にソフトウェアシリアル入力を出力する。(Arduino)


目的
I2Cのテスト
I2C->USART9600bps->USBのテスト

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

主にLED表示装置等にデータを送信する
マスターモードで送信
シリアルからは、受信




//ser_out_i2c_test_031_1

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

#define ADDR1  0x40

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

#define RX1      PA0   // 1pin

//#define in7 1 //uno
#define in7      PB7  // 1pin
//#define in7      PA9  // 1pin
//#define RX1      PA10 // 1pin
//#define TX1      PA0  // 1pin

#define DW   digitalWrite

//#define UART_DELAY 832 //  1200bps ok 031
#define UART_DELAY 102   //  9600bps ok 031


int pc_getc()
{

  int a,b,c,d,e,f,g,h;
  int bs;

  //待ちループ
  while( digitalRead(RX1) == 1 ) {}

    delayMicroseconds(156-3);
    a=(digitalRead(RX1));

    delayMicroseconds(104-3);
    b=(digitalRead(RX1));

    delayMicroseconds(104-4);
    c=(digitalRead(RX1));

    delayMicroseconds(104-4);
    d=(digitalRead(RX1));

    delayMicroseconds(104-3);
    e=(digitalRead(RX1));

    delayMicroseconds(104-3);
    f=(digitalRead(RX1));

    delayMicroseconds(104-4);
    g=(digitalRead(RX1));

    delayMicroseconds(104-4);

    h=(digitalRead(RX1));
    delayMicroseconds(156-3);

    bs=h*128+g*64+f*32+e*16+d*8+c*4+b*2+a;

    return(bs);
}//pc_getc


//I2Cへの一文字出力
int pc_putc(char ch) {

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

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

  //戻り値
  return (0);

}//pc_putc

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

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

        //一文字出力
        pc_putc(*str1 ++);

    } //while

    //戻り値
    return(0);
}//pc_printf



//初期化
void setup()
{
  delay(3000);

  //ポートをhiにする 初期化
  pinMode(RX1,INPUT_PULLUP);

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

  //LEDの初期化
  pinMode(in7, OUTPUT);
  DW(in7, HIGH);

  pc_printf("STRT\r\n"); //debug

} //setup

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

  char ch = pc_getc();

  DW(in7, HIGH );

  char str2[2]={ ch ,0};
  pc_printf("-----ch=[");
  pc_printf(  str2  );
  pc_printf("\r\n");

  DW(in7, LOW );

  //1秒の待ち
  //delay(1000);

} //loop