目的
デバッグまたは、センサーの値を出力したい
その時は、シリアルが簡単
0.PA2(PA0(4ピン))でハードウェアシリアル
OBでPA0をGPIOにする必要があるが便利。
1.Arduino標準シリアル はっきり言って使いずらい
問題点は、SWD-CLKと重なりなおかつBootと重なる為に書き込むと簡単に書き込めない
STM32G031のArduinoでのUSARTシリアル通信(STM32G031J6M6)
主なプログラム (イメージ)
Serial.begin( 9600 ); // シリアル通信の速度を9600bpsにする。
Serial.println("Hello World !");
2.ソフトウェアシリアルは、軽くておすすめ
単純にシフトしてdelayMicrosecondsでタイミングを取っているだけ
STM32G031の独自のソフトウェアシリアルでHello Worldと出力 9600bps
STM32G031で9600bpsのソフトウェアシリアルのライブラリ化
主なプログラム (イメージ)
int pc_putc(char ch) {
digitalWrite(in7, LOW);//START
delayMicroseconds(UART_DELAY);
for(int ii=0;ii<8;ii++){ //Data x 8
digitalWrite(in7, (ch>>ii)&1 );
delayMicroseconds(UART_DELAY);
}//for
digitalWrite(in7, HIGH);//Stop
delayMicroseconds(UART_DELAY);
return(0);
}//pc_putc
3.番外編 I2C-USARTコンバータを使う バイナリーもあるよ かなりの力作
STM32G031とVSCode+STM32CubeでI2Cスレーブの受信文字をシリアル出力(受信)(STM32G031J6M6)
主なプログラム (イメージ)
Wire.begin(sdaPin,sclPin); //STM32G031J6M6
//I2Cに送信
Wire.beginTransmission(0x40);
Wire.write('A');
Wire.endTransmission();
いろいろ
I2Cスレーブで遊ぶ(受信)が競い合って伸びているだが
需要あるんか?(CAA45040調べ)
I2Cで単純に受信した値を返すプログラムで猛烈に単純化、簡単化
したものでチョーべり簡単(プログラムは、?)(設定は、激ムず(ちょべりバァー)(おやじギャグ)
かなり中間的なもので実質30分もかかっていないのだが。
何につかうんだ?(まあいいや)
ゴット(神)とか自分で言っているとバチが当たりそうなので
教授でいいやまたは、C教授
われは、主にインターフェース系を得意とする教授である。
マンマシーンインターフェース(UI)を様々研究している。
記事は、なぜかマシン間インターフェースばかりになっているが
良しとしょう(教授)
液晶やタクトスイッチをバカにする傾向があるが立派なマンマシーン
インターフェースである。(今時は、ヒューマンインターフェース)
STM32G031と(VSCode+STM32Cube)でI2Cスレーブで遊ぶ(受信)(STM32G031J6M6)HAL
https://qiita.com/caa45040/items/06f5d52b089a6e220f3a
STM32L010と(VSCode+STM32Cube)でI2Cスレーブで遊ぶ(受信)(STM32L010F4P6)HAL
https://qiita.com/caa45040/items/012df828e8f5c2c76eca
イメージ
if(HAL_I2C_Slave_Receive(&hi2c2,(uint8_t*)aRxBuffer, 1, 1000) == HAL_OK) {
str1="OK\r\n";
} else {
str1="NG\r\n";
}