OpenEdv-开源电子网

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

OV2640 rbg565

[复制链接]

1

主题

7

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2015-7-11
在线时间
4 小时
发表于 2016-6-3 16:23:11 | 显示全部楼层 |阅读模式
1金钱
请问使用OV2640的RBG565采集的图像在LCD上显示如图所示,请问是什么原因呀,代码是参照原子示例代码写的;

QQ图片20160603161446.jpg

最佳答案

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

看你的图片,图像基本出来了,好像数据没有对其似的。你再仔细检查下各种连线是否有链接错误的。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

0

主题

71

帖子

0

精华

高级会员

Rank: 4

积分
758
金钱
758
注册时间
2015-8-25
在线时间
165 小时
发表于 2016-6-3 16:23:12 | 显示全部楼层
maomaohuyue 发表于 2016-6-5 14:49
SCCB读摄像读ID是正确的,我感觉应该是DCMI那边有点问题

看你的图片,图像基本出来了,好像数据没有对其似的。你再仔细检查下各种连线是否有链接错误的。
回复

使用道具 举报

0

主题

71

帖子

0

精华

高级会员

Rank: 4

积分
758
金钱
758
注册时间
2015-8-25
在线时间
165 小时
发表于 2016-6-3 19:05:22 | 显示全部楼层
最好是把你的代码贴出来,看看给你找下原因,还有你的开发板是?
回复

使用道具 举报

1

主题

7

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2015-7-11
在线时间
4 小时
 楼主| 发表于 2016-6-3 19:52:47 | 显示全部楼层
本帖最后由 maomaohuyue 于 2016-6-3 21:03 编辑
phoenix 发表于 2016-6-3 19:05
最好是把你的代码贴出来,看看给你找下原因,还有你的开发板是?

我的板子是STM32F429;OV2640的代码和原子的一样
[mw_shl_code=c,true] #include "dcmi.h"
#include "lcd.h"
#include "led.h"

//DCMI中断服务函数
void DCMI_IRQHandler(void)
{
        if(DCMI_GetITStatus(DCMI_IT_FRAME)==SET)//捕获到一帧图像
        {
   
                DCMI_ClearITPendingBit(DCMI_IT_FRAME);//清除帧中断
                LED0=!LED0;
      
        }
}

