После софтварной перезагрузки зависает ESP32 в коде инициализации HardwareSerial

Работаю в ArduinoIDE с ESP32 и датчиком отпечатка пальцев TFP625A. Датчик висит на UART2 и обслуживается библиотекой FPM с помощью HardwareSerial. Всё работает хорошо до того момента, пока программно не будет выполнена перезагрузка - ESP.restart(). После этой команды микроконтроллер перезагружается и зависает в месте инициализации датчика. Я вставил печать в файл HardwareSerial и увидел, что в функции HardwareSerial::begin(...) код не проходит дальше этого места

_uart = uartBegin(_uart_nr, baud ? baud : 9600, config, rxPin, txPin, 256, invert);

Как я понимаю, после перезагрузки микроконтроллера в его регистрах остаётся информация о настроенном ранее UART2. Попытки обнулить UART перед перезагрузкой микроконтроллера не исправляют ситуацию. Если же перезагрузить микроконтроллер кнопкой перезагрузки, то всё работает нормально.

Как побороть зависание ESP32?

Фрагменты кода:

HardwareSerial mySerial(2);
FPM fpm(&mySerial);
...
void freeFPM()
{
    fpm = 0;
    mySerial.end();
    mySerial = 0;
}

bool fpm_setup()
{
    freeFPM();
    mySerial = HardwareSerial(2);
    finger = FPM(&mySerial);
    mySerial.begin(57600);
    fpm.begin(0);
}

void restartESP()
{
    freeFPM();
    ESP.restart();
}

Ответы (0 шт):