打印

调试OV7670遇问题难解决,求助论坛····

[复制链接]
7059|15
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ldj003|  楼主 | 2012-6-3 00:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
STM32+7670+AL422 基本上按照guanfu大侠的调试出图像来了,但是出现2个问题,求解决。1、摄像头照到光比较强烈的地方就会产生1/3的分块,那个分块就不动了。也就是说只有2/3的LCD屏观看。2、图像偏红,不是整体偏红那种。是有一些红条穿插着整个LCD屏幕,如果我把摄像头的盖子盖上,那些红条依旧在。

求大侠解答下。。。。

图像偏红 难道是杜邦线的原因?


1/3的区域没了·· 读写指针复位的原因? 求解答
沙发
ldj003|  楼主 | 2012-6-3 13:31 | 只看该作者
经过高人的指导 终于知道问题出在哪了。 那就是我配置STM32到FIFO芯片的IO口速度太快,我是用BSRR和BRR寄存器,以为这样可以把帧数提高一点。但是弄巧成拙,在RCLK后面加上适当的延时就可以解决问题了。
希望遇到和我同样问题的人可以解决······

使用特权

评论回复
板凳
Wayner| | 2012-6-3 14:51 | 只看该作者
LZ很幸运,有高人指导。我有问题除了到这里求指导,查看人家的解决办法,只能等、自己试,有的好几年才能搞清楚

使用特权

评论回复
地板
aifeitianai| | 2012-7-17 20:10 | 只看该作者
LZ怎样提高他的帧数的,我的只有5帧,你用的应该是原子哥的开发板,我也是用这个,但帧数太少了,可否参考指导一下 1# ldj003

使用特权

评论回复
5
ldj003|  楼主 | 2012-8-14 22:13 | 只看该作者
好久没上论坛了。。。。貌似STM32可以达到十帧左右吧。。。。 都过断时间我上传代码上来, - - 都在家里度假呢,要去整理下电脑才知道。

使用特权

评论回复
6
ldj003|  楼主 | 2012-8-14 22:19 | 只看该作者
貌似调到这样。。。还有点就是有色的偏差 因为杜邦线传送信号有所干扰和延迟吧。。。所以。。。

使用特权

