OpenEdv-开源电子网

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

求助,OV7670 带FIFO 移植到F407遇到花屏,而且分三个花屏

[复制链接]

12

主题

51

帖子

0

精华

初级会员

Rank: 2

积分
125
金钱
125
注册时间
2015-6-7
在线时间
41 小时
发表于 2016-12-22 21:21:35 | 显示全部楼层 |阅读模式
1金钱
杜邦线已经检查过,连接正确.下面这是程序.[attach]71349[/attach]

最佳答案

查看完整内容[请看2#楼]

问题解决了,屏幕没有设置窗口,也就是上面所说的开窗。设置起始地址和结束地址,因为用的不是原子哥的屏,另外一个商家给的屏,所以初始代码并没有开窗。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

12

主题

51

帖子

0

精华

初级会员

Rank: 2

积分
125
金钱
125
注册时间
2015-6-7
在线时间
41 小时
 楼主| 发表于 2016-12-22 21:21:36 | 显示全部楼层
问题解决了,屏幕没有设置窗口,也就是上面所说的开窗。设置起始地址和结束地址,因为用的不是原子哥的屏,另外一个商家给的屏,所以初始代码并没有开窗。
回复

使用道具 举报

12

主题

51

帖子

0

精华

初级会员

Rank: 2

积分
125
金钱
125
注册时间
2015-6-7
在线时间
41 小时
 楼主| 发表于 2016-12-22 21:22:24 | 显示全部楼层
不知道为什么?发了这么多次都不行....
回复

使用道具 举报

12

主题

51

帖子

0

精华

初级会员

Rank: 2

积分
125
金钱
125
注册时间
2015-6-7
在线时间
41 小时
 楼主| 发表于 2016-12-22 21:23:49 | 显示全部楼层
[mw_shl_code=c,true]#include "stm32f4xx.h"
#include "delay.h"
#include "sys.h"
#include "usart.h"
#include "key.h"
#include "lcd.h"
#include "string.h"
#include "ov7670.h"
#include "exti.h"

#define  FIFO_PREPARE    do{\
                                 OV7670_RRST=0;\
                                                                                                         OV7670_RCK_L;\
                           OV7670_RCK_H;\
                           OV7670_RCK_L;\
                           OV7670_RRST=1;\
                           OV7670_RCK_H;\
                            }while(0)

void camera_refresh(void);
extern u8 ov_sta;        //在exit.c里 面定义
                                                                                                               
int main(void)
{         
        u8 lightmode=0;
//        u8 effect=0,saturation=2,brightness=2,contrast=2;         
  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组2
        delay_init(168);  //初始化延时函数
        uart_init(115200);                //初始化串口波特率为115200
  LCD_Init();
        delay_ms(200);
         LCD_Clear(WHITE);
         delay_ms(1000);
        while(OV7670_Init())//初始化OV7670
        {
                LCD_ShowString(30,230,200,16,16,(u8 *)"OV7670 Error!!");
                delay_ms(200);
            LCD_Fill(30,230,239,246,WHITE);
                delay_ms(200);
        }
        LCD_ShowString(30,230,200,16,16,(u8 *)"OV7670 Init OK");
  delay_ms(1500);                
        OV7670_Light_Mode(lightmode);//设置摄像头灯光的模式
//        OV7670_Color_Saturation(saturation);//色度设置
//        OV7670_Brightness(brightness);//亮度设置
//        OV7670_Contrast(contrast);//对比度设置
//         OV7670_Special_Effects(effect);         //特效设置
       
        EXTI5_Init();
        delay_ms(200);
        OV7670_Window_Set(12,174,240,320);        //设置窗口          
        delay_ms(200);
        OV7670_CS=0;               
        LCD_Clear(BLACK);
        while(1)
        {             
                camera_refresh();//更新显示  
                delay_ms(50);
        }
}

void camera_refresh(void)
{
        u32 j;
        u16 color;         
        if(ov_sta)//有帧中断更新?
        {
                 LCD_WriteRAM_Prepare();     //开始写入GRAM       
                 delay_us(1);
       FIFO_PREPARE;
                for(j=0;j<76800;j++)
                 {
                        OV7670_RCK_L;       
                        color=GPIOA->IDR&0XFF;
                        OV7670_RCK_H;       
                        color<<=8;
                        OV7670_RCK_L;
                        color|=GPIOA->IDR&0XFF;
                        OV7670_RCK_H;
                        LCD->LCD_RAM=color;   
                       
                }                   //画完一帧                                          
                ov_sta=0;                                        //清零帧中断标记            
        }
}        [/mw_shl_code]
回复

