2017-01-04 10 views
0

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

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 сек между каждым кадром, и должен пропускать кадры между 2 кадрами Я отправляю на компьютер. Если вы обратите внимание на что-то неправильное в коде, которое предотвращает увеличение частоты кадров, сообщите мне.

+1

поэтому я предполагаю, что вы добавили 'if (frameSkipper == 4) {... frameSkipper = 0; } 'код задержки? Почему вам приходится устанавливать задержку в 1 секунду между кадрами? Что произойдет, если вы этого не сделаете, вы не получите изображения? – yano

+0

Каков ваш вопрос снова? –

+0

Если я этого не сделаю, программа ThermalView не получит пакет, как ожидалось, и ему не удалось прочитать фрейм. Магарет, я хотел бы увеличить частоту кадров –

ответ

1

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

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

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

Im пытается получить лептон 3 для работы на моей панели stm32f746g-discovery.