DCMI_InitTypeDef DCMI_InitStructure;
//DCMI初始化
//引脚配置:PC6--DCMI_D0; PC7--DCMI_D1; PC8--DCMI_D2; PC9--DCMI_D3; PC11--DCMI_D4
//PD3--DCMI_D5; PB8--DCMI_D6; PB9-- DCMI_D7;
//PA6--PCLK; PA4--HSYNC; PB7--VSYNC;
//PH5--I2C_SDA; PH4--I2C_SCL
void My_DCMI_Init(void)
{
                GPIO_InitTypeDef  GPIO_InitStructure;
                NVIC_InitTypeDef NVIC_InitStructure;

               
                RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA|RCC_AHB1Periph_GPIOB|RCC_AHB1Periph_GPIOC|RCC_AHB1Periph_GPIOD, ENABLE);//使能GPIOA B C E 时钟
                RCC_AHB2PeriphClockCmd(RCC_AHB2Periph_DCMI,ENABLE);

                GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4|GPIO_Pin_6;//PA4/6   复用功能输出
                GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; //复用功能输出
                GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//推挽输出
                GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100MHz
                GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//上拉
                GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化
               
                GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9;// //PB8/7/9   复用功能输出
                GPIO_Init(GPIOB, &GPIO_InitStructure);//初始化
               
                GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_11;//PC6/7/8/9/11 复用功能输出
                GPIO_Init(GPIOC, &GPIO_InitStructure);//初始化        

                GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;//PD3 复用功能输出
                GPIO_Init(GPIOD, &GPIO_InitStructure);//初始化        

                GPIO_PinAFConfig(GPIOA,GPIO_PinSource4,GPIO_AF_DCMI); //PA4,AF13  DCMI_HSYNC
                GPIO_PinAFConfig(GPIOA,GPIO_PinSource6,GPIO_AF_DCMI); //PA6,AF13  DCMI_PCLK  
                GPIO_PinAFConfig(GPIOB,GPIO_PinSource7,GPIO_AF_DCMI); //PB7,AF13  DCMI_VSYNC
                GPIO_PinAFConfig(GPIOC,GPIO_PinSource6,GPIO_AF_DCMI); //PC6,AF13  DCMI_D0  
                GPIO_PinAFConfig(GPIOC,GPIO_PinSource7,GPIO_AF_DCMI); //PC7,AF13  DCMI_D1
                GPIO_PinAFConfig(GPIOC,GPIO_PinSource8,GPIO_AF_DCMI); //PC8,AF13  DCMI_D2
                GPIO_PinAFConfig(GPIOC,GPIO_PinSource9,GPIO_AF_DCMI); //PC9,AF13  DCMI_D3
                GPIO_PinAFConfig(GPIOC,GPIO_PinSource11,GPIO_AF_DCMI);//PC11,AF13 DCMI_D4
                GPIO_PinAFConfig(GPIOD,GPIO_PinSource3,GPIO_AF_DCMI); //PD3,AF13  DCMI_D5
                GPIO_PinAFConfig(GPIOB,GPIO_PinSource8,GPIO_AF_DCMI); //PB8,AF13  DCMI_D6
                GPIO_PinAFConfig(GPIOB,GPIO_PinSource9,GPIO_AF_DCMI); //PB9,AF13  DCMI_D7

               
                DCMI_DeInit();//清除原来的设置
         
         
                DCMI_InitStructure.DCMI_CaptureMode=DCMI_CaptureMode_Continuous;//连续模式
                DCMI_InitStructure.DCMI_CaptureRate=DCMI_CaptureRate_All_Frame;//全帧捕获
                DCMI_InitStructure.DCMI_ExtendedDataMode= DCMI_ExtendedDataMode_8b;//8位数据格式  
                DCMI_InitStructure.DCMI_HSPolarity= DCMI_HSPolarity_Low;//HSYNC 低电平有效
                DCMI_InitStructure.DCMI_PCKPolarity= DCMI_PCKPolarity_Rising;//PCLK 上升沿有效
                DCMI_InitStructure.DCMI_SynchroMode= DCMI_SynchroMode_Hardware;//硬件同步HSYNC,VSYNC
                DCMI_InitStructure.DCMI_VSPolarity=DCMI_VSPolarity_Low;//VSYNC 低电平有效
                DCMI_Init(&DCMI_InitStructure);

                DCMI_ITConfig(DCMI_IT_FRAME,ENABLE);//开启帧中断
               
                DCMI_Cmd(ENABLE);        //DCMI使能

                NVIC_InitStructure.NVIC_IRQChannel = DCMI_IRQn;
                NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0;//抢占优先级1
                NVIC_InitStructure.NVIC_IRQChannelSubPriority =0;                //子优先级3
                NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;                        //IRQ通道使能
                NVIC_Init(&NVIC_InitStructure);        //根据指定的参数初始化VIC寄存器
}

//DCMI DMA配置
//DMA_Memory0BaseAddr:存储器地址    将要存储摄像头数据的内存地址(也可以是外设地址)
//DMA_BufferSize:存储器长度    0~65535
//DMA_MemoryDataSize:存储器位宽  
//DMA_MemoryDataSize:存储器位宽    @defgroup DMA_memory_data_size MA_MemoryDataSize_Byte/DMA_MemoryDataSize_HalfWord/DMA_MemoryDataSize_Word
//DMA_MemoryInc:存储器增长方式  @defgroup DMA_memory_incremented_mode  /** @defgroup DMA_memory_incremented_mode : DMA_MemoryInc_Enable/DMA_MemoryInc_Disable
void DCMI_DMA_Init(u32 DMA_Memory0BaseAddr,u16 DMA_BufferSize,u32 DMA_MemoryDataSize,u32 DMA_MemoryInc)
{
                DMA_InitTypeDef  DMA_InitStructure;
        
                RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA2,ENABLE);//DMA2时钟使能
                DMA_DeInit(DMA2_Stream1);
                while (DMA_GetCmdStatus(DMA2_Stream1) != DISABLE){}//等待DMA2_Stream1可配置
               
                /* 配置 DMA Stream */
                DMA_InitStructure.DMA_Channel = DMA_Channel_1;  //通道1 DCMI通道
                DMA_InitStructure.DMA_PeripheralBaseAddr = (u32)&DCMI->DR;//外设地址为CMI->DR
                DMA_InitStructure.DMA_Memory0BaseAddr = DMA_Memory0BaseAddr;//DMA 存储器0地址
                DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralToMemory;//外设到存储器模式
                DMA_InitStructure.DMA_BufferSize = DMA_BufferSize;//数据传输量
                DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;//外设非增量模式
                DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc;//存储器增量模式
                DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Word;//外设数据长度:32位
                DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize;//存储器数据长度
                DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;// 使用循环模式
                DMA_InitStructure.DMA_Priority = DMA_Priority_High;//高优先级
                DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Enable; //FIFO模式        
                DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_Full;//使用全FIFO
                DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single;//外设突发单次传输
                DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single;//存储器突发单次传输
                DMA_Init(DMA2_Stream1, &DMA_InitStructure);//初始化DMA Stream
}