使用道具 举报

12

主题

51

帖子

0

精华

初级会员

Rank: 2

积分
125
金钱
125
注册时间
2015-6-7
在线时间
41 小时
 楼主| 发表于 2016-12-22 21:24:01 | 显示全部楼层
我直接上代码算了
回复

使用道具 举报

12

主题

51

帖子

0

精华

初级会员

Rank: 2

积分
125
金钱
125
注册时间
2015-6-7
在线时间
41 小时
 楼主| 发表于 2016-12-22 21:24:33 | 显示全部楼层
[mw_shl_code=c,true]u8 ov_sta;        //帧中断标记
//外部中断5~9服务程序
void EXTI9_5_IRQHandler(void)
{                                
        if(EXTI_GetITStatus(EXTI_Line5)==SET)        //是8线的中断         达到1帧,发生中断
        {      
      if(ov_sta==0)
      {
                                OV7670_WRST=0;        //复位写指针                                   
                                delay_us(1);
                                OV7670_WRST=1;        //结束复位写指针
                                OV7670_WREN=1;        //高电平允许写入 这时候往里面写数据         
      }
                ov_sta++;                //帧中断加1
        }
        EXTI_ClearITPendingBit(EXTI_Line5);  //清除EXTI5线路挂起位                                                  
} [/mw_shl_code]
回复

使用道具 举报

12

主题

51

帖子

0

精华

初级会员

Rank: 2

积分
125
金钱
125
注册时间
2015-6-7
在线时间
41 小时
 楼主| 发表于 2016-12-22 21:24:47 | 显示全部楼层
主要是我发的上面两段代码
回复

使用道具 举报

3

主题

22

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
264
金钱
264
注册时间
2016-12-22
在线时间
39 小时
发表于 2016-12-22 21:43:16 | 显示全部楼层
有2个方向:1 你LCD驱动问题(不太可能,能正常显示吧!);2 sensor
回复

使用道具 举报

3

主题

22

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
264
金钱
264
注册时间
2016-12-22
在线时间
39 小时
发表于 2016-12-22 21:44:13 | 显示全部楼层
2 sensor 的问题,你看下sensor 的信号对吗?同步信号!
天地不仁以万物为刍狗,圣人不仁以百姓为刍狗!http://www.openedv.com/static/image/smiley/default/smile.gif
回复

使用道具 举报

12

主题

51

帖子

0

精华

初级会员

Rank: 2

积分
125
金钱
125
注册时间
2015-6-7
在线时间
41 小时
 楼主| 发表于 2016-12-22 22:10:08 | 显示全部楼层
嗯,谢谢你的回复,我检查了好几遍,线也接了两遍,接错线的问题基本能够可以排查了。
回复

使用道具 举报

35

主题

309

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2641
金钱
2641
注册时间
2016-8-10
在线时间
470 小时
发表于 2016-12-23 10:21:03 | 显示全部楼层
把你摄像头初始化的程序发出来我看看
回复

使用道具 举报

35

主题

309

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2641
金钱
2641
注册时间
2016-8-10
在线时间
470 小时
发表于 2016-12-23 10:22:32 | 显示全部楼层
你LCD 显示好像也没开窗啊
回复

使用道具 举报

35

主题

309

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2641
金钱
2641
注册时间
2016-8-10
在线时间
470 小时
发表于 2016-12-23 10:24:08 | 显示全部楼层
先LCD显示开窗,再来设置图像输出的分辨率
回复

使用道具 举报

12

主题

51

帖子

0

精华

初级会员

Rank: 2

积分
125
金钱
125
注册时间
2015-6-7
在线时间
41 小时
 楼主| 发表于 2016-12-23 12:03:19 | 显示全部楼层
huyang201306 发表于 2016-12-23 10:21
把你摄像头初始化的程序发出来我看看

