中级会员
 
- 积分
- 233
- 金钱
- 233
- 注册时间
- 2016-2-16
- 在线时间
- 71 小时
|
3金钱
本帖最后由 xws 于 2016-3-26 21:40 编辑
用精英板驱动ov2640,lcd显示有问题,效果如下:
求指点,主程序如下:
#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;
}
}
|
|