OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 7013|回复: 23

把ov2640采集到的值传到buffer[160][120]中,不做任何处理,再传输到lcd上显示,可是显示的是全黑

[复制链接]

35

主题

309

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2641
金钱
2641
注册时间
2016-8-10
在线时间
470 小时
发表于 2016-8-17 16:29:20 | 显示全部楼层 |阅读模式
5金钱
本帖最后由 huyang201306 于 2016-8-17 16:36 编辑

DCMI开始传输

DCMI开始传输
[attach]60937[/attach   ]

JPEG数据处理

JPEG数据处理

rgb565

rgb565

帧中断

帧中断

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

35

主题

309

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2641
金钱
2641
注册时间
2016-8-10
在线时间
470 小时
 楼主| 发表于 2016-8-17 16:29:21 | 显示全部楼层
回复

使用道具 举报

35

主题

309

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2641
金钱
2641
注册时间
2016-8-10
在线时间
470 小时
 楼主| 发表于 2016-8-17 16:33:26 | 显示全部楼层
rgb565函数
void rgb565_test(void)
{
       
        //u16 i, j;  
        //u8 gm_red,gm_green,gm_blue;       
        //int gm_red,gm_green,gm_blue;       
        //u8 key;
        //u8 effect=0,saturation=2,contrast=2;
        //u8 scale=1;                //ĬèÏêÇè«3ß′çËõ·Å
        //u8 msgbuf[15];        //ÏûÏ¢»o′æÇø
        LCD_Clear(WHITE);
  POINT_COLOR=RED;
        OV2640_RGB565_Mode();        //RGB565Ä£ê½
        My_DCMI_Init();                        //DCMIÅäÖÃ
        DCMI_DMA_Init((int)&buffer,100,DMA_MemoryDataSize_HalfWord,DMA_MemoryInc_Disable);//DCMI DMAÅäÖà 
        OV2640_OutSize_Set(W,H);
        DCMI_Start();                 //Æô¶ˉ′«êä
          
}

帧中断
//DCMIÖD¶Ï·tÎñoˉêy
void DCMI_IRQHandler(void)
{

        //if(frame_mode==0)
        //{
                if(DCMI_GetITStatus(DCMI_IT_FRAME)==SET)//2¶»ñμ½ò»Ö¡í¼Ïñ
                {
                        jpeg_data_process();         //jpegêy¾Y′|àí       
                        DCMI_ClearITPendingBit(DCMI_IT_FRAME);//Çå3yÖ¡ÖD¶Ï
                        LED1=!LED1;
                        //ov_frame++;
                        //frame_mode=1;               
                }
//        }
}

jpeg数据处理

void jpeg_data_process(void) //????????,??????????????????????LCD?
{
     int i,j;
    if(ov2640_mode==0)//RGB565???
    {
            for(i=1;i<W;i++)
            {
                                                 for(j=1;j<H;j++)
              {
               LCD_SetCursor(i,j);   
               LCD_WriteRAM_Prepare();   
               LCD->LCD_RAM=buffer[i][j];
              }                                               
                                    }
                                        //        DCMI_ClearITPendingBit(DCMI_IT_FRAME);//&#199;&#229;3y&#214;&#161;&#214;D&#182;&#207;
         
    }
     
}

dcmi启动传输
void DCMI_Start(void)
{  
  LCD_SetCursor(0,0);  
        LCD_WriteRAM_Prepare();                //&#191;aê&#188;D′è&#235;GRAM
        DMA_Cmd(DMA2_Stream1, ENABLE);//&#191;a&#198;&#244;DMA2,Stream1
        DCMI_CaptureCmd(ENABLE);//DCMI2&#182;&#187;&#241;ê1&#196;ü  
}

主函数
int main(void)
{
        u8 key;
        u8 t;
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//éè&#214;&#195;&#207;μí3&#214;D&#182;&#207;ó&#197;&#207;è&#188;&#182;·&#214;×é2
        delay_init(168);  //3&#245;ê&#188;&#187;ˉ&#209;óê±oˉêy
        uart_init(115200);                //3&#245;ê&#188;&#187;ˉ′&#174;&#191;ú2¨ì&#216;&#194;ê&#206;a115200
        usart2_init(42,115200);                //3&#245;ê&#188;&#187;ˉ′&#174;&#191;ú22¨ì&#216;&#194;ê&#206;a115200
        LED_Init();                                        //3&#245;ê&#188;&#187;ˉLED
        LCD_Init();                                        //LCD3&#245;ê&#188;&#187;ˉ  
        KEY_Init();                                        //°′&#188;ü3&#245;ê&#188;&#187;ˉ
        TIM3_Int_Init(10000-1,8400-1);//10Khz&#188;&#198;êy,1&#195;&#235;&#214;ó&#214;D&#182;&#207;ò&#187;′&#206;       
        usmart_dev.init(84);                //3&#245;ê&#188;&#187;ˉUSMART
        POINT_COLOR=RED;//éè&#214;&#195;×&#214;ì&#229;&#206;aoìé&#171;
        while(OV2640_Init())//3&#245;ê&#188;&#187;ˉOV2640
        {
                LCD_ShowString(30,130,240,16,16,"OV2640 ERR");
                delay_ms(200);
          LCD_Fill(30,130,239,170,WHITE);
                delay_ms(200);
        }
        LCD_ShowString(30,130,200,16,16,"OV2640 OK");            
        while(1)
        {       
                key=KEY_Scan(0);
                if(key==KEY0_PRES)                        //RGB565&#196;£ê&#189;
                {
                        ov2640_mode=0;   
                        break;
                }else if(key==KEY1_PRES)        //JPEG&#196;£ê&#189;
                {
                        ov2640_mode=1;
                        break;
                }
                t++;                                                                           
                if(t==100)LCD_ShowString(30,150,230,16,16,"KEY0:RGB565  KEY1:JPEG"); //éá&#203;&#184;&#207;&#212;ê&#190;ìáê&#190;D&#197;&#207;¢
                if(t==200)
                {       
                        LCD_Fill(30,150,210,150+16,WHITE);
                        t=0;
                }
                delay_ms(5);          
        }
        if(ov2640_mode==0)
        //Identify();       
        rgb565_test();
       
}
回复

