
最近在使用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 ("\r\nDCMI %#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; // 字体颜色 tFont.BackColor = CL_MASK; // 透明色 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); //色彩饱和度 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("\r\nCAMERA Init Success ... ...\r\n"); 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("\r\nCAMERA OV2640 Read ID ERROR %d", err); return err; } } |