首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >利用板核f401Re从Lepton FLIR相机获得连续流

利用板核f401Re从Lepton FLIR相机获得连续流
EN

Stack Overflow用户
提问于 2017-01-04 15:17:31
回答 1查看 1.1K关注 0票数 0

我将我的Flir Lepton相机连接到我的板上,并且我试图拥有一个连续的图像流,这要归功于程序ThermalView (源代码在这里:https://github.com/groupgets/LeptonModule/tree/master/software/ThermalView),我编译并下载了以下代码到我的板上:

代码语言:javascript
复制
    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秒,并且必须跳过我要发送到计算机的两个帧之间的帧。如果您注意到代码中的一些错误,阻止了帧速率的增加,请告诉我。

EN

回答 1

Stack Overflow用户

发布于 2017-07-11 20:46:09

你用的是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)分辨率。Lepton和Lepton 3 VoSPI接口之间的四个最显著的区别是: 1)在Lepton上,从单个数据包重构视频帧需要主机从每个分组报头解码数据包号。在Lepton 3上,主机必须同时解码数据包号和段号。2) Lepton 3的每帧总位数比Lepton大4X。因此,最小SPI时钟速率提高了4倍。两个模块的最大SPI时钟速率为20 MHz。3) Lepton和Lepton 3都提供了在GPIO3上输出同步脉冲的选项。脉冲频率在Lepton 3上比在Lepton上高4倍。对于Lepton 3,同步脉冲表示下一个可用段何时可用,而Lepton则表示下一个可用帧何时可用。4)在Lepton中启用遥测时,会产生三条额外的视频线路(每帧63个数据包)。当在Lepton 3中启用遥测时,它会导致每段增加1包,总共增加2条视频线路。

我想让轻子3在我的stm32f746g发现板上工作。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41467204

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档