//DCMI,启动传输
void DCMI_Start(void)
{
                LCD_SetCursor(0,0);  
                LCD_WriteRAM_Prepare();                //开始写入GRAM
                DMA_Cmd(DMA2_Stream1, ENABLE);//开启DMA2,Stream1
                DCMI_CaptureCmd(ENABLE);//DCMI捕获使能  
}

//DCMI,关闭传输
void DCMI_Stop(void)
{
  DCMI_CaptureCmd(DISABLE);//DCMI捕获使关闭        
        
        while(DCMI->CR&0X01);                //等待传输结束
                 
        DMA_Cmd(DMA2_Stream1,DISABLE);//关闭DMA2,Stream1
}
[/mw_shl_code]

[mw_shl_code=applescript,true]#include "ov2640.h"
#include "dcmi.h"
#include "sccb.h"
#include "ov2640cfg.h"
#include "delay.h"


//初始化OV2640
//配置完以后,默认输出是1600*1200尺寸的图片!!
//返回值:0,成功
//    其他,错误代码
u8 OV2640_Init(void)
{
                u16 i =0;
                u16 reg;
        
                SCCB_Init();                        //初始化SCCB 的IO口         
                SCCB_WR_Reg(OV2640_DSP_RA_DLMT, 0x01);        //操作sensor寄存器
                SCCB_WR_Reg(OV2640_SENSOR_COM7, 0x80);        //软复位OV2640
                delay_ms(50);
                reg=SCCB_RD_Reg(OV2640_SENSOR_MIDH);        //读取厂家ID 高八位
                reg<<=8;
                reg|=SCCB_RD_Reg(OV2640_SENSOR_MIDL);        //读取厂家ID 低八位
                if(reg != OV2640_MID)
                                return 1;
                         //初始化 OV2640,采用SXGA分辨率(1600*1200)  
                for(i=0;i<sizeof(ov2640_uxga_init_reg_tbl)/2;i++)
                {
                                SCCB_WR_Reg(ov2640_uxga_init_reg_tbl[0],ov2640_uxga_init_reg_tbl[1]);
                }
                        return 0x00;         //ok
}

