OpenEdv-开源电子网

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

ov2640 lcd显示问题

[复制链接]

12

主题

41

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
233
金钱
233
注册时间
2016-2-16
在线时间
71 小时
发表于 2016-3-26 19:10:54 | 显示全部楼层 |阅读模式
3金钱
本帖最后由 xws 于 2016-3-26 21:40 编辑

用精英板驱动ov2640,lcd显示有问题,效果如下:
QQ截图20160326190639.png
求指点,主程序如下:
#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "led.h"                           
#include "lcd.h"  
#include "key.h"     
#include "usmart.h"
#include "string.h"               
#include "beep.h"
#include "ov2640.h"
#include "dma.h"
#include "malloc.h"
//ALIENTEK STM32F103开发板 扩展实验6
//OV2640照相机 实验
//技术支持:www.openedv.com
//广州市星翼电子科技有限公司
u8* ov2640_framebuf;                                //帧缓存

//OV2640速度控制
//根据LCD分辨率的不同,设置不同的参数
void ov2640_speed_ctrl(void)
{
        u8 clkdiv,pclkdiv;                        //时钟分频系数和PCLK分频系数
        if(lcddev.width==240)                //2.8寸LCD
        {
                clkdiv=1;
                pclkdiv=28;
        }else if(lcddev.width==320)        //3.5寸LCD
        {
                clkdiv=3;
                pclkdiv=15;
        }else                                                //4.3/7寸LCD
        {
                clkdiv=15;
                pclkdiv=4;
        }
        SCCB_WR_Reg(0XFF,0X00);               
        SCCB_WR_Reg(0XD3,pclkdiv);        //设置PCLK分频
        SCCB_WR_Reg(0XFF,0X01);
        SCCB_WR_Reg(0X11,clkdiv);        //设置CLK分频        
}



int main(void)
{               
          u16 pixcnt=0;                                //像素统计
          u16 linecnt=0;                                //行数统计                                 
               
          delay_init();                        //延时函数初始化         
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);  //设置中断优先级分组为组2:2位抢占优先级,2位响应优先级
                uart_init(115200);                     //串口初始化为115200
                usmart_dev.init(72);                //初始化USMART               
          LED_Init();                                          //初始化与LED连接的硬件接口
                KEY_Init();                                         //初始化按键
                LCD_Init();                                           //初始化LCD  
                BEEP_Init();
          my_mem_init(SRAMIN);                //初始化内部内存池
                ov2640_framebuf=mymalloc(SRAMIN,52*1024);   //申请帧缓存
                 while(!ov2640_framebuf)         //内存分配出错
                {            
                                LCD_ShowString(100,160,200,16,16,"error");               
                                delay_ms(200);                                 
                                LCD_Fill(30,150,240,146,WHITE);//清除显示            
                                delay_ms(200);                                 
                }                                                                                             
                 while(OV2640_Init())   //ov2640初始化出错
                {
                                LCD_ShowString(100,160,200,16,16,"error");
                                delay_ms(200);                                 
                                LCD_Fill(30,150,240,146,WHITE);//清除显示            
                                delay_ms(200);                                 
                                
                }
                LCD_ShowString(100,160,200,16,16,"ok");
                delay_ms(1500);
                OV2640_RGB565_Mode();
                OV2640_OutSize_Set(240,320);
                ov2640_speed_ctrl();
          MYDMA_Init((u32)ov2640_framebuf);
                 while(1)
                {
               
            while(OV2640_VSYNC);      //等待帧信号
                        LCD_SetCursor(0,0);                    //设置扫描方向
                        LCD_WriteRAM_Prepare();                //开始写入GRAM         
                        linecnt=0;                                               //行统计清零
                        pixcnt=0;                        //像素计数器清零
                         while(linecnt<320)        
                         {
                                                while(OV2640_HREF)
                                                {  
                                                                while(OV2640_PCLK==0);
                                                                ov2640_framebuf[pixcnt++]=OV2640_DATA;   
                                                                while(OV2640_PCLK==1);
                                                                while(OV2640_PCLK==0);
                                                                ov2640_framebuf[pixcnt++]=OV2640_DATA;
                                                                while(OV2640_PCLK==1);               
                                                }  
                                                if(pixcnt)
                                                {
                                                                                       
                                                        MYDMA_Enable();        //启动DMA数据传输
                                                        pixcnt=0;
                                                        linecnt++;
                                                }
                                
                                }
                                         LED0=!LED0;
                        }        

}


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

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2016-3-29 22:13:24 | 显示全部楼层
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-19 07:57

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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