OpenEdv-开源电子网

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

ILI9341 2.8寸屏抓照片每隔几十张屏幕就会偏移

[复制链接]

2

主题

10

帖子

0

精华

新手入门

积分
12
金钱
12
注册时间
2017-5-15
在线时间
6 小时
发表于 2017-7-15 21:44:28 | 显示全部楼层 |阅读模式
17金钱
求助求助,一个月了还没能解决掉,来帮帮我,具体情况是用的微雪电子的ov2640和正点原子的2.8寸屏抓照片1600*1200分辨率,抓完图之后再显示视频,主要代码是正点原子探索者F407上例程抠下来的,目前有个问题,抓图后再显示会出现屏幕偏移,就是本来的屏幕边缘跑到中间去了,不一定跑到什么位置有时左边有时右边,再次抓图就会恢复,偶尔也不能恢复,要再抓一次才能恢复, TIM图片20170715213513.jpg [mw_shl_code=c,true]void photo_task(void *pdata)
{
        OS_CPU_SR cpu_sr;
        u8 res;
        u32 tol_len,bwr;
        u16 i;
        u8 *pbuf,*pbuff;
        err_t err;                         //′íÎó±êÖ¾        
        u8 err2;
        u8 *pptr[2];
        u32 jpgdata_len,jpgdata_len1;
        //static u8 cnt_buf[100];
        ///////////////////////////////DT¸ÄÄú′æéêÇë꧰üoó′|àí1y3ì////////////////////////////
        while(1)
        {
                LCD_WR_REG_cnt=0;
                LCD_WR_DATA_cnt=0;
                LCD_RD_DATA_cnt=0;
                LCD_WriteReg_cnt=0;
                LCD_ReadReg_cnt=0;
                LCD_WriteRAM_Prepare_cnt=0;
                LCD_WriteRAM_cnt=0;
          
               
                //delay_ms(100);
                if(1)
                {
                        OSSemPend(tkpic_flag,0,&err2);
                                       
                       
                        DCMI_Stop();       
      jpeg_size=12;                        //JPEGÅÄÕÕ,ĬèÏéèÖÃÎa1600*1200·Ö±æÂê(UXGA)                       
                        send_picture_t *send_pic;
                        do{
                                u8 i=0;
                                //OSSchedLock();
                                jpeg_buf0=gui_memex_malloc(jpeg_dma_bufsize*4);        //
                                jpeg_buf1=gui_memex_malloc(jpeg_dma_bufsize*4);        //
                                jpeg_data_buf=gui_memex_malloc(210*1024);                //
                                jpeg_pack_buf=gui_memex_malloc(215*1024);
                                send_pic = gui_memin_malloc(sizeof(send_picture_t));
                                if(!jpeg_buf0||!jpeg_buf1||!jpeg_data_buf||!send_pic||!jpeg_pack_buf)//
                                        {
                                                gui_memin_free(jpeg_pack_buf);
                                                gui_memin_free(send_pic);
                                                gui_memin_free(jpeg_buf0);
                                                gui_memin_free(jpeg_buf1);                       
                                                gui_memex_free(jpeg_data_buf);                                       
                                                if(i>2){
                                                        DCMI_Start();
                                                        beep_beep(6, "Photo memory error\r\n");
                                                        OSSemPost(command_finished);
                                                }
                                                        i++;                       
                                        }
                          }while(!jpeg_buf0||!jpeg_buf1||!jpeg_data_buf||!send_pic||!jpeg_pack_buf);
                        if(jpeg_buf0 && jpeg_buf1 && jpeg_data_buf && send_pic && jpeg_pack_buf )
                        {
                               
                                ov2640_mode=OV2640_JPEG_MODE;                                //
                                dcmi_rx_callback=jpeg_dcmi_rx_callback;//
                                DCMI_DMA_Init((u32)jpeg_buf0,(u32)jpeg_buf1,jpeg_dma_bufsize,DMA_MemoryDataSize_Word,DMA_MemoryInc_Enable);//
                                OV2640_JPEG_Mode();                //
                                OV2640_ImageWin_Set(0,0,1600,1200);                                       
                                OV2640_OutSize_Set(camera_jpeg_img_size_tbl[jpeg_size][0],camera_jpeg_img_size_tbl[jpeg_size][1]);//
                                       
                                DCMI_Start();                         //
                                while(jpeg_data_ok!=1);        //
                                jpeg_data_ok=2;                        //
                                while(jpeg_data_ok!=1);        //
                                jpeg_data_ok=2;                        //
                                while(jpeg_data_ok!=1);        //
                                DCMI_Stop();                         //í£Ö1DMA°áÔË
                                                 
                                        pbuf=(u8*)jpeg_data_buf;
                                        for(i=0;i<jpeg_data_len*4;i++)//0XFF,0XD8
                                        {
                                                if((pbuf==0XFF)&&(pbuf[i+1]==0XD8))break;
                                        }
                                        if(i==jpeg_data_len*4)res=0XFD;//&#195;&#187;&#213;òμ&#189;0XFF,0XD8
                                        else//&#213;òμ&#189;á&#203;
                                        {                                       
                                     //u32 j,j2;
                                                        pbuf+=i;//&#198;&#171;ò&#198;μ&#189;0XFF,0XD8′|       
                                                        pbuff = (u8 *)send_pic;
                                                        send_pic->len=jpeg_data_len*4+16;
                                                        send_pic->protocType = 0x54;
                                                        send_pic->send_type = *(u32 *)&pic_flag_buf;
                                                        send_pic->pic_size=jpeg_data_len*4;

                                                        k[0]=XOR(0,pbuff,16);
                                                        k[0]=XOR(k[0],pbuf,jpeg_data_len*4);
                                                        Pic_pack_work((u8 *)test_head,4,pbuff,16,pbuf,jpeg_data_len*4,&k[0],4);
                                                        counter=5;
                                                        beep_beep(0, "Send Photo OK\r\n");       
                                                                                                       
                                                if(bwr!=(jpeg_data_len*4-i)){res=0;
                                                }
                                        }
                                        jpeg_data_len=0;       
                               
                                        ov2640_mode=OV2640_RGB565_MODE;//
                                        OV2640_RGB565_Mode();        //
//                                        My_DCMI_Init();                        //DCMI&#197;&#228;&#214;&#195;
////                                                {
////                                               
////                                                sprintf(cnt_buf,"%d,%d,%d,%d,%d,%d,%d",
////                                                        LCD_WR_REG_cnt, LCD_WR_DATA_cnt,
////                                                        LCD_RD_DATA_cnt, LCD_WriteReg_cnt,
////                                                  LCD_WriteRAM_Prepare_cnt,
////                                                        LCD_WriteRAM_Prepare_cnt,
////                                                  LCD_WriteRAM_cnt);
////                                                               
////                                        OSMboxPost(UDP_BOX,(void *)cnt_buf);               
////                                                }
                                        OS_ENTER_CRITICAL();
                                        LCD_Init2();         //!!!!!!!!!!!!!!!!抓完图之后在这里把LCD再初始化一下并且放在临界区内
                                        DCMI_DMA_Init((u32)&LCD->LCD_RAM,0,1,DMA_MemoryDataSize_HalfWord,DMA_MemoryInc_Disable);//
                                        OV2640_OutSize_Set(lcddev.width,lcddev.height);//
                                        OS_EXIT_CRITICAL();
                                        DCMI_Start();
                               
                                        gui_memin_free(send_pic);        
                                        gui_memex_free(jpeg_data_buf);
                                        gui_memex_free(jpeg_pack_buf);               
                                        gui_memex_free(jpeg_buf0);
                                        gui_memex_free(jpeg_buf1);       
                                                                                       
                                        OSSemPost(command_finished);             //±&#216;D&#235;μèí&#188;&#198;&#172;&#197;&#196;íê2&#197;&#196;üêí·&#197;D&#197;o&#197;á&#191;
                        }
                }
        }
}[/mw_shl_code] TIM图片20170715213520.jpg

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

使用道具 举报

2

主题

10

帖子

0

精华

新手入门

积分
12
金钱
12
注册时间
2017-5-15
在线时间
6 小时
 楼主| 发表于 2017-7-15 21:51:13 | 显示全部楼层
回复

使用道具 举报

16

主题

189

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1296
金钱
1296
注册时间
2013-8-27
在线时间
503 小时
发表于 2017-7-17 14:32:42 | 显示全部楼层
怎么觉得楼主是女生?
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165359
金钱
165359
注册时间
2010-12-1
在线时间
2110 小时
发表于 2017-7-18 02:15:13 | 显示全部楼层
抓图完后,你重新设置LCD窗口,应该就好了
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-12-19 01:15

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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