Получение непрерывного потока от камеры Lepton FLIR с платой Nucleo-f401re
Я подключил свою Flir Lepton Camera к своей плате, и я пытаюсь получить непрерывный поток изображения, благодаря программе 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 секунду между каждым кадром и пропустить кадры между двумя кадрами, которые я посылаю на компьютер. Если вы обратили внимание на что-то неправильное в коде, которое не позволяет увеличить частоту кадров, дайте мне знать.
1 ответ
Вы используете Лептон 2 или Лептон 3? Lepton 3 потребует приобретения не только "Рамок", но и 4 "сегментов". Имеются также два пустых экрана, выводимых модулями Lepton. Подробнее в этом документе:
http://www.flir.com/uploadedFiles/OEM/Products/LWIR-Cameras/Lepton/Lepton-vs-Lepton-3-App-Note.pdf
сравнение разрешения серии Lepton 2X (80x60) и разрешения Lepton 3 (160x120). Четыре наиболее значимых различия между интерфейсами VoSPI Lepton и Lepton 3: 1) В Lepton для восстановления видеокадра из отдельных пакетов требуется, чтобы хост декодировал номер пакета из каждого заголовка пакета. На Лептоне 3 хост должен декодировать как номер пакета, так и номер сегмента. 2) Общее количество бит на кадр в 4 раза больше для Лептона 3, чем для Лептона. Следовательно, минимальная тактовая частота SPI в 4 раза выше. Максимальная тактовая частота SPI для обоих модулей составляет 20 МГц. 3) Как Lepton, так и Lepton 3 предоставляют возможность вывода синхроимпульса на GPIO3. Частота импульса на Лептоне 3 в 4 раза выше, чем на Лептоне. Для Лептона 3 импульс синхронизации представляет, когда следующий доступный сегмент доступен, тогда как для Лептона это указывает, когда следующий доступный кадр доступен. 4) Когда в Лептоне включена телеметрия, это приводит к появлению трех дополнительных видеолиний (всего 63 пакета на кадр). Когда в Lepton 3 включена телеметрия, это приводит к 1 дополнительному пакету на сегмент, что в сумме дает 2 дополнительные линии видео.
Я пытаюсь заставить Лептон 3 работать на моей плате stm32f746g-discovery.