//OV2640切换为JPEG模式
void OV2640_JPEG_Mode(void)
{
        u16 i=0;
        //设置:YUV422格式
        for(i=0;i<(sizeof(ov2640_yuv422_reg_tbl)/2);i++)
        {
                SCCB_WR_Reg(ov2640_yuv422_reg_tbl[0],ov2640_yuv422_reg_tbl[1]);
        }
        //设置:输出JPEG数据
        for(i=0;i<(sizeof(ov2640_jpeg_reg_tbl)/2);i++)
        {
                SCCB_WR_Reg(ov2640_jpeg_reg_tbl[0],ov2640_jpeg_reg_tbl[1]);  
        }  
}
//OV2640切换为RGB565模式
void OV2640_RGB565_Mode(void)
{
        u16 i=0;
        //设置:RGB565输出
        for(i=0;i<(sizeof(ov2640_rgb565_reg_tbl)/2);i++)
        {
                SCCB_WR_Reg(ov2640_rgb565_reg_tbl[0],ov2640_rgb565_reg_tbl[1]);
        }
}
//自动曝光设置参数表,支持5个等级
const static u8 OV2640_AUTOEXPOSURE_LEVEL[5][8]=
{
        {
                0xFF,0x01,
                0x24,0x20,
                0x25,0x18,
                0x26,0x60,
        },
        {
                0xFF,0x01,
                0x24,0x34,
                0x25,0x1c,
                0x26,0x00,
        },
        {
                0xFF,0x01,        
                0x24,0x3e,        
                0x25,0x38,
                0x26,0x81,
        },
        {
                0xFF,0x01,
                0x24,0x48,
                0x25,0x40,
                0x26,0x81,
        },
        {
                0xFF,0x01,        
                0x24,0x58,        
                0x25,0x50,        
                0x26,0x92,        
        },
};
//OV2640自动曝光等级设置
//level:0~4
void OV2640_Auto_Exposure(u8 level)
{  
        u8 i;
        u8 *p=(u8*)OV2640_AUTOEXPOSURE_LEVEL[level];
        for(i=0;i<4;i++)
        {
                SCCB_WR_Reg(p[i*2],p[i*2+1]);
        }
}  
//白平衡设置
//0:自动
//1:太阳sunny
//2,阴天cloudy
//3,办公室office
//4,家里home
void OV2640_Light_Mode(u8 mode)
{
        u8 regccval=0X5E;//Sunny
        u8 regcdval=0X41;
        u8 regceval=0X54;
        switch(mode)
        {
                case 0://auto
                        SCCB_WR_Reg(0XFF,0X00);         
                        SCCB_WR_Reg(0XC7,0X10);//AWB ON
                        return;         
                case 2://cloudy
                        regccval=0X65;
                        regcdval=0X41;
                        regceval=0X4F;
                        break;        
                case 3://office
                        regccval=0X52;
                        regcdval=0X41;
                        regceval=0X66;
                        break;        
                case 4://home
                        regccval=0X42;
                        regcdval=0X3F;
                        regceval=0X71;
                        break;        
        }
        SCCB_WR_Reg(0XFF,0X00);         
        SCCB_WR_Reg(0XC7,0X40);        //AWB OFF
        SCCB_WR_Reg(0XCC,regccval);
        SCCB_WR_Reg(0XCD,regcdval);
        SCCB_WR_Reg(0XCE,regceval);  
}
//色度设置
//0:-2
//1:-1
//2,0
//3,+1
//4,+2
void OV2640_Color_Saturation(u8 sat)
{
        u8 reg7dval=((sat+2)<<4)|0X08;
        SCCB_WR_Reg(0XFF,0X00);               
        SCCB_WR_Reg(0X7C,0X00);               
        SCCB_WR_Reg(0X7D,0X02);                                
        SCCB_WR_Reg(0X7C,0X03);                        
        SCCB_WR_Reg(0X7D,reg7dval);                        
        SCCB_WR_Reg(0X7D,reg7dval);                 
}
//亮度设置
//00X00)-2
//10X10)-1
//2,(0X20) 0
//3,(0X30)+1
//4,(0X40)+2
void OV2640_Brightness(u8 bright)
{
  SCCB_WR_Reg(0xff, 0x00);
  SCCB_WR_Reg(0x7c, 0x00);
  SCCB_WR_Reg(0x7d, 0x04);
  SCCB_WR_Reg(0x7c, 0x09);
  SCCB_WR_Reg(0x7d, bright<<4);
  SCCB_WR_Reg(0x7d, 0x00);
}
//对比度设置
//0:-2
//1:-1
//2,0
//3,+1
//4,+2
void OV2640_Contrast(u8 contrast)
{
        u8 reg7d0val=0X20;//默认为普通模式
        u8 reg7d1val=0X20;
          switch(contrast)
        {
                case 0://-2
                        reg7d0val=0X18;                  
                        reg7d1val=0X34;                  
                        break;        
                case 1://-1
                        reg7d0val=0X1C;                  
                        reg7d1val=0X2A;                  
                        break;        
                case 3://1
                        reg7d0val=0X24;                  
                        reg7d1val=0X16;                  
                        break;        
                case 4://2
                        reg7d0val=0X28;                  
                        reg7d1val=0X0C;                  
                        break;        
        }
        SCCB_WR_Reg(0xff,0x00);
        SCCB_WR_Reg(0x7c,0x00);
        SCCB_WR_Reg(0x7d,0x04);
        SCCB_WR_Reg(0x7c,0x07);
        SCCB_WR_Reg(0x7d,0x20);
        SCCB_WR_Reg(0x7d,reg7d0val);
        SCCB_WR_Reg(0x7d,reg7d1val);
        SCCB_WR_Reg(0x7d,0x06);
}
//特效设置
//0:普通模式   
//1,负片
//2,黑白   
//3,偏红色
//4,偏绿色
//5,偏蓝色
//6,复古            
void OV2640_Special_Effects(u8 eft)
{
        u8 reg7d0val=0X00;//默认为普通模式
        u8 reg7d1val=0X80;
        u8 reg7d2val=0X80;
        switch(eft)
        {
                case 1://负片
                        reg7d0val=0X40;
                        break;        
                case 2://黑白
                        reg7d0val=0X18;
                        break;         
                case 3://偏红色
                        reg7d0val=0X18;
                        reg7d1val=0X40;
                        reg7d2val=0XC0;
                        break;        
                case 4://偏绿色
                        reg7d0val=0X18;
                        reg7d1val=0X40;
                        reg7d2val=0X40;
                        break;        
                case 5://偏蓝色
                        reg7d0val=0X18;
                        reg7d1val=0XA0;
                        reg7d2val=0X40;
                        break;        
                case 6://复古
                        reg7d0val=0X18;
                        reg7d1val=0X40;
                        reg7d2val=0XA6;
                        break;         
        }
        SCCB_WR_Reg(0xff,0x00);
        SCCB_WR_Reg(0x7c,0x00);
        SCCB_WR_Reg(0x7d,reg7d0val);
        SCCB_WR_Reg(0x7c,0x05);
        SCCB_WR_Reg(0x7d,reg7d1val);
        SCCB_WR_Reg(0x7d,reg7d2val);
}
//彩条测试
//sw:0,关闭彩条
//   1,开启彩条(注意OV2640的彩条是叠加在图像上面的)
void OV2640_Color_Bar(u8 sw)
{
        u8 reg;
        SCCB_WR_Reg(0XFF,0X01);
        reg=SCCB_RD_Reg(0X12);
        reg&=~(1<<1);
        if(sw)reg|=1<<1;
        SCCB_WR_Reg(0X12,reg);
}

