0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

STM32G031でソフトウェアシリアル入力をして「0」「1」の状態でLEDを光らす。(Arduino)

Last updated at Posted at 2022-03-24

目的
GPIOとソフトウェアシリアルのテスト
速度は、9600bps

o_con284.jpg



//ser_read_test_031_1


//#define in7 1 //uno
#define in7      PB7  // 1pin
//#define in7      PA9  // 1pin
#define RX1      PA10 // 1pin
#define TX1      PA9  // 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;
//  int zt,it;

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

//    zt = micros();

    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);

//    it = micros();


//debug
//String thisString9;
//pc_printf("1041 it=");
//  thisString9 = String(  1041 - (it-zt)   );
//  pc_printf( (char *)thisString9.c_str() );
//pc_printf("\r\n");

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

    return(bs);
}//pc_getc




//仮想シリアルへの一文字出力 9600bps
int pc_putc(char ch) {

  DW(TX1, HIGH);

  DW(TX1, LOW);//START
  delayMicroseconds(UART_DELAY);

  for(int ii=0;ii<8;ii++){
    DW(TX1, (ch>>ii)&1  );
    delayMicroseconds(UART_DELAY);
  }//for

  DW(TX1, HIGH);//Stop
  delayMicroseconds(UART_DELAY);
 
  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(TX1, OUTPUT);
  DW(TX1, HIGH);
  pinMode(RX1,INPUT_PULLUP);

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

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

} //setup


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


  char ch = pc_getc();

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

  DW(in7, (ch & 1) );

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

} //loop





出力がPA0のバージョン




//ser_read_test_031_1


//#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;
//  int zt,it;

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

//    zt = micros();

    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);

//    it = micros();


//debug
//String thisString9;
//pc_printf("1041 it=");
//  thisString9 = String(  1041 - (it-zt)   );
//  pc_printf( (char *)thisString9.c_str() );
//pc_printf("\r\n");

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

    return(bs);
}//pc_getc




//仮想シリアルへの一文字出力 9600bps
int pc_putc(char ch) {

  DW(TX1, HIGH);

  DW(TX1, LOW);//START
  delayMicroseconds(UART_DELAY);

  for(int ii=0;ii<8;ii++){
    DW(TX1, (ch>>ii)&1  );
    delayMicroseconds(UART_DELAY);
  }//for

  DW(TX1, HIGH);//Stop
  delayMicroseconds(UART_DELAY);
 
  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(TX1, OUTPUT);
  DW(TX1, HIGH);
  pinMode(RX1,INPUT_PULLUP);

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

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

} //setup


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


  char ch = pc_getc();

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

  DW(in7, (ch & 1) );

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

} //loop






0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?