评论回复
7
ldj003|  楼主 | 2012-8-14 22:29 | 只看该作者
#include <stm32f10x_lib.h>
#include "sys.h"
#include "usart.h"
#include "delay.h"
#include "lcd.h"
#include "sensor.h"
#include "sccb.h"
#include "fifo.h"
#include "exti.h"
u8 tt;
extern unsigned char VsyncCnt;
int main(void)
{
        u16 i = 0;
        u16 j = 0;
        u16 temp = 0;
        u16 data = 0;

        Stm32_Clock_Init(9);//系统时钟设置
        delay_init(72);                //延时初始化
        uart_init(72, 38400);       
       
        fifo_gpio_configuration();



        FIFO_WRST_CLR;                                                //写指针复位,开始往FIFO写入数据               
        delay_us(100);
        FIFO_WRST_SET;

       
        FIFO_RRST_CLR;                                                //读指针复位,开始往FIFO写入数据
       
/*        FIFO_RCLK_CLR;                                //至少需要一个时钟周期的跳变才能复位
        FIFO_RCLK_SET;
        FIFO_RCLK_CLR;                                //至少需要一个时钟周期的跳变才能复位
        FIFO_RCLK_SET;                                                                                                                */
        delay_us(100);       
                                               

        FIFO_RRST_SET;

       
        LCD_Init();
        LCD_Clear(0XBC40) ;
       
        EXTIX_Init();       
        while(1)
        {
                if(Sensor_init())
                {
                        break;
                }
        }
       
        FIFO_OE_CLR;
        LCD_Clear(3354) ;
        while(1)
        {       
                       
                        if(VsyncCnt == 2)
                        {
                                EXTI->IMR &=(0<<2);
                                EXTI->EMR &=(0<<2);
                                LCD_SetWindow(0, 0, X_END, Y_END);
                                LCD_WriteRAM_Prepare();
                       
                                for(i = 0; i < 240; i ++)        //QVGA格式,240行;每行320个点               
                                {
                                        for(j = 0; j < 320; j ++)
                                        {
                                                FIFO_RCLK_CLR;
                                                __nop();
                                                __nop();
                                                __nop();
                                                __nop();
                                                __nop();
                                                        FIFO_RCLK_SET;
                                                __nop();
                                                __nop();
                                                __nop();
                                                __nop();
                                                __nop();

                                                data = FIFO_DATA_PIN;           //先读高位
                                                data <<= 8;                                                                                                               
                                                __nop();
                                                __nop();
                                                __nop();
                                                __nop();
                                                __nop();

                                                FIFO_RCLK_CLR;
                                                __nop();
                                       
                                                __nop();
                                                __nop();
                                                __nop();
                                                __nop();
                                                FIFO_RCLK_SET;
                                                __nop();
                                                __nop();
                                       
                                                __nop();
                                                __nop();
                                                __nop();
                                                temp = FIFO_DATA_PIN;//再读低位       
                                                data |= temp ;
                                                LCD_WR_DATA(data);
                                                __nop();
                                                __nop();
                                                __nop();
                                                __nop();
                                                __nop();               
                                        }
                                }
                                LCD_WR_END();

                                                               
                               
                                FIFO_RRST_CLR;                                //读指针复位
                                Delay(20);                                       
                                FIFO_RCLK_CLR;                                //至少需要一个时钟周期的跳变才能复位
                                Delay(5);
//                                Delay(1);
                                FIFO_RCLK_SET;
                                Delay(5);
//                                Delay(1);
                                FIFO_RCLK_CLR;                                //至少需要一个时钟周期的跳变才能复位
                                Delay(5);
//                                Delay(1);
                                FIFO_RCLK_SET;
                                Delay(5);
//                                Delay(1);

                                FIFO_RRST_SET;
                                Delay(20);


                                FIFO_WEN_SET;                                                                                       
                                Delay(5);                                                //按照手册上说明,复位时WEN要置高,但
                                FIFO_WRST_CLR;
                                Delay(5);
                                                        //写指针复位需要一定的延时
//                                Delay(2);
                                FIFO_WRST_SET;
                                Delay(5);
                                VsyncCnt = 0;                                //开始下一帧数据采集
                                EXTI->IMR|=1<<2;
                                EXTI->EMR|=1<<2;                               
                        }
                }
          
         

}

使用特权

评论回复
8
ldj003|  楼主 | 2012-8-14 22:30 | 只看该作者
//以下这个是寄存器配置



#include <stm32f10x_lib.h>
#include "sensor.h"
#include "sys.h"
#include "delay.h"
#include "fifo.h"
#include "sccb.h"
#include "usart.h"


