摄像头传输花屏

2019-07-20 17:02发布

因为我要做无线视频传输    所以将摄像头实验例程中DCMI_DMA传输到的内存有LCD->LCD_RAM  改为了一个外部SRAM的一个大数组U16 buff[384000]  
但是出现了只能lcd一部分显示图像剩下全是花屏   不知为什么   摄像头输出速率也调过没有反应    求大神帮忙看一下@正点原子
8a4df794217b484204087f9f1ee1a11d.jpg              4436b0a7b42c8c92faedafb73155d983.jpg


#define jpeg_buf_size 384000                         //定义JPEG数据缓存jpeg_buf的大小(*4字节)31*1024  
//__align(4) u32 jpeg_buf[jpeg_buf_size];        //JPEG数据缓存buf
u16 jpeg_buf[jpeg_buf_size] __attribute__((at(0X68000000)));        //JPEG数据缓存buf


//RGB565测试
//RGB数据直接显示在LCD上面
void rgb565_test(void)
{
        u8 key;
        int i=0;
        int j=0;
        int flag=0;
        LCD_Clear(WHITE);
    POINT_COLOR=RED;
        LCD_ShowString(30,50,200,16,16,"ALIENTEK STM32F4");
        LCD_ShowString(30,70,200,16,16,"OV2640 RGB565 Mode");
       
        LCD_ShowString(30,100,200,16,16,"KEY0:Contrast");                        //对比度
        LCD_ShowString(30,130,200,16,16,"KEY1:Saturation");                 // {MOD}彩饱和度
        LCD_ShowString(30,150,200,16,16,"KEY2:Effects");                         //特效
        LCD_ShowString(30,170,200,16,16,"KEY_UP:FullSize/Scale");        //1:1尺寸(显示真实尺寸)/全尺寸缩放
       
        ov2640_speed_ctrl();
        OV2640_RGB565_Mode();        //RGB565模式
        DCMI_Init();                        //DCMI配置
//        DCMI_DMA_Init((u32)&LCD->LCD_RAM,1,1,0);//DCMI DMA配置
        DCMI_DMA_Init((u32)&jpeg_buf,384000,1,1);//DCMI DMA配置          
        OV2640_OutSize_Set(480,800);
        DCMI_Start();                 //启动传输
        printf("out ");
        while(1)
        {
                        LCD_SetCursor(0x0000,0X0000);  
                        LCD_WriteRAM_Prepare();                //开始写入GRAM
                        for(j=0;j<384000;j++)
                        {       
                                LCD->LCD_RAM=jpeg_buf[j];
                        }
                delay_ms(500);//delay_ms(10)        这个延时的长短决定摄像头采集图像质量  延时长点图像效果好
        }   
}



友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
4条回答
正点原子
1楼-- · 2019-07-20 19:23
 精彩回答 2  元偷偷看……
zhaoyuaiweide
2楼-- · 2019-07-20 23:04
自己顶一个   这个问题没有方向   求大神给个方向也可以
zhaoyuaiweide
3楼-- · 2019-07-21 01:06
正点原子 发表于 2017-2-6 17:16
这是因为外部sram的速度跟不上摄像头的输出数据,导致数据丢失。
解决办法:不要直接DMA到外部SRAM。

原子哥  我想实现一个无线视频传输功能,试过以下方法:
1.直接定义一个u16 ram;       lcd->lcd_ram=ram;这种方法我想的原理就是和直接给lcd显存数据一样lcd屏幕全是花屏,这种方法失败,但原因并不清楚,想不通有点。

2.定义一个内部sram最大的数组,摄像头数据存在这个数组中直接,将lcd分成几部分(类似于页)显示,但是有很多重叠画面,失败,原因是摄像头更新速度和存放到数组的速度不匹配,且不好控制为一致。

3.定时器读取一块屏幕上的GRAM值,然后传输到另一块单片机再显示出来,基本上不可行,读取行——400,还不是太卡,当读取到800行的时候,传输方的lcd就卡的不动了,调定时器时间不能解决。并且这种方法我觉得也不太好,就算成功了也应该很慢,不实时。

4.用外部sram定义一个56000数组然后显示240*240的视屏画面还可以,不卡,但是就是画面不太大。


我看到网上有视频用的103做得很不错,不知原子哥有没有其他好的方向或者思路

另附一个别人做的网址:http://v.youku.com/v_show/id_XODc3OTcwNjMy.html
倒是看不太清楚到底是不是实时传输@正点原子
zhaoyuaiweide
4楼-- · 2019-07-21 03:13
正点原子 发表于 2017-2-6 17:16
这是因为外部sram的速度跟不上摄像头的输出数据,导致数据丢失。
解决办法:不要直接DMA到外部SRAM。

原子哥
或者我直接不用rgb565模式   用jpeg模式的话是不是数组大小空间就省下了    明天再试试jpeg模式  

一周热门 更多>