STM32G031で9600bpsのソフトウェアシリアルのライブラリ化


x OB(オプションビット)は、(2)GPIO

目的
ソフトウェアシリアルのテスト
シリアルの出力先は、PA0
追加方法は、新規タブ

Arduino ファイル分割 で検索するといろいろ出てくる

引用

メインプログラム



//SER_LB_9600_031_1

#include <Arduino.h>

#include "SER_9600_031_1.h"

//初期化
void setup()
{

  //シリアルの初期化
  pc.beginNS(9600);

} //setup


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

  //データの表示
  pc.printNS("HELLO WORLD\r\n");
  
  delay(1000);

} //loop



SER_9600_031_1.hのプログラム




#ifndef TEST_H
#define TEST_H

//SER_9600_031_1.h


#define TX1      PA0  // 4pin
#define UART_DELAY 102   //  9600bps ok 031


#define DW   digitalWrite


//クラスの定義
struct _pc
{
  void beginNS(int sp);      //メソッドの宣言
  int  putcNS(char ch);      //メソッドの宣言
  int  printNS(char *str1);  //メソッドの宣言
};


//ポートをhiにする 初期化
//メソッドの定義
void _pc::beginNS(int sp)
{
  //ポートをhiにする初期化
  pinMode(TX1, OUTPUT);
  DW(TX1, HIGH);
}


//仮想シリアルへの一文字出力 9600bps
//メソッドの定義
int _pc::putcNS(char ch)
{
  DW(TX1, HIGH);

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

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

  DW(TX1, HIGH);//Stop
  delayMicroseconds(UART_DELAY); //StOP BIT WAIT

  return (0);
}


//文字列の表示
//メソッドの定義
int _pc::printNS(char *str1)
{
  //文字の中身がゼロか
  while (*str1) {

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

  } //while

  //戻り値
  return (0);
}


//実体の作成
_pc pc;


#endif