В настоящее время я использую ESP32 devkit и датчик MPU-9250.
Я использую библиотеку из GitHub для обоих отсюда:
https://github.com/natanaeljr/esp32-MPU-driver:
Я сейчас запускаю пример mpu_real https://github.com/natanaeljr/esp32-MPU-driver/blob/master/examples/mpu_real/main/mpu_real.cpp
Предполагается, что в этом примере данные считываются из буфера FIFO в MPU-9250, когда в буфере есть данные.
но я не получаю никаких данных из командной строки и, используя журналы, я определил, что код застревает на этом этапе:
uint32_t notificationValue = ulTaskNotifyTake(pdTRUE, portMAX_DELAY);
в цикле чтения в задаче mpuTask ().
Я определил, что он ожидает уведомления от функции mpuISR (); Я поместил лог в mpuISR () и отметил, что это никогда не звонил.
Оглядываясь назад в mpuTask (), мы должны запустить mpuISR ():
constexpr gpio_config_t kGPIOConfig{
.pin_bit_mask = (uint64_t) 0x1 << kInterruptPin,
.mode = GPIO_MODE_INPUT,
.pull_up_en = GPIO_PULLUP_DISABLE,
.pull_down_en = GPIO_PULLDOWN_ENABLE,
.intr_type = GPIO_INTR_POSEDGE //
};
gpio_config(&kGPIOConfig);
gpio_install_isr_service(ESP_INTR_FLAG_IRAM);
gpio_isr_handler_add((gpio_num_t) kInterruptPin, mpuISR,
xTaskGetCurrentTaskHandle());
ESP_ERROR_CHECK(MPU.setInterruptConfig(kInterruptConfig));
ESP_ERROR_CHECK(MPU.setInterruptEnabled(mpud::INT_EN_RAWDATA_READY));
Таким образом, в основном он конфигурирует вывод (в данном случае GPIO 17) для получения прерывания и создает обработчик для запуска mpuISR () при получении прерывания, а затем настраивает MPU9250 для отправки прерывания, когда данные находятся в регистрах. За исключением того, что он этого не делает.
Некоторые вещи, которые я отметил:
В любом случае, мне было интересно, сможет ли кто-нибудь выяснить, что именно идет не так, или, по крайней мере, указать мне направление, в котором нужно искать. Возможно, вам придется посмотреть полный пример, который я перечислил на github.
Заранее спасибо!
Задача ещё не решена.
Других решений пока нет …