[M5Stack/ESP32] Serial.begin()でハングアップする問題

M5Stackのシリアル通信ポートは3つありますが、Arduino IDEでは、使用開始時にbegin()で初期化します。
begin()の引数にはボーレートやTX/RXのピン番号等を指定しますが、一度begin()を実行した後で再度begin()を実行するとハングアップする場合があります。

再度begin()を実行しないといけない場合として、ボーレートの変更があります。
例えばGPS受信機などのセンサーのボーレートを変更する場合は次のような手順になります。

Serial1.begin( 38400, SERIAL_8N1, 26, 13 ); // センサの既定値のボーレートで初期化
Serial1.write( buff, numBytes ); // センサに送るボーレート変更コマンドをbuffにセットしておく
Serial1.begin( 115200 , SERIAL_8N1, 26, 13 );  // ボーレートを変更

この2回目のbegin()でハングアップしたり、リブートしたりする場合があります。
この問題は
「ESP32/Arduino Serial.begin()重ね掛け無効?」
「HardwareSerial freezing ESP32 #3563」
等でも報告されています。
この問題の回避のため色々試しましたが、今回次の対策を行ったところリブートしていたのがしなくなりました。

Serial1.begin( 38400, SERIAL_8N1, 26, 13 ); // センサの既定値のボーレートで初期化
Serial1.write( buff, numBytes ); // センサに送るボーレート変更コマンドをbuffにセットしておく
Serial1.end(); // end()を実行 ←←追加
delay( 1000 ); // 1秒待つ  ←←追加

Serial1.begin( 115200 , SERIAL_8N1, 26, 13 );  // ボーレートを変更

なお、ボーレートだけの変更であれば、
Serial1.updateBaudRate( 115200 );
という専用の関数がある事が分かりましたので、そちらを使った方が無難です。