const unsigned char OV7670_reg[OV7670_REG_NUM][2]=
{         
       //以下为OV7670 QVGA RGB565参数  
        {0x3a, 0x04},
        {0x40, 0xd0},
        {0x12, 0x14},
        {0x32, 0x80},
        {0x17, 0x16},
        {0x18, 0x04},
        {0x19, 0x02},
        {0x1a, 0x7b},//0x7a,
        {0x03, 0x06},//0x0a,
        {0x0c, 0x00},
        {0x3e, 0x00},//
        {0x70, 0x00},//00
        {0x71, 0x00},//0x85测试
        {0x72, 0x11},
        {0x73, 0x00},//
        {0xa2, 0x02},
        {0x11, 0x02},
        {0x7a, 0x20},
        {0x7b, 0x1c},
        {0x7c, 0x28},
        {0x7d, 0x3c},
        {0x7e, 0x55},
        {0x7f, 0x68},
        {0x80, 0x76},
        {0x81, 0x80},
        {0x82, 0x88},
        {0x83, 0x8f},
        {0x84, 0x96},
        {0x85, 0xa3},
        {0x86, 0xaf},
        {0x87, 0xc4},
        {0x88, 0xd7},
        {0x89, 0xe8},
        {0x13, 0xe0},
        {0x00, 0x00},//AGC
        {0x10, 0x00},
        {0x0d, 0x00},
        {0x14, 0x20},//0x38, limit the max gain
        {0xa5, 0x05},
        {0xab, 0x07},
        {0x24, 0x75},
        {0x25, 0x63},
        {0x26, 0xA5},
        {0x9f, 0x78},
        {0xa0, 0x68},
        {0xa1, 0x03},//0x0b,
        {0xa6, 0xdf},//0xd8,
        {0xa7, 0xdf},//0xd8,
        {0xa8, 0xf0},
        {0xa9, 0x90},
        {0xaa, 0x94},
        {0x13, 0xe5},
        {0x0e, 0x61},
        {0x0f, 0x4b},
        {0x16, 0x02},
        {0x1e, 0x37},//0x07,
        {0x21, 0x02},
        {0x22, 0x01},
        {0x29, 0x07},
        {0x33, 0x0b},
        {0x35, 0x0b},
        {0x37, 0x1d},
        {0x38, 0x71},
        {0x39, 0x2a},//
        {0x3c, 0x78},
        {0x4d, 0x40},
        {0x4e, 0x20},
        {0x69, 0x0c},///////////////////////
        {0x6b, 0x80},//PLL
        {0x74, 0x19},
        {0x8d, 0x4f},
        {0x8e, 0x00},
        {0x8f, 0x00},
        {0x90, 0x00},
        {0x91, 0x00},
        {0x92, 0x00},//0x19,//0x66
        {0x96, 0x00},
        {0x9a, 0x80},
        {0xb0, 0x84},
        {0xb1, 0x0c},
        {0xb2, 0x0e},
        {0xb3, 0x82},
        {0xb8, 0x0a},
        {0x43, 0x14},
        {0x44, 0xf0},
        {0x45, 0x34},
        {0x46, 0x58},
        {0x47, 0x28},
        {0x48, 0x3a},
        {0x59, 0x88},
        {0x5a, 0x88},
        {0x5b, 0x44},
        {0x5c, 0x67},
        {0x5d, 0x49},
        {0x5e, 0x0e},
        {0x64, 0x04},
        {0x65, 0x20},
        {0x66, 0x05},
        {0x94, 0x04},
        {0x95, 0x08},
        {0x6c, 0x0a},
        {0x6d, 0x55},
        {0x6e, 0x11},
        {0x6f, 0x9f},//0x9e for advance AWB
        {0x6a, 0x00},
        {0x01, 0x80},
        {0x02, 0x80},
        {0x13, 0xe7},
        {0x15, 0x00},
        {0x4f, 0x80},
        {0x50, 0x80},
        {0x51, 0x00},
        {0x52, 0x22},
        {0x53, 0x5e},
        {0x54, 0x80},
        {0x58, 0x9e},       
        {0x41, 0x08},
        {0x3f, 0x00},
        {0x75, 0x05},
        {0x76, 0xe1},
        {0x4c, 0x00},
        {0x77, 0x10},
        {0x3d, 0xc2},        //0xc0,
        {0x4b, 0x09},
        {0xc9, 0x60},
        {0x41, 0x38},
        {0x56, 0x40},//0x40,  change according to Jim's request       
        {0x34, 0x11},
        {0x3b, 0x02},//0x00,//0x02,
        {0xa4, 0x89},//0x88,
        {0x96, 0x00},
        {0x97, 0x30},
        {0x98, 0x20},
        {0x99, 0x30},
        {0x9a, 0x84},
        {0x9b, 0x29},
        {0x9c, 0x03},
        {0x9d, 0x4c},
        {0x9e, 0x3f},
        {0x78, 0x04},       
        {0x79, 0x01},
        {0xc8, 0xf0},
        {0x79, 0x0f},
        {0xc8, 0x00},
        {0x79, 0x10},
        {0xc8, 0x7e},
        {0x79, 0x0a},
        {0xc8, 0x80},
        {0x79, 0x0b},
        {0xc8, 0x01},
        {0x79, 0x0c},
        {0xc8, 0x0f},
        {0x79, 0x0d},
        {0xc8, 0x20},
        {0x79, 0x09},
        {0xc8, 0x80},
        {0x79, 0x02},
        {0xc8, 0xc0},
        {0x79, 0x03},
        {0xc8, 0x40},
        {0x79, 0x05},
        {0xc8, 0x30},
        {0x79, 0x26},
        {0x09, 0x03},
        {0x55, 0x00},
        {0x56, 0x40},       
        {0x3b, 0x00},//0x82,//0xc0,//0xc2,        //night mode

};



