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

2019-07-20 06:04发布

本帖最后由 huyang201306 于 2016-8-17 16:36 编辑

DCMI开始传输 DCMI开始传输 [attach]60937[/attach   ] JPEG数据处理 JPEG数据处理 rgb565 rgb565 帧中断 帧中断
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
23条回答
huyang201306
1楼-- · 2019-07-20 10:59
 精彩回答 2  元偷偷看……
huyang201306
2楼-- · 2019-07-20 15:54
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();
       
}
huyang201306
3楼-- · 2019-07-20 21:21
 精彩回答 2  元偷偷看……
white_fox
4楼-- · 2019-07-21 02:52
 精彩回答 2  元偷偷看……
huyang201306
5楼-- · 2019-07-21 04:31
white_fox 发表于 2016-8-17 17:15
有一点应该有问题  你把数据DMA传输到内存buff中,为啥DCMI_DMA_Init()后面的内存地址设成了不增长啊

改成了这个也不对的
DMA_MemoryInc_Enable
huyang201306
6楼-- · 2019-07-21 09:25
white_fox 发表于 2016-8-17 17:15
有一点应该有问题  你把数据DMA传输到内存buff中,为啥DCMI_DMA_Init()后面的内存地址设成了不增长啊

显示出来是全黑的

一周热门 更多>