使用道具 举报

35

主题

309

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2641
金钱
2641
注册时间
2016-8-10
在线时间
470 小时
 楼主| 发表于 2016-8-17 16:33:56 | 显示全部楼层
最后显示出来的是全黑
回复

使用道具 举报

0

主题

34

帖子

0

精华

高级会员

Rank: 4

积分
968
金钱
968
注册时间
2016-7-18
在线时间
109 小时
发表于 2016-8-17 17:15:07 | 显示全部楼层
有一点应该有问题  你把数据DMA传输到内存buff中,为啥DCMI_DMA_Init()后面的内存地址设成了不增长啊
回复

使用道具 举报

35

主题

309

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2641
金钱
2641
注册时间
2016-8-10
在线时间
470 小时
 楼主| 发表于 2016-8-17 17:26:18 | 显示全部楼层
white_fox 发表于 2016-8-17 17:15
有一点应该有问题  你把数据DMA传输到内存buff中,为啥DCMI_DMA_Init()后面的内存地址设成了不增长啊

改成了这个也不对的
DMA_MemoryInc_Enable
回复

使用道具 举报

35

主题

309

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2641
金钱
2641
注册时间
2016-8-10
在线时间
470 小时
 楼主| 发表于 2016-8-17 17:29:14 | 显示全部楼层
white_fox 发表于 2016-8-17 17:15
有一点应该有问题  你把数据DMA传输到内存buff中,为啥DCMI_DMA_Init()后面的内存地址设成了不增长啊

显示出来是全黑的
回复

使用道具 举报

35

主题

309

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2641
金钱
2641
注册时间
2016-8-10
在线时间
470 小时
 楼主| 发表于 2016-8-17 20:29:23 | 显示全部楼层
卡这里几天了
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2016-8-17 20:36:37 | 显示全部楼层
先在液晶开窗,显示160*120的图片,你看是否正常。液晶显示正常了,再来dma 到内存。
回复

使用道具 举报

35

主题

309

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2641
金钱
2641
注册时间
2016-8-10
在线时间
470 小时
 楼主| 发表于 2016-8-17 20:51:15 | 显示全部楼层
正点原子 发表于 2016-8-17 20:36
先在液晶开窗,显示160*120的图片,你看是否正常。液晶显示正常了,再来dma 到内存。

我去试哈
回复

使用道具 举报

35

主题

309

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2641
金钱
2641
注册时间
2016-8-10
在线时间
470 小时
 楼主| 发表于 2016-8-17 20:58:07 | 显示全部楼层
正点原子 发表于 2016-8-17 20:36
先在液晶开窗,显示160*120的图片,你看是否正常。液晶显示正常了,再来dma 到内存。

OV2640_OutSize_Set(160,120);
回复

使用道具 举报

35

主题

309

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2641
金钱
2641
注册时间
2016-8-10
在线时间
470 小时
 楼主| 发表于 2016-8-17 20:58:26 | 显示全部楼层
正点原子 发表于 2016-8-17 20:36
先在液晶开窗,显示160*120的图片,你看是否正常。液晶显示正常了,再来dma 到内存。

这么改的,但是图像不对
OV2640_OutSize_Set(160,120);
回复

使用道具 举报

35

主题

309

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2641
金钱
2641
注册时间
2016-8-10
在线时间
470 小时
 楼主| 发表于 2016-8-18 23:25:57 | 显示全部楼层
正点原子 发表于 2016-8-17 20:36
先在液晶开窗,显示160*120的图片,你看是否正常。液晶显示正常了,再来dma 到内存。

能够在啊液晶上开窗显示,从dma到数组fps,不做任何处理,在由fps到lcd,能够显示,但是就是在一直刷屏,跳的很凶
回复

使用道具 举报

3

主题

7

帖子

0

精华

新手上路

积分
34
金钱
34
注册时间
2017-3-15
在线时间
8 小时
发表于 2017-3-25 21:55:48 | 显示全部楼层

怎么解决的?
回复

使用道具 举报

4

主题

39

帖子

0

精华