void sensor_xclk_init()
{
        RCC->APB2ENR |=1<<2;
        GPIOA->CRH &=0XFFFFFFF0;
        GPIOA->CRH |=0x0000000b;    // enable PA.8 AF-PP

        /*configurate clock source*/
        RCC->CR |=1<<16;                    // Enable HSE
        while(!((RCC->CR >>17)&&0X01));                  // HSE is ready
        RCC->CFGR |=6<<24;                        // SYSCLK is selected as output
        RCC->CFGR |=7<<18;                        // 9PLL       
        RCC->CFGR |=1<<16;                        // 0:HSI振荡器时钟经2分频后作为PLL输入时钟 1:PREDIV1输出作为PLL输入时钟。

}


///////////////////////////////////////////////////////////////////////////
//功能:写OV7660寄存器
//返回:1-成功        0-失败
//guanfu_wang
unsigned char wr_Sensor_Reg(unsigned char regID, unsigned char regDat)
{
        sccb_start();//发送SCCB 总线开始传输命令
        if(0==sccb_write_byte(0x42))//写地址
        {
                sccb_stop();//发送SCCB 总线停止传输命令
                return(0);//错误返回
        }
        delay_us(100);
        if(0==sccb_write_byte(regID))//寄存器地址
        {
                sccb_stop();
                return(0);
        }
        delay_us(100);
          if(0==sccb_write_byte(regDat))
        {
                  sccb_stop();
                return(0);
        }
        sccb_stop();
          return(0x01);//成功返回
}
////////////////////////////
//功能:读OV7660寄存器
//返回:1-成功        0-失败
//guanfu_wang
unsigned char rd_Sensor_Reg(unsigned char regID, unsigned char *regDat)
{
        //通过写操作设置寄存器地址
        sccb_start();
        if(0==sccb_write_byte(0x42))//写地址
        {
                sccb_stop();//发送SCCB 总线停止传输命令
                return(0);//错误返回
        }
        delay_us(100);
          if(0==sccb_write_byte(regID))//积存器ID
        {
                sccb_stop();//发送SCCB 总线停止传输命令
                return(0);//错误返回
        }
        sccb_stop();//发送SCCB 总线停止传输命令
       
        delay_us(100);
       
        //设置寄存器地址后,才是读
        sccb_start();
        if(0==sccb_write_byte(0x43))//读地址
        {
                sccb_stop();//发送SCCB 总线停止传输命令
                return(0);//错误返回
        }
        delay_us(100);
          *regDat=sccb_read_byte();//返回读到的值
//          noAck();//发送NACK命令
          sccb_stop();//发送SCCB 总线停止传输命令
          return(1);//成功返回
}

使用特权

评论回复
9
ldj003|  楼主 | 2012-8-14 22:32 | 只看该作者
仅供参考。。。。。寒假过后再来论坛提问和回答。。。。这段时间考研去。。

使用特权

评论回复
10
aifeitianai| | 2012-8-15 18:52 | 只看该作者
我现在也可以达到10帧,没办法在提高了 10# ldj003

使用特权

评论回复
11
捡漏王子| | 2012-8-15 21:20 | 只看该作者
观摩一下

使用特权

评论回复
12
b28561173| | 2012-11-10 21:12 | 只看该作者
楼主我也在和你做一样的实验,能把代码发给我吗   276083959@qq.com

使用特权

评论回复
13
cs0617| | 2012-11-11 08:50 | 只看该作者
mark

使用特权

评论回复
14
zdy20123| | 2012-12-30 09:49 | 只看该作者
aifeitianai 发表于 2012-8-15 18:52
我现在也可以达到10帧,没办法在提高了 10# ldj003

你好,你ov7620 ok了吧,现在也在弄这块,能不能把代码给我发一份。我邮箱985592305@qq,谢谢了

使用特权

评论回复
15
广寒宫里一枝梅| | 2015-10-29 19:58 | 只看该作者
求楼主代码

使用特权

评论回复
16
734774645| | 2015-10-29 20:58 | 只看该作者
配置STM32到FIFO芯片的IO口速度太快

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

55

帖子

1

粉丝