//设置传感器输出窗口
//sx,sy,起始地址
//width,height:宽度(对应:horizontal)和高度(对应:vertical)
void OV2640_Window_Set(u16 sx,u16 sy,u16 width,u16 height)
{
        u16 endx;
        u16 endy;
        u8 temp;
        endx=sx+width/2;        //V*2
         endy=sy+height/2;
        
        SCCB_WR_Reg(0XFF,0X01);                        
        temp=SCCB_RD_Reg(0X03);                                //读取Vref之前的值
        temp&=0XF0;
        temp|=((endy&0X03)<<2)|(sy&0X03);
        SCCB_WR_Reg(0X03,temp);                                //设置Vref的start和end的最低2位
        SCCB_WR_Reg(0X19,sy>>2);                        //设置Vref的start高8位
        SCCB_WR_Reg(0X1A,endy>>2);                        //设置Vref的end的高8位
        
        temp=SCCB_RD_Reg(0X32);                                //读取Href之前的值
        temp&=0XC0;
        temp|=((endx&0X07)<<3)|(sx&0X07);
        SCCB_WR_Reg(0X32,temp);                                //设置Href的start和end的最低3位
        SCCB_WR_Reg(0X17,sx>>3);                        //设置Href的start高8位
        SCCB_WR_Reg(0X18,endx>>3);                        //设置Href的end的高8位
}
//设置图像输出大小
//OV2640输出图像的大小(分辨率),完全由该函数确定
//width,height:宽度(对应:horizontal)和高度(对应:vertical),width和height必须是4的倍数
//返回值:0,设置成功
//    其他,设置失败
u8 OV2640_OutSize_Set(u16 width,u16 height)
{
        u16 outh;
        u16 outw;
        u8 temp;
        if(width%4)return 1;
        if(height%4)return 2;
        outw=width/4;
        outh=height/4;
        SCCB_WR_Reg(0XFF,0X00);        
        SCCB_WR_Reg(0XE0,0X04);                        
        SCCB_WR_Reg(0X5A,outw&0XFF);                //设置OUTW的低八位
        SCCB_WR_Reg(0X5B,outh&0XFF);                //设置OUTH的低八位
        temp=(outw>>8)&0X03;
        temp|=(outh>>6)&0X04;
        SCCB_WR_Reg(0X5C,temp);                                //设置OUTH/OUTW的高位
        SCCB_WR_Reg(0XE0,0X00);        
        return 0;
}
//设置图像开窗大小
//由:OV2640_ImageSize_Set确定传感器输出分辨率从大小.
//该函数则在这个范围上面进行开窗,用于OV2640_OutSize_Set的输出
//注意:本函数的宽度和高度,必须大于等于OV2640_OutSize_Set函数的宽度和高度
//     OV2640_OutSize_Set设置的宽度和高度,根据本函数设置的宽度和高度,由DSP
//     自动计算缩放比例,输出给外部设备.
//width,height:宽度(对应:horizontal)和高度(对应:vertical),width和height必须是4的倍数
//返回值:0,设置成功
//    其他,设置失败
u8 OV2640_ImageWin_Set(u16 offx,u16 offy,u16 width,u16 height)
{
        u16 hsize;
        u16 vsize;
        u8 temp;
        if(width%4)return 1;
        if(height%4)return 2;
        hsize=width/4;
        vsize=height/4;
        SCCB_WR_Reg(0XFF,0X00);        
        SCCB_WR_Reg(0XE0,0X04);                                       
        SCCB_WR_Reg(0X51,hsize&0XFF);                //设置H_SIZE的低八位
        SCCB_WR_Reg(0X52,vsize&0XFF);                //设置V_SIZE的低八位
        SCCB_WR_Reg(0X53,offx&0XFF);                //设置offx的低八位
        SCCB_WR_Reg(0X54,offy&0XFF);                //设置offy的低八位
        temp=(vsize>>1)&0X80;
        temp|=(offy>>4)&0X70;
        temp|=(hsize>>5)&0X08;
        temp|=(offx>>8)&0X07;
        SCCB_WR_Reg(0X55,temp);                                //设置H_SIZE/V_SIZE/OFFX,OFFY的高位
        SCCB_WR_Reg(0X57,(hsize>>2)&0X80);        //设置H_SIZE/V_SIZE/OFFX,OFFY的高位
        SCCB_WR_Reg(0XE0,0X00);        
        return 0;
}
//该函数设置图像尺寸大小,也就是所选格式的输出分辨率
//UXGA:1600*1200,SVGA:800*600,CIF:352*288
//width,height:图像宽度和图像高度
//返回值:0,设置成功
//    其他,设置失败
u8 OV2640_ImageSize_Set(u16 width,u16 height)
{
        u8 temp;
        SCCB_WR_Reg(0XFF,0X00);                        
        SCCB_WR_Reg(0XE0,0X04);                        
        SCCB_WR_Reg(0XC0,(width)>>3&0XFF);                //设置HSIZE的10:3位
        SCCB_WR_Reg(0XC1,(height)>>3&0XFF);                //设置VSIZE的10:3位
        temp=(width&0X07)<<3;
        temp|=height&0X07;
        temp|=(width>>4)&0X80;
        SCCB_WR_Reg(0X8C,temp);        
        SCCB_WR_Reg(0XE0,0X00);                                 
        return 0;
}[/mw_shl_code]