[mw_shl_code=c,true]#include "sys.h"
#include "ov7670.h"
#include "ov7670cfg.h"  
#include "delay.h"
#include "usart.h"                         
#include "sccb.h"       
#include "exti.h"
            
//初始化OV7670
//返回0:成功
//返回其他值:错误代码
u8 OV7670_Init(void)
{
        u8 temp;
        u16 i=0;          
        //设置IO
        GPIO_InitTypeDef  GPIO_InitStructure;
  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA|RCC_AHB1Periph_GPIOF|RCC_AHB1Periph_GPIOC|RCC_AHB1Periph_GPIOB, ENABLE);//使能GPIOC

               
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;                                 // 端口配置 WEN
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;//普通输入模式
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100M
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//上拉
  GPIO_Init(GPIOB, &GPIO_InitStructure);//初始化GPIOB0
        GPIO_SetBits(GPIOB,GPIO_Pin_0);       

       
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_4;// WRST 写复位  RRST 写复位 RCLK 读时钟
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;//普通输入模式
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100M
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//上拉
  GPIO_Init(GPIOC, &GPIO_InitStructure);//初始化GPIOC0  1
        GPIO_SetBits(GPIOC,GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_4);
       
        GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_10;  //OE输出使能
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;//普通输入模式
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100M
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//上拉
        GPIO_Init(GPIOF, &GPIO_InitStructure);//初始化GPIOC0  
        GPIO_SetBits(GPIOF,GPIO_Pin_10);
       
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;   //PA0~7 输入 上拉  数据输入
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;//普通输入模式
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100M
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN;//上拉
  GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化GPIOE2,3,4

        SCCB_Init();                        //初始化SCCB 的IO口                     
        if(SCCB_WR_Reg(0x12,0x80))return 1;        //复位SCCB          
        delay_ms(50);  
        //读取产品型号
        temp=SCCB_RD_Reg(0x0b);   
        if(temp!=0x73)return 2;  
        temp=SCCB_RD_Reg(0x0a);   
        if(temp!=0x76)return 2;
        //初始化序列          
        for(i=0;i<sizeof(ov7670_init_reg_tbl)/sizeof(ov7670_init_reg_tbl[0]);i++)
        {
                   SCCB_WR_Reg(ov7670_init_reg_tbl[0],ov7670_init_reg_tbl[1]);
  }
           return 0x00;         //ok
} [/mw_shl_code]
我基本是直接从原子哥那里移植过来的,只做了一些IO口的修改。[mw_shl_code=c,true]#ifndef _OV7670_H
#define _OV7670_H
#include "sys.h"
#include "sccb.h"

#define OV7670_VSYNC          PCin(5)                        //帧同步信号检测IO
#define OV7670_WRST                PCout(0)                //写指针复位
#define OV7670_WREN                PBout(0)                //写入FIFO使能
#define OV7670_RCK_H        GPIOC->BSRRH=1<<4//设置读数据时钟高电平
#define OV7670_RCK_L        GPIOC->BSRRL=1<<4        //设置读数据时钟低电平
#define OV7670_RRST                PCout(1)                  //读指针复位
#define OV7670_CS                PFout(10)                  //片选信号(OE)


#define OV7670_DATA   GPIOA->IDR&0x00FF                                          //数据输入端口
/////////////////////////////////////////                                                                        [mw_shl_code=c,true]#ifndef _OV7670CFG_H
#define _OV7670CFG_H
#include "ov7670.h"       
//////////////////////////////////////////////////////////////////////////////////         
//本程序参考自网友guanfu_wang代码。
//ALIENTEK战舰STM32开发板V3
//OV7670 驱动代码          
//正点原子@ALIENTEK
//技术论坛:www.openedv.com
//创建日期:2015/1/18
//版本:V1.0                                                                                                                                          
//////////////////////////////////////////////////////////////////////////////////

