ov7670花屏问题

2019-07-20 22:42发布

[mw_shl_code=c,true]///////////直接读FIFO缓存直接写进SD卡/////////////////////
void camera_refresh(void)
{
    u32 j;  u8 res;
    u16 color;   
    if(ov_sta==2)
    {
//      LCD_Scan_Dir(U2D_L2R);      //从上到下,从左到右
//      LCD_SetCursor(0x00,0x0000); //设置光标位置
//      LCD_WriteRAM_Prepare();     //开始写入GRAM  
        OV7670_RRST=0;              //开始复位读指针
        OV7670_RCK=0;
        OV7670_RCK=1;
        OV7670_RCK=0;
        OV7670_RRST=1;              //复位读指针结束
        OV7670_RCK=1;  
        for(j=0;j<76800;j++)
        {
            OV7670_RCK=0;
            color=GPIOC->IDR&0XFF;   //读数据
            OV7670_RCK=1;
            buffera[0]=(unsigned char)color;
            color<<=8;  
            OV7670_RCK=0;
            color|=GPIOC->IDR&0XFF;  //读数据
            OV7670_RCK=1;
        //  LCD->LCD_RAM=color;
            buffera[1]=(unsigned char)color;
             res=f_write(ftemp, buffera,2, &bw); //前面定义了unsigned char buffera[2];
        }
        res=f_close(ftemp);                              
        EXTI_ClearITPendingBit(EXTI_Line8);  //清除EXTI8线路挂起位
        ov_sta=0;                   //开始下一次采集
        ov_frame++;
    }
}


///////////////////////这里是BMP生成函数,被我改为在这里只写进BMP文件头了(因为没有LCD,所以读不了LCD的图片信息),然后在上面那个函数写进BMP数据区//////////
u8 bmp_encode(u8 *filename,u16 width,u16 height,u8 mode)
{               
//  FIL* f_bmp;
    u16 bmpheadsize;            //bmp头大小        
    BITMAPINFO hbmp;            //bmp头   
    u8 res=0;
    bmpheadsize=sizeof(hbmp);//得到bmp文件头的大小   
    mymemset((u8*)&hbmp,0,sizeof(hbmp));//置零空申请到的内存.        
    hbmp.bmiHeader.biSize=sizeof(BITMAPINFOHEADER);//信息头大小
    hbmp.bmiHeader.biWidth=width;       //bmp的宽度
    hbmp.bmiHeader.biHeight=height;     //bmp的高度
    hbmp.bmiHeader.biPlanes=1;          //恒为1
    hbmp.bmiHeader.biBitCount=16;       //bmp为16位 {MOD}bmp
    hbmp.bmiHeader.biCompression=BI_BITFIELDS;//每个象素的比特由指定的掩码决定。
    hbmp.bmiHeader.biSizeImage=hbmp.bmiHeader.biHeight*hbmp.bmiHeader.biWidth*hbmp.bmiHeader.biBitCount/8;//bmp数据区大小
                    
    hbmp.bmfHeader.bfType=((u16)'M'<<8)+'B';//BM格式标志
    hbmp.bmfHeader.bfSize=bmpheadsize+hbmp.bmiHeader.biSizeImage;//整个bmp的大小
    hbmp.bmfHeader.bfOffBits=bmpheadsize;//到数据区的偏移

    hbmp.RGB_MASK[0]=0X00F800;          //红 {MOD}掩码
    hbmp.RGB_MASK[1]=0X0007E0;          //绿 {MOD}掩码
    hbmp.RGB_MASK[2]=0X00001F;          //蓝 {MOD}掩码

    if(mode==1)res=f_open(ftemp,(const TCHAR*)filename,FA_READ|FA_WRITE);//尝试打开之前的文件
    if(mode==0||res==0x04)res=f_open(ftemp,(const TCHAR*)filename,FA_WRITE|FA_CREATE_NEW);//模式0,或者尝试打开失败,则创建新文件
    if(res==FR_OK)//创建成功
    {
        res=f_write(ftemp,(u8*)&hbmp,bmpheadsize,&bw);//写入BMP首部
        }
    return res;
}[/mw_shl_code]



经过单步调试,SD卡、ov7670等是初始化成功,没问题的,SD卡写进去也没问题。。。。。
各位大佬,请不吝赐教,谢谢!!!!
@正点原子
一下是现在拍到的相片!!!

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。