Получение непрерывного потока с камеры Lepton FLIR с платой Nucleo-f401re

Я подключил свою камеру Flir Lepton к своей плате и пытаюсь получить непрерывный поток изображения благодаря программе ThermalView (исходный код здесь: https://github.com/groupgets/LeptonModule/tree/master/software/ThermalView) Я скомпилировал и загрузил на свою плату следующий код :

    int main(void)
{

  //HAL_Init();

  /* Configure the system clock */
  SystemClock_Config();

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_DMA_Init();
  MX_I2C1_Init();
  MX_SPI1_Init();
  MX_USART1_UART_Init();
  MX_USART2_UART_Init();
  SystemClock_Config();

  leptonEnd();
  // LEPTON VDD OFF
  HAL_Delay(1000);
  // LEPTON VDD ON
  HAL_Delay(185);

  LeptonConfigure_I2C(); 

  while(1)
  {
    LeptonReadFrame();
    frameToPc(); 
  }
}

// Output image buffer to USART2
void frameToPc()
{
  static uint8_t frameSkipper = 0;

  uint8_t timeStamp = (HAL_GetTick() - last_frame_millis); // calculate time passed since last been here

  last_frame_millis = HAL_GetTick();



  if(frameSkipper==4)
  {
    //PSEDO//
    //IMGtoRGB();

    ////////
    uint8_t thermalView_header[] = {0xDE,0xAD,0xBE,0xEF}; // 4-byte header for ThermalView application
    HAL_Delay(1000);
    HAL_UART_Transmit_DMA(&huart2, &thermalView_header[0], 4); // print header

    while(huart2.gState != HAL_UART_STATE_READY); // wait for transmission to complete

    HAL_UART_Transmit_DMA(&huart2, &IMG[0], LEPTON_IMG_SIZE_BYTES);

    frameSkipper = 0;
  }

  frameSkipper++;
}uint8_t LeptonReadFrame()
{  
  uint8_t i, frame_number, frame_complete=0;
  uint16_t bad_frame_counter=0;

  while(!frame_complete)
  {
    leptonBegin();

    HAL_SPI_Receive(&hspi1, &FramePacket[0], LEPTON_PACKET_LENGTH, 1000);  // READ LINE    

    leptonEnd();

    //HAL_UART_Transmit(&huart2,  &FramePacket[0], LEPTON_PACKET_LENGTH, 1000); // PRINT LINE

    if( (FramePacket[0] & 0x0f) != 0x0f ) // not discard frame
    {
       frame_number = FramePacket[1];

       if(frame_number < 60) // valid frame
       {
         bad_frame_counter = 0; 

         for(i= 0; i<LEPTON_PACKET_CONTENT_LENGTH; i++)
         {
           IMG[frame_number*LEPTON_PACKET_CONTENT_LENGTH+i] = FramePacket[i+4]; // copy line into IMG buffer, ignoring ID and CRC
         }
       }
       else
       {
         bad_frame_counter++;
       }

       if(frame_number == 59)
       {
          frame_complete = 1;
       }

       if(bad_frame_counter>1000) // 800 lines = 5 bad frames = resync needed
       {
          bad_frame_counter = 0;
          HAL_Delay(185);  // CS is already disabled so the delay is enougth
       }
    }
  }
  return 1;
}

Я успешно получаю поток, но мне нужно установить задержку в 1 секунду между каждым кадром и пропустить кадры между двумя кадрами, которые я отправляю на компьютер. Если вы обратите внимание на что-то неправильное в коде, препятствующее увеличению частоты кадров, дайте мне знать.


person Armand Chocron    schedule 04.01.2017    source источник
comment
поэтому я предполагаю, что вы добавили код задержки if (frameSkipper==4){ ... frameSkipper=0; }? Почему вы должны ставить задержку в 1 секунду между каждым кадром? Что произойдет, если вы этого не сделаете, вы не получите изображения?   -  person yano    schedule 04.01.2017
comment
Каков ваш вопрос снова?   -  person Margaret Bloom    schedule 04.01.2017
comment
Если я этого не сделаю, программа ThermalView не получит ожидаемый пакет и не сможет прочитать кадр. Magaret, я хотел бы увеличить частоту кадров   -  person Armand Chocron    schedule 05.01.2017


Ответы (1)


Вы используете Lepton 2 или Lepton 3? Lepton 3 потребует приобретения не только «кадров», но и 4 «сегментов». Также модули Lepton выводят 2 пустых экрана. Подробнее в этом документе:

http://www.flir.com/uploadedFiles/OEM/Products/LWIR-Cameras/Lepton/Lepton-vs-Lepton-3-App-Note.pdf

сравнение разрешения серии Lepton 2X (80x60) и разрешения Lepton 3 (160x120). Четыре наиболее существенных различия между интерфейсами Lepton и Lepton 3 VoSPI: 1) В Lepton для восстановления видеокадра из отдельных пакетов хост должен декодировать номер пакета из заголовка каждого пакета. На Lepton 3 хост должен декодировать как номер пакета, так и номер сегмента. 2) Общее количество битов на кадр в 4 раза больше для Lepton 3, чем для Lepton. Следовательно, минимальная тактовая частота SPI в 4 раза выше. Максимальная тактовая частота SPI для обоих модулей составляет 20 МГц. 3) Как Lepton, так и Lepton 3 позволяют выводить синхроимпульсы на GPIO3. Частота импульса в 4 раза выше на Лептоне 3, чем на Лептоне. Для Lepton 3 синхроимпульс показывает, когда доступен следующий доступный сегмент, тогда как для Lepton он указывает, когда доступен следующий доступный кадр. 4) Когда телеметрия включена в Lepton, это приводит к трем дополнительным видеострокам (всего 63 пакета на кадр). Когда телеметрия включена в Lepton 3, это приводит к 1 дополнительному пакету на сегмент, что в сумме дает 2 дополнительные видеостроки.

Я пытаюсь заставить лептон 3 работать на моей плате stm32f746g-discovery.

person RDTECH    schedule 11.07.2017