大神帮帮忙,ov7670+fifo读图像出来不对,多谢了!

2019-07-16 08:28发布

我用的是STM32,图片读出来以后,通过串口发送到电脑上显示成这样
192614y0j8ywgmywzdhscm.jpg.thumb.jpg
tica, SimSun, sans-serif">贴上代码,弄了一个月了也没搞定,对于高手来说应该很简单

void EXTI0_IRQHandler(void){
        EXTI->PR=1<<0;
        LED_Out(3);
         
        Vsync_Flag++;
        if(Vsync_Flag==1)    //FIFO写指针复位
        {
                FIFO_WRST=0;
                delay_us(100);
                FIFO_WRST=1;                                                                                
                FIFO_WR=1;
               
        }
        if(Vsync_Flag==2){
                 FIFO_WR=0;     //禁止CMOS数据写入FIFO
                EXTI->IMR&=~(1<<0);         //禁止外部中断,准备从FIFO中取数据
                EXTI->EMR&=~(1<<0);
               
                LED_Out(1);
                FIFO_RRST =0;                                //读指针复位                                                                                
                FIFO_RCK =0;                                //至少需要一个时钟周期的跳变才能复位
                FIFO_RCK =1;
                FIFO_RCK =0;
                FIFO_RCK =1;
                FIFO_RRST =1;
                FIFO_OE = 0;

                for(i = 0; i < 240; i ++)                 
                   {
                        for(j = 0; j < 320; j ++)
                          {
                                FIFO_RCK =0;
                                __nop();
                                __nop();
                                t1=(0x00ff&GPIOD->IDR);        //高8位
                                FIFO_RCK =1;
                                __nop();
                                __nop();
                                FIFO_RCK =0;
                                __nop();
                                __nop();
                                t2=(0x00ff&GPIOD->IDR);
                                FIFO_RCK =1;
                                __nop();
                                __nop();
                      //串口发送
                                USART1->DR=t1;
                        while((USART1->SR&0X40)==0);
                                USART1->DR=t2;
                        while((USART1->SR&0X40)==0);                 
                        }
                }
                LED_Out(2);
                FIFO_OE=1;        
                FIFO_WR=0;
                Vsync_Flag = 0;                                //开始下一帧数据采集   
                EXTI->IMR|=1<<0;          //允许外部中断,以便接收下帧图像数据
                EXTI->EMR|=1<<0;
        }        
}

上位机是320×240,stm32读出来数据,字节逐个发送到了串口,就是不知道按照什么次序读,刚开始按照 左-右-上-下 的顺序读取像素点的,发现图像全是条纹,后来改成 上-下-左-右的顺序,就变成现在的 {MOD}块了。应该用什么顺序读取呢?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。