初级会员

Rank: 2

积分
199
金钱
199
注册时间
2014-4-19
在线时间
41 小时
发表于 2017-5-12 15:46:58 | 显示全部楼层
参考了版主的代码,自己又重新理解了原子哥代码,实现了160*120的数据搬移和显示,main函数我没动。我的核心代码如下:rgb565_test这个函数中改了这几个函数       
DCMI_DMA_Init((u32)&buffer,buf_size,DMA_MemoryDataSize_HalfWord,DMA_MemoryInc_Enable);
OV2640_OutSize_Set(320,240);
        while(1)
        {
        DMA_Cmd(DMA2_Stream1, ENABLE);
        DCMI_CaptureCmd(ENABLE);
        }

jpeg_data_process这个函数中原来的全部去掉,改成下面内容:
u16 i,j,Bdata,data=0;
for(i=0;i<120;i++)
                for(j=0;j<160;j++)
                        {
                                Bdata=data++;
                                LCD_SetCursor(j,i);   
                                LCD_WriteRAM_Prepare();   
                                LCD->LCD_RAM=buffer[Bdata];
                        }
Bdata = 0;
data = 0;

其中有几个参数的设置如下:
#define buf_size 160*120
u32 buffer[buf_size];


现象是会在屏幕上看到有一个160*120的窗口,实时显示着摄像头采集回来的数据。


有一点让我感到很纳闷,那就是我把OV2640_OutSize_Set(320,240); 改成OV2640_OutSize_Set(160,120); 显示的是四个窗口,四个都是一样的窗口,不明白是哪里错了,我知道是摄像头的设置有问题,改成了OV2640_OutSize_Set(320,240); 输出的视频数据正常。还希望原子哥解答一下,该怎么去设置 @正点原子
新手的路还很长
回复

使用道具 举报

4

主题

39

帖子

0

精华

初级会员

Rank: 2

积分
199
金钱
199
注册时间
2014-4-19
在线时间
41 小时
发表于 2017-5-12 15:48:16 | 显示全部楼层

看我的回复
新手的路还很长
回复

使用道具 举报

4

主题

39

帖子

0

精华

初级会员

Rank: 2

积分
199
金钱
199
注册时间
2014-4-19
在线时间
41 小时
发表于 2017-5-12 15:50:25 | 显示全部楼层
整个工程是在原子哥的例程:实验35 摄像头实验  更改的
新手的路还很长
回复

使用道具 举报

1

主题

4

帖子

0

精华

新手上路

积分
32
金钱
32
注册时间
2017-3-26
在线时间
7 小时
发表于 2017-7-19 10:47:20 | 显示全部楼层
脚叔 发表于 2017-5-12 15:46
参考了版主的代码,自己又重新理解了原子哥代码,实现了160*120的数据搬移和显示,main函数我没动。我的核 ...

你好,我照着您的代码试了一下,但是显示设置变量过大,就是buffer,用的是正点原子407的板子,就算把他弄成80*60还是显示没有空间,不知道怎么回事
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
16
金钱
16
注册时间
2017-8-11
在线时间
8 小时
发表于 2017-8-16 19:43:29 | 显示全部楼层
月月乐 发表于 2017-7-19 10:47
你好,我照着您的代码试了一下,但是显示设置变量过大,就是buffer,用的是正点原子407的板子,就算把他 ...

把main.c最开始那句#define jpeg_buf[jpeg_buf_size] 删掉,编译会报错;然后把后面凡是涉及到jpeg_buf的改成buffer,再编译就不会出现空间不足的问题了
回复

使用道具 举报

1

主题

7

帖子

0

精华

新手上路

积分
23
金钱
23
注册时间
2018-1-24
在线时间
4 小时
发表于 2018-1-24 17:13:42 | 显示全部楼层

大神怎么解决的,可以传授一下吗?
回复

使用道具 举报

35

主题

309

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2641
金钱
2641
注册时间
2016-8-10
在线时间
470 小时
 楼主| 发表于 2018-1-25 09:09:36 | 显示全部楼层
QMXi 发表于 2018-1-24 17:13
大神怎么解决的,可以传授一下吗?

大哥你看我发帖的时间,都过了这么久  
回复

使用道具 举报

1

主题

7

帖子

0

精华

新手上路

积分
23
金钱
23
注册时间
2018-1-24
在线时间
4 小时
发表于 2018-1-25 13:45:10 | 显示全部楼层
huyang201306 发表于 2018-1-25 09:09
大哥你看我发帖的时间,都过了这么久

看到了,谢啦,已解决
回复

使用道具 举报

0

主题

3

帖子

0

精华

新手入门

积分
16
金钱
16
注册时间
2018-4-1
在线时间
2 小时
发表于 2018-4-1 16:19:14 | 显示全部楼层
大神在吗?我想问问你能针对摄像头采集的数据进行红色检测吗?
回复

使用道具 举报

1

主题

6

帖子

0

精华

新手入门

积分
15
金钱
15
注册时间
2018-9-16
在线时间
3 小时
发表于 2018-9-18 21:17:39 | 显示全部楼层
敢问是怎么解决的
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-8 04:44

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表