我将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秒的延迟,并且必须跳过要发送到计算机的2帧之间的帧。如果您注意代码中的某些错误,从而阻止了帧速率的提高,请告诉我。
最佳答案
您使用的是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上,根据单个数据包重建视频帧需要主机对每个数据包报头中的数据包编号进行解码。上轻子3,主机必须解码两者的数据包号和段号。
2)Lepton 3的每帧位数比Lepton大4倍。因此,最小SPI时钟速率为4X速度更快。两个模块的最大SPI时钟速率为20MHz。
3)两个轻子和轻子3提供选项以输出上GPIO3一个同步脉冲。轻子3的脉冲频率比轻子3高4倍。对于轻子3,当下一个可用的片段可用,而对于轻子表示当下一个可用的帧是可用的同步脉冲表示。
4)当在遥测轻子被启用,它导致三个额外的视频行(每帧63个总数据包)。在Lepton 3中启用遥测功能时,每段将导致1个额外的数据包,总共2条额外的视频线。
我试图让Lepton 3在我的stm32f746g-发现板上工作。
关于c - 获得连续的数据流从轻子FLIR摄像头与板细胞核 - f401re,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41467204/