STM32F429图像采集OV2640保存RGB565到数组问题,200积分悬赏

2019-07-20 04:57发布

本帖最后由 STM23小白 于 2017-9-10 15:03 编辑

我要采集RGB565图像到数组以方便做图像处理,数组是申请的片外RAM,但如何判断一帧图像的帧头和帧尾呢。例程里面是直接判断JPG格式,RGB565如何判断呢?
贴上代码,求大神看一看逻辑上应该如何修改。
这是采集到一帧图像回调
if(photo_data_ok == IMG_START)
      {
        __HAL_DMA_DISABLE(&DMADMCI_Handler);//关闭DMA
        while(DMA2_Stream1->CR&0X01); //等待DMA2_Stream1可配置
        rlen=lcddev.width-__HAL_DMA_GET_COUNTER(&DMADMCI_Handler);//得到剩余数据长度
        pbuf=photo_data_buf+photo_data_len;//偏移到有效数据末尾,继续添加
        if(DMADMCI_Handler.Instance->CR&(1<<19))
          for(i=0;i<rlen;i++)
            pbuf=dcmi_line_buf_photo[1];//读取buf1里面的剩余数据
        else
          for(i=0;i<rlen;i++)
            pbuf=dcmi_line_buf_photo[0];//读取buf0里面的剩余数据
        photo_data_len += rlen;
        photo_data_ok = IMG_FINISH;
      }
      if(photo_data_ok == IMG_NEXT)
      {
        __HAL_DMA_SET_COUNTER(&DMADMCI_Handler,photo_line_size); //传输长度为photo_buf_size*4字节
        __HAL_DMA_ENABLE(&DMADMCI_Handler); //打开DMA
        photo_data_ok = IMG_START;
        photo_data_len = 0;        //数据重新开始
      }
这是DMA2数据流1中断回调
//图像采集回调函数
void data_dcmi_rx_callback(void)
{
  u32 i;
  u32 *pbuf;
  pbuf=photo_data_buf+photo_data_len;//偏移到有效数据末尾
  if(DMADMCI_Handler.Instance->CR&(1<<19))//buf0已满,正常处理buf1
  {
    for(i=0;i<lcddev.width;i++)pbuf=dcmi_line_buf_photo[0];//读取buf0里面的数据
    photo_data_len+=lcddev.width;//偏移
  }
  else //buf1已满,正常处理buf0
  {
    for(i=0;i<lcddev.width;i++)pbuf=dcmi_line_buf_photo[1];//读取buf1里面的数据
    photo_data_len+=lcddev.width;//偏移
  }
}
这是主函数大循环
//获取图像
void camera_get_img(void)
{
  photo_data_len=0;
  photo_data_ok = IMG_START;//开始采集一帧图像保存至数组
  dcmi_rx_callback = data_dcmi_rx_callback;//设置保存图像回调函数
  while(photo_data_ok != IMG_FINISH);
  photo_data_ok = IMG_NEXT;//采集第二帧
  while(photo_data_ok != IMG_FINISH);
  dcmi_rx_callback = lcd_dcmi_rx_callback;//设置显示回掉函数
  DCMI_DMA_Init((u32)dcmi_line_buf_photo[0],(u32)dcmi_line_buf_photo[1],lcddev.width/2,DMA_MDATAALIGN_HALFWORD,DMA_MINC_ENABLE);//DCMI DMA配置  
}
基本上根据原子代码修改的,求给一个实现功能的思路

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
10条回答
STM23小白
1楼-- · 2019-07-21 10:32
 精彩回答 2  元偷偷看……
正点原子
2楼-- · 2019-07-21 15:41
STM23小白 发表于 2017-9-17 12:06
原子哥,为什么行中断读了值以后,进帧中断还有剩余的值要读呢?可以配置进帧中断把一帧的图像一次性读完 ...

不行,每一个行信号,出一行数据
log云纹
3楼-- · 2019-07-21 20:17
帮顶
随性
4楼-- · 2019-07-22 01:32
 精彩回答 2  元偷偷看……

一周热门 更多>