【问题标题】:ESP32 stucks in HardwareSerial initialization code after software restartESP32 软件重启后卡在 HardwareSerial 初始化代码中
【发布时间】:2022-01-21 21:12:18
【问题描述】:

我在 ArduinoIDE 中使用 ESP32 和 TFP625A 指纹传感器工作。传感器连接到 UART2 并由 FPM 库使用 HardwareSerial 提供服务。在以编程方式重新启动之前一切正常 - ESP.restart()。执行此命令后,微控制器重新启动并停留在传感器初始化位置。我在HardwareSerial源代码文件中插入了一些Serial.print(),看到HardwareSerial::begin()函数中,代码并没有超出这个地方

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

据我了解,重新启动微控制器后,有关先前配置的 UART2 的信息仍保留在其寄存器中。在重新启动微控制器之前尝试将 UART 归零并不能纠正这种情况。如果我通过重置按钮让硬件重新启动微控制器,那么一切正常。

如何克服 ESP32 卡顿?

代码片段:

#include <HardwareSerial.h>
#include <FPM.h>

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();
}

【问题讨论】:

    标签: serial-port esp32 uart fingerprint arduino-esp32


    【解决方案1】:

    我认为您需要在 ESP32 重新启动时对传感器进行硬重置。我不熟悉那个特定的传感器,但我也遇到过类似的问题。 我所做的是将传感器的复位输入连接到 ESP32 上的 GPIO 输出,然后代码中的第一步是将该引脚拉下一小会以将其复位。

    我认为发生的事情是,当您第一次打开项目时,传感器会通过其自身的开机复位机制进行复位,但是当您对 ESP32 进行软件复位时,传感器也不会复位,因此我认为您需要按照我上面的描述去做。

    【讨论】:

      猜你喜欢
      • 2012-03-01
      • 1970-01-01
      • 2021-06-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多