STM32G031のArduinoでのUSARTシリアル通信(STM32G031J6M6)


シリアルUSBには、次の物を使用した。

FT234X 超小型USBシリアル変換モジュール
[AE-FT234X]
通販コード M-08461
発売日 2014/10/07
メーカーカテゴリ 株式会社秋月電子通商

ST-LINKは、ぞくに言う中華ST-LINKを使用した

STM8/STM32ライタ [STLINKV2]
販売価格: 500円(税別)
参考在庫数 18点
数量:
●概要
●仕様・機能
ST-LINK V2互換ライタ、自動アップグレードサポート,STM32全シリーズSWD/STM8全シリーズSWIM対応、3.3V/5Vサポート、IDC 5Px2コネクタ、USBタイプAコネクタ、本体のみ、表記価格:1

1.TXとRXを接続
2.電源の接続
3.下記のソースコードを書き込む
4.コンパイル実行で表示されたら終了
5.おわり

そのた
3秒のウエートは、消さないこと、STM32G031がむだになるかも
リセットが有効でないとき(ソフトウェアリセット)は、3秒以内に
ST-LINKを接続する。(delay(3000);の事)

中華ST-LINKのリセットを有効にしたい場合は、次のリンク参考
https://denshikousakusenka.jimdofree.com/%E9%96%8B%E7%99%BA%E7%92%B0%E5%A2%83%E6%A7%8B%E7%AF%89/stm32/st-link-v2-clone%E3%81%ABreset/

自分は、PB0リセット改造済み

STM32G031J6M6のオプションビットを設定しておく。
リセットが有効、シリアルブートが有効

xリセットオンリー(1)をテスト前に必ず確認しておく事、忘れると
書き込み出来なくなる。たまたま、シリアルブートオプションの設定が
生きていたので復活できた。
x>>現実的には、リセットの改造をしておかないとだめかも。<< 古い
3秒ウェートの位置が間違っていた、これで3秒ルールが使える 2/15
x場合によっては、ST-LINKから上手く書き込めなくなるので上級者用

中華ST-LINKのリセット改造済みかどうかでコンパイル以降の手順が異なる。

あなたは、リセット改造なしの場合
1.シリアル通信は、繋がず、コンパイル実行する。
2.ST-LINKを外しシリアル通信と3.3V電源(3.3VorGND)を接続する。
(本体マイコン、シリアル通信の電源の順に繋ぐ)
3.テストし終わったら、シリアル通信を外す。
5.ST-LINKを繋ぎ、3秒以内にST-LINKソフトで接続する
6.チップイレースをするといつも通り使える用になる。
7.おわり

あなたは、リセット改造済みの場合
xリセット端子は、接続しておく。ST-LINK(リセット)->G031(リセット)
1.シリアル端子は、繋がず、コンパイル実行する。
2.一旦、ST-LINKを外す。
3.シリアル通信のtx,rx,gndを繋ぐ。
4.ST-LINKを繋ぐ。
5.シリアル通信のUSBを繋ぐ。
 テラタームも立ち上げる
6.コンパイル実行する。
7.ハローワールドと表示され一文字エコーされる。テストする。
8.修正か゛あればリコンパイルする。
9.テストが終わったらシリアル端子USBを抜く
10.ST-LINKを抜く
11.おわり
xST-LINKやシリアル通信USBを抜いたり挿したりしていたらあさっての方向に
行ったのでなんとなくこの手順になった。テスト時にリセットの為にリコンパイルしている。

復活方法の参考
STM32G031J6M6で6GPIOを使用する。
https://qiita.com/caa45040/items/0e444df2e0a60e763718

STM32G031を使用した。液晶時計ができました。
STM32G031のArduinoでの時計,DS1307で時刻表示( AQM0802A i2c)(STM32G031J6M6)
https://qiita.com/caa45040/items/fee158b4d04a5139bae0

LPC1114のMbedでの時計,DS1307で時刻表示( AQM0802A i2c)(ハードはichigojam)
https://qiita.com/caa45040/items/5f0e7f0f3ebcae613ec2



//#define swdclk PA14 // 8pin
//#define swdio  PA13 // 7pin
//#define t_led1 PA12 // 6pin
//#define t_led2 PA11 // 5pin
//#define en     PA0  // 4pin
//#define in7    PB7  // 1pin

// tx PA14(PB6) 8PIN
// rx PC14(PB7) 1PIN

char u_key;      // 受信データを格納するchar型の変数
char ch_in_key() {

  // 受信データがあった時だけ、処理を行う
  while(!Serial.available()) {}     // 受信データがあるか?
  u_key = Serial.read();            // 1文字だけ読み込む

  return(u_key);
}

void setup() {
  // put your setup code here, to run once:

    //Serial.begin( 9600 ); //bug 

    delay(3000); //not Delete

    Serial.begin( 9600 ); // シリアル通信の速度を9600bpsにする。

    Serial.println("Hello World !");

} //setup

void loop() {
  // put your main code here, to run repeatedly:

  // ch_in_key()で一文字受信してSerial.printで一文字送信する。
  Serial.print( ch_in_key() );    //送受信

} //loop

USARTを有効化