回复

使用道具 举报

0

主题

71

帖子

0

精华

高级会员

Rank: 4

积分
758
金钱
758
注册时间
2015-8-25
在线时间
165 小时
发表于 2016-6-3 20:07:21 | 显示全部楼层
本帖最后由 phoenix 于 2016-6-3 20:09 编辑
maomaohuyue 发表于 2016-6-3 19:52
我的板子是STM32F429;OV2640的代码和原子的一样
[mw_shl_code=c,true]#include "dcmi.h"
#include "l ...
怎么很多乱码啊,贴之前用"记事本‘过滤下应该好些。
只有这个DCMI的代码不够啊。

还有 OV2640的代码,还有主函数的代码?
回复

使用道具 举报

1

主题

7

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2015-7-11
在线时间
4 小时
 楼主| 发表于 2016-6-3 20:21:06 | 显示全部楼层
phoenix 发表于 2016-6-3 20:07
怎么很多乱码啊,贴之前用"记事本‘过滤下应该好些。
只有这个DCMI的代码不够啊。

main函数:


[mw_shl_code=c,true]int main(void)
{
        delay_init(168);  //初始化延时函数
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组2
        LED_Init();                                        //初始化LED
        LCD_Init();                                        //LCD初始化  

                LCD_ShowString(30,50,200,16,16,"Explorer STM32F4");       
                LCD_ShowString(30,70,200,16,16,"OV2640 TEST");       
                LCD_ShowString(30,90,200,16,16,"ATOM@ALIENTEK");
                LCD_ShowString(30,110,200,16,16,"2014/5/14");           
                 
               
        while(OV2640_Init())
        {
                        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");         
  delay_ms(1000);       
        LCD_Clear(WHITE);
        OV2640_RGB565_Mode();
        My_DCMI_Init();                        //DCMI配置
        DCMI_DMA_Init((u32)&LCD->LCD_RAM,1,DMA_MemoryDataSize_HalfWord,DMA_MemoryInc_Disable);//DCMI DMA配置
        OV2640_OutSize_Set(lcddev.width,lcddev.height);
        delay_ms(200);
        DCMI_Start();                 //启动传输
        while(1);

}                [/mw_shl_code]
回复

使用道具 举报

0

主题

71

帖子

0

精华

高级会员

Rank: 4

积分
758
金钱
758
注册时间
2015-8-25
在线时间
165 小时
发表于 2016-6-3 21:00:07 | 显示全部楼层
DCMI_D5 脚

初始化时怎么给屏蔽了,特意的,还是?
回复

使用道具 举报

1

主题

7

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2015-7-11
在线时间
4 小时
 楼主| 发表于 2016-6-3 21:02:02 | 显示全部楼层
phoenix 发表于 2016-6-3 21:00
DCMI_D5 脚

初始化时怎么给屏蔽了,特意的,还是?

哦哦,那是我刚刚想测试一下是不是引脚配置的问题,我忘记改回来了
回复

使用道具 举报

0

主题

71

帖子

0

精华

高级会员

Rank: 4

积分
758
金钱
758
注册时间
2015-8-25
在线时间
165 小时
发表于 2016-6-3 21:19:57 | 显示全部楼层
在初始化OV2640里,把    OV2640_PWDN    和    OV2640_RST     的管脚初始化设置去掉了?
回复

使用道具 举报

1

主题

7

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2015-7-11
在线时间
4 小时
 楼主| 发表于 2016-6-3 21:48:53 | 显示全部楼层
phoenix 发表于 2016-6-3 21:19
在初始化OV2640里,把    OV2640_PWDN    和    OV2640_RST     的管脚初始化设置去掉了?

我买的OV2640模块没有这两个引脚,我就舍弃了这个
回复

使用道具 举报

0

主题

71

帖子

0

精华

高级会员

Rank: 4

积分
758
金钱
758
注册时间
2015-8-25
在线时间
165 小时
发表于 2016-6-4 10:13:25 | 显示全部楼层
PH5--I2C_SDA  管脚没有看到初始化代码,不知道是否设置为 开漏输出 ,如果是,得检查下你的OV2640模块这个管脚是否带有上拉电阻。

原子的SCCB代码中,该管脚是设置为  推挽输出的,不知道你是否注意这点。

要怎样设置得根据  OV2640模块决定(是否带有上拉电阻)。
回复

使用道具 举报

1

主题

7

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2015-7-11
在线时间
4 小时
 楼主| 发表于 2016-6-5 14:49:26 | 显示全部楼层
phoenix 发表于 2016-6-4 10:13
PH5--I2C_SDA  管脚没有看到初始化代码,不知道是否设置为 开漏输出 ,如果是,得检查下你的OV2640模块这个 ...

SCCB读摄像读ID是正确的,我感觉应该是DCMI那边有点问题
回复

使用道具 举报

1

主题

7

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2015-7-11
在线时间
4 小时
 楼主| 发表于 2016-6-5 21:08:44 | 显示全部楼层
phoenix 发表于 2016-6-5 15:14
看你的图片,图像基本出来了,好像数据没有对其似的。你再仔细检查下各种连线是否有链接错误的。

是寄存器配置出了问题~终于没有横纹了~谢谢你~~~
回复

使用道具 举报

0

主题

71

帖子

0

精华

高级会员

Rank: 4

积分
758
金钱
758
注册时间
2015-8-25
在线时间
165 小时
发表于 2016-6-5 22:47:04 | 显示全部楼层
maomaohuyue 发表于 2016-6-5 21:08
是寄存器配置出了问题~终于没有横纹了~谢谢你~~~

可以把错误的地方指出来吗,以备他人借鉴。
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-2-27 11:19

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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