После софтварной перезагрузки зависает 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();
}