//初始化寄存器序列及其对应的值
const u8 ov7670_init_reg_tbl[][2]=
{   
        /*以下为OV7670 QVGA RGB565参数  */
        {0x3a, 0x04},//dummy
        {0x40, 0xd0},//565   
        {0x12, 0x14},//QVGA,RGB输出

        //输出窗口设置
        {0x32, 0x80},//HREF control        bit[2:0] HREF start 3 LSB         bit[5:3] HSTOP HREF end 3LSB
        {0x17, 0x16},//HSTART start high 8-bit MSB         
        {0x18, 0x04},//5 HSTOP end high 8-bit
        {0x19, 0x02},
        {0x1a, 0x7b},//0x7a,
        {0x03, 0x06},//0x0a,帧竖直方向控制

        {0x0c, 0x00},
        {0x15, 0x00},//0x00
        {0x3e, 0x00},//10
        {0x70, 0x3a},
        {0x71, 0x35},
        {0x72, 0x11},
        {0x73, 0x00},//

        {0xa2, 0x02},//15
        {0x11, 0x81},//时钟分频设置,0,不分频.
        {0x7a, 0x20},
        {0x7b, 0x1c},
        {0x7c, 0x28},

        {0x7d, 0x3c},//20
        {0x7e, 0x55},
        {0x7f, 0x68},
        {0x80, 0x76},
        {0x81, 0x80},

        {0x82, 0x88},
        {0x83, 0x8f},
        {0x84, 0x96},
        {0x85, 0xa3},
        {0x86, 0xaf},

        {0x87, 0xc4},//30
        {0x88, 0xd7},
        {0x89, 0xe8},
        {0x13, 0xe0},
        {0x00, 0x00},//AGC

        {0x10, 0x00},
        {0x0d, 0x00},//全窗口, 位[5:4]: 01 半窗口,10 1/4窗口,11 1/4窗口
        {0x14, 0x28},//0x38, limit the max gain
        {0xa5, 0x05},
        {0xab, 0x07},

        {0x24, 0x75},//40
        {0x25, 0x63},
        {0x26, 0xA5},
        {0x9f, 0x78},
        {0xa0, 0x68},

        {0xa1, 0x03},//0x0b,
        {0xa6, 0xdf},//0xd8,
        {0xa7, 0xdf},//0xd8,
        {0xa8, 0xf0},
        {0xa9, 0x90},

        {0xaa, 0x94},//50
        {0x13, 0xe5},
        {0x0e, 0x61},
        {0x0f, 0x4b},
        {0x16, 0x02},

        {0x1e, 0x27},//图像输出镜像控制.0x07
        {0x21, 0x02},
        {0x22, 0x91},
        {0x29, 0x07},
        {0x33, 0x0b},

        {0x35, 0x0b},//60
        {0x37, 0x1d},
        {0x38, 0x71},
        {0x39, 0x2a},
        {0x3c, 0x78},

        {0x4d, 0x40},
        {0x4e, 0x20},
        {0x69, 0x00},
        {0x6b, 0x40},//PLL*4=48Mhz
        {0x74, 0x19},
        {0x8d, 0x4f},

        {0x8e, 0x00},//70
        {0x8f, 0x00},
        {0x90, 0x00},
        {0x91, 0x00},
        {0x92, 0x00},//0x19,//0x66

        {0x96, 0x00},
        {0x9a, 0x80},
        {0xb0, 0x84},
        {0xb1, 0x0c},
        {0xb2, 0x0e},

        {0xb3, 0x82},//80
        {0xb8, 0x0a},
        {0x43, 0x14},
        {0x44, 0xf0},
        {0x45, 0x34},

        {0x46, 0x58},
        {0x47, 0x28},
        {0x48, 0x3a},
        {0x59, 0x88},
        {0x5a, 0x88},

        {0x5b, 0x44},//90
        {0x5c, 0x67},
        {0x5d, 0x49},
        {0x5e, 0x0e},
        {0x64, 0x04},
        {0x65, 0x20},

        {0x66, 0x05},
        {0x94, 0x04},
        {0x95, 0x08},
        {0x6c, 0x0a},
        {0x6d, 0x55},


        {0x4f, 0x80},
        {0x50, 0x80},
        {0x51, 0x00},
        {0x52, 0x22},
        {0x53, 0x5e},
        {0x54, 0x80},

        //{0x54, 0x40},//110


        {0x09, 0x03},//驱动能力最大

        {0x6e, 0x11},//100
        {0x6f, 0x9f},//0x9e for advance AWB
        {0x55, 0x00},//亮度
        {0x56, 0x40},//对比度 0x40
        {0x57, 0x40},//0x40,  change according to Jim's request
///////////////////////////////////////////////////////////////////////
//以下部分代码由开源电子网网友:duanzhang512 提出
//添加此部分代码将可以获得更好的成像效果,但是最下面一行会有蓝色的抖动.
//如不想要,可以屏蔽此部分代码.然后将:OV7670_Window_Set(12,176,240,320);
//改为:OV7670_Window_Set(12,174,240,320);,即可去掉最下一行的蓝色抖动
        {0x6a, 0x40},
        {0x01, 0x40},
        {0x02, 0x40},
        {0x13, 0xe7},
        {0x15, 0x00},  
       
               
        {0x58, 0x9e},
       
        {0x41, 0x08},
        {0x3f, 0x00},
        {0x75, 0x05},
        {0x76, 0xe1},
        {0x4c, 0x00},
        {0x77, 0x01},
        {0x3d, 0xc2},       
        {0x4b, 0x09},
        {0xc9, 0x60},
        {0x41, 0x38},
       
        {0x34, 0x11},
        {0x3b, 0x02},

        {0xa4, 0x89},
        {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, 0x00},
///////////////////////////////////////////////////////////////////////
       
};

#endif[/mw_shl_code][/mw_shl_code]
回复

使用道具 举报

12

主题

51

帖子

0

精华

初级会员

Rank: 2

积分
125
金钱
125
注册时间
2015-6-7
在线时间
41 小时
 楼主| 发表于 2016-12-23 12:04:15 | 显示全部楼层
huyang201306 发表于 2016-12-23 10:22
你LCD 显示好像也没开窗啊

谢谢你回复我啊,请问开窗应该是直接设置起始坐标和结束坐标,是吗?
回复

使用道具 举报

12

主题

51

帖子

0

精华

初级会员

Rank: 2

积分
125
金钱
125
注册时间
2015-6-7
在线时间
41 小时
 楼主| 发表于 2016-12-23 12:05:20 | 显示全部楼层
huyang201306 发表于 2016-12-23 10:24
先LCD显示开窗,再来设置图像输出的分辨率

嗯,我仔细看下程序
回复

使用道具 举报

35

主题

309

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2641
金钱
2641
注册时间
2016-8-10
在线时间
470 小时
发表于 2016-12-23 12:05:26 | 显示全部楼层
352308347@qq.co 发表于 2016-12-23 12:04
谢谢你回复我啊,请问开窗应该是直接设置起始坐标和结束坐标,是吗?

你go to进那个函数看他是咋说的嘛
回复

使用道具 举报

35

主题

309

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2641
金钱
2641
注册时间
2016-8-10
在线时间
470 小时
发表于 2016-12-23 12:07:10 | 显示全部楼层
我以前也弄了一个月的摄像头,做颜色识别和跟踪
回复

使用道具 举报

12

主题

51

帖子

0

精华

初级会员

Rank: 2

积分
125
金钱
125
注册时间
2015-6-7
在线时间
41 小时
 楼主| 发表于 2016-12-23 14:42:48 | 显示全部楼层
想回复图片你看看,不知道怎么回复,我能加下你QQ吗.
回复

使用道具 举报

34

主题

127

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1069
金钱
1069
注册时间
2012-1-7
在线时间
157 小时
发表于 2017-3-14 13:44:20 | 显示全部楼层
楼主发下代码看看OV7670的管脚配置
回复

使用道具 举报

12

主题

51

帖子

0

精华

初级会员

Rank: 2

积分
125
金钱
125
注册时间
2015-6-7
在线时间
41 小时
 楼主| 发表于 2017-3-17 22:58:43 | 显示全部楼层
我的问题已经解决了,你还要看吗?
回复

使用道具 举报

0

主题

6

帖子

0

精华

新手入门

积分
16
金钱
16
注册时间
2017-3-27
在线时间
2 小时
发表于 2017-3-27 07:40:44 | 显示全部楼层
能把代码分享一下吗
回复

使用道具 举报

0

主题

6

帖子

0

精华

新手入门

积分
16
金钱
16
注册时间
2017-3-27
在线时间
2 小时
发表于 2017-3-27 23:01:54 来自手机 | 显示全部楼层
352308347@qq.co 发表于 2016-12-23 14:42
想回复图片你看看,不知道怎么回复,我能加下你QQ吗.

能把代碼分享一下嗎
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-8-22 22:06

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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