使用CUBE HAL 驱动 OV2640 ili9486 显示 ?

2019-07-20 21:51发布

本帖最后由 hpdell 于 2016-6-1 17:10 编辑


最近在使用OV2640的摄像头,
单片机使用stm32f429
lcd屏使用 ili9486

固件库使用 cube v1.9

现在的问题是,我驱动ov2640的摄像头,在lcd屏幕上面可以得到需要显示的图像,但是我没有把ov2640的数据写入到 lcd屏,怎么会有显示出来表示不解 ,望高人指点指点 ?!!

OV2640 输出的数据我是保存在外部的 SRAM 里面的

相关部分代码如下:

/**
  * @brief  Frame Event callback.
  * @param  None
  * @retval None
  */

/**
  * @brief  Frame Event callback.
  * @param  None
  * @retval None
  */
void BSP_CAMERA_FrameEventCallback(void)                                        // LCD 显示回调函数
{
#if   1
//  u32 Count,j;
//        u8  * ptr = (u8  *) DCMI_FrameBuf;

        
  if(DcmiFinishFlag)
  {
    DcmiFinishFlag = 0;
   
//    printf (" DCMI %#x", cc);
    /* Display on LCD */
  //  BSP_LCD_DrawRGBImage(0, 0, 320, 240, (uint8_t *)CAMERA_FRAME_BUFFER);
   
//    Count = 320 * 240 ;     // 显示图像大小,与设置OV2640及LCD屏显示区域大小一致
  //  LCD_SetCursor_B( 0, 320, (20), (480));               
        
    LCD_REG = 0x2C;                         /* 准备读写显存 */
               
//    for (j = 0; j < Count; j ++)
    {
//      LCD_RAM = *ptr;                            // 此处写入到 lcd屏数据我是屏蔽的,LCD 屏 怎么还会有显示出来 ?????????????? 如果把这些屏蔽的代码打开,显示会有乱码或者图像会有干扰。
//                        ptr ++;
    }  
  }
  
#else
  
  
#endif
}


//RGB565测试
//RGB数据直接显示在LCD上面
CAMERA_StatusTypeDef DCMI_RGB565_LcdTest(void)
{
        CAMERA_StatusTypeDef err;
  err = CAMERA_ReadID();        // 读取 OV2640 摄像头的 ID,判断摄像头是否存在或者异常
  if(CAMERA_OK == err)
  {
    tFont.FontCode = FC_ST_16;        // 字体代码 16点阵
    tFont.FrontColor = CL_WHITE;        // 字体颜 {MOD}
    tFont.BackColor = CL_MASK;        // 透明 {MOD}
    tFont.Space = 10;               
   
    LCD_ClrScr(CL_BLUE);
   
    LCD_DispStr( 30, 10,  (const u8 *)"SWS  STM32F429IIT6 LQFP-176",  &tFont);
    LCD_DispStr( 30, 34,  (const u8 *)"OV2640 RGB565 Mode",  &tFont);
    LCD_DispStr( 30, 58,  (const u8 *)"KEY0 Contrast",  &tFont);                                                //对比度
    LCD_DispStr( 30, 82,  (const u8 *)"KEY1 Saturation",  &tFont);                                        // {MOD}彩饱和度        
    LCD_DispStr( 30, 106, (const u8 *)"KEY2 Effects",  &tFont);                                                //特效         
    LCD_DispStr( 30, 130, (const u8 *)"KEY_UP FullSize / Scale",  &tFont);        //1:1尺寸(显示真实尺寸)/全尺寸缩放
    bsp_DelayMS(50);        
   
   
    /* 初始化OV2640摄像头及读取摄像头芯片ID,确定摄像头正常连接 */
    if(CAMERA_OK == BSP_CAMERA_Init(CAMERA_R320x240))
    {
      /* Wait 1s before Camera snapshot */
      HAL_Delay(10);
      
                  CAMERA_RGB565_Mode();                                                        //RGB565模式
      printf(" CAMERA Init Success ... ... ");
                              
      LCD_SetCursor_B(0 , 320 -1,                 //图像输出320,输出范围要与此“CAMERA_SetImageOutPixelSize(320, 240); ”的设置一致
                      215,  455 -1);                //图像输出240,                        

      CAMERA_SetImageOutPixelSize(320, 240);
      
      DCMI_FrameBuf = mymalloc(SRAMEX, 320*240) ;     // 申请 外部 SRAM 地址
      /* Start the Camera Capture 启动相机捕捉  */
//            BSP_CAMERA_ContinuousStart( (uint8_t *) & LCD_RAM);          // 这个地方是直接在lcd屏上面显示
      
      BSP_CAMERA_ContinuousStart(  (u8 *) DCMI_FrameBuf);                // 这个地方是吧ov2640 摄像头的数据保存在 外部 SRAM 里面的,
    }
    while(1)
    {
   
    }
  }
  else
  {
//    printf(" CAMERA OV2640 Read ID ERROR %d", err);
    return err;
  }
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。