OpenEdv-开源电子网

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

有关ov7670的图像采集至sd卡的问题,求大神粗线……

[复制链接]

5

主题

17

帖子

0

精华

初级会员

Rank: 2

积分
74
金钱
74
注册时间
2012-9-23
在线时间
1 小时
发表于 2012-10-13 00:16:52 | 显示全部楼层 |阅读模式

用mini版做ov7670的图像采集至sd卡的实验,但是用下面的程序总是采集不够数据……求指导:
 #include <stm32f10x_lib.h>
 #include "sys.h"
 #include "gpio.h"
 #include "usart.h"
 #include "delay.h"
 #include "led.h"
 #include "lcd.h"
 #include "fifo.h"
 #include "OV7670.h"
 #include "my_camera.h"

 u16 a,data;
 extern u8 status;
 u16 i,j;
 u8 res;
 FATFS fatfs;
 UINT WRBytes;           
 FIL fileW;
 u16 Line_buf[240];
void WriteHeader(FIL* file)
{
 UINT WRBytes;
 u8 BMP_header[14]; 
 BITMAPFILEHEADER* bmph;

 bmph=(BITMAPFILEHEADER*)BMP_header;
 bmph->bfType=0x4d42;
 bmph->bfSize=0x25836;//文件大小,待定
 bmph->bfReserved1=0;//保留,必须设置为0
 bmph->bfReserved2=0;
 bmph->bfOffBits=54;//从文件头到位图数据所需偏移字节
 f_write(file,BMP_header,14,&WRBytes);
}


void WriteBMPInfo(FIL* file)
{
  UINT WRBytes;
 u8 BMP_info[40]; 
 BITMAPINFOHEADER* bmpi;

 bmpi=(BITMAPINFOHEADER*)BMP_info;
 bmpi->biSize=40;
 bmpi->biWidth=240;
 bmpi->biHeight=320;
 bmpi->biPlanes=1;
 bmpi->biBitCount=16;
 bmpi->biCompression=0;
 bmpi->biSizeImage=0;
 bmpi->biXPelsPerMeter=0;
 bmpi->biYPelsPerMeter=0;
 bmpi->biClrUsed=0;
 bmpi->biClrImportant=0;
 f_write(file,BMP_info,40,&WRBytes);
}

 int main(void)
 {

  Stm32_Clock_Init(9);//系统时钟初始化
 Delay_Init(72);//延时初始化 
 usart_init(72,9600);//串口1初始化
 LED_Init();
 JTAG_Set(JTAG_SWD_DISABLE);
 FIFO_GPIO_Init();

 FIFO_OE_CLR;//FIFO数据允许读出
 FIFO_WE_SET;//允许写入FIFO
 while(OV7670_Init()); //初始化OV7670


 FIFO_RRST_CLR;
 FIFO_RCK_CLR;
 FIFO_RCK_SET;
 FIFO_RCK_CLR;
 FIFO_RRST_SET;
 FIFO_RCK_SET;

 status=0;

 while(1)
 {
  if(status==2)
  { 

   res=f_mount(0, &fatfs);
   while(res)printf("SD mount failed!\n");
   res=f_open(&fileW,"0:/output/ph1.bmp",FA_OPEN_ALWAYS|FA_WRITE);//创建并打开
   while(res)printf("file create failed!\n");

   WriteHeader(&fileW);
   WriteBMPInfo(&fileW);
   led0=0;                 
     FIFO_RRST_CLR;  //读复位
   FIFO_RCK_CLR;
   FIFO_RCK_SET;
   FIFO_RCK_CLR;
   FIFO_RRST_SET;
   FIFO_RCK_SET;

  for(j=0;j<9600;j++)
  {
//1
    FIFO_RCK_CLR;  
    data=GPIOB->IDR &0x00ff;  
    FIFO_RCK_SET;
    data<<=8;
    FIFO_RCK_CLR;
    data|=GPIOB->IDR&0x00ff;
    FIFO_RCK_SET;
    f_write(&fileW,(u8*)RGB565toRGB555(data),2,&WRBytes);
//2
    FIFO_RCK_CLR;  
    data=GPIOB->IDR &0x00ff;  
    FIFO_RCK_SET;
    data<<=8;
    FIFO_RCK_CLR;
    data|=GPIOB->IDR&0x00ff;
    FIFO_RCK_SET;
    f_write(&fileW,(u8*)RGB565toRGB555(data),2,&WRBytes);
//3
    FIFO_RCK_CLR;  
    data=GPIOB->IDR &0x00ff;  
    FIFO_RCK_SET;
    data<<=8;
    FIFO_RCK_CLR;
    data|=GPIOB->IDR&0x00ff;
    FIFO_RCK_SET;
    f_write(&fileW,(u8*)RGB565toRGB555(data),2,&WRBytes);
//4
    FIFO_RCK_CLR;  
    data=GPIOB->IDR &0x00ff;  
    FIFO_RCK_SET;
    data<<=8;
    FIFO_RCK_CLR;
    data|=GPIOB->IDR&0x00ff;
    FIFO_RCK_SET;
    f_write(&fileW,(u8*)RGB565toRGB555(data),2,&WRBytes);
//5
    FIFO_RCK_CLR;  
    data=GPIOB->IDR &0x00ff;  
    FIFO_RCK_SET;
    data<<=8;
    FIFO_RCK_CLR;
    data|=GPIOB->IDR&0x00ff;
    FIFO_RCK_SET;
    f_write(&fileW,(u8*)RGB565toRGB555(data),2,&WRBytes);
//6
    FIFO_RCK_CLR;  
    data=GPIOB->IDR &0x00ff;  
    FIFO_RCK_SET;
    data<<=8;
    FIFO_RCK_CLR;
    data|=GPIOB->IDR&0x00ff;
    FIFO_RCK_SET;
    f_write(&fileW,(u8*)RGB565toRGB555(data),2,&WRBytes);
//7
    FIFO_RCK_CLR;  
    data=GPIOB->IDR &0x00ff;  
    FIFO_RCK_SET;
    data<<=8;
    FIFO_RCK_CLR;
    data|=GPIOB->IDR&0x00ff;
    FIFO_RCK_SET;
    f_write(&fileW,(u8*)RGB565toRGB555(data),2,&WRBytes);
//8
    FIFO_RCK_CLR;  
    data=GPIOB->IDR &0x00ff;  
    FIFO_RCK_SET;
    data<<=8;
    FIFO_RCK_CLR;
    data|=GPIOB->IDR&0x00ff;
    FIFO_RCK_SET;
    f_write(&fileW,(u8*)RGB565toRGB555(data),2,&WRBytes);
    
  }

 f_close(&fileW);
 led0=1;
 led1=0;
 f_mount(0,NULL);  
            
 while(1);

  }
 }
 }


采到的图像只有64.5 KB (66,048 字节),但理论上应该有150 KB (153,654 字节)啊,主体程序是用着论坛里一位大神的程序(读ov7670到lcd的ram)的改编,当时就不是很清楚要有8小段程序的重复,是因为控制时钟的问题吗?
求大神指导啊……感谢

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

使用道具 举报

5

主题

17

帖子

0

精华

初级会员

Rank: 2

积分
74
金钱
74
注册时间
2012-9-23
在线时间
1 小时
 楼主| 发表于 2012-10-13 18:39:08 | 显示全部楼层
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2012-10-13 22:00:34 | 显示全部楼层
回复【楼主位】Script36:
---------------------------------
这是为了提高速度,你如果直接存SD卡,完全不必这么做,直接建立个buf,一次多读一点,然后一次写入。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-20 04:06

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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