用了stm32f207做的拍照,但是拍的照片一直是第一帧图片,搞不明白
if(start_bmp==1)
{
BMPFileHeader BMPFH; //BMP文件头
BMPInfoHeader BMPIH; //BMP信息头
u8 *FileHeaderBuf; //写入到BMP文件的文件头数组
u8 *InfoHeaderBuf; //写入到BMP文件的信息头数组
UINT ByteCnt;
if(Bmp_Num == 256) Bmp_Num=0;
Bmp_Num++; //照片的名字加1
f_mount(0, &fs);
sprintf(m_FileName, "/IMG%4.4d.BMP", Bmp_Num); //把BMP格式的名字放在m_FileName数组中
f_open(&FileObject, m_FileName, FA_CREATE_ALWAYS | FA_WRITE); //创建一个BMP图片文件
BMPFH.bfType[0] = 'B'; //
BMPFH.bfType[1] = 'M'; //
Load32(BMPFH.bfSize, 153654); //文件结构头+文件信息头+实际图画数据,注意每行对4byte求余=0,否则补齐
Load32(BMPFH.bfOffBits, 54); //文件结构头+文件信息头
Load32(BMPIH.biSize,40); //装载BMP信息头大小
Load32(BMPIH.biWidth,320); //装载图像宽度
Load32(BMPIH.biHeight,240); //装载图像高度
Load16(BMPIH.biPlanes, 1);
Load32(BMPIH.biBitCount, 16);
Load32(BMPIH.biCompression, 0);
Load32(BMPIH.biSizeImage, 153600); //装载位图实际大小
Load32(BMPIH.biXPelsPerMeter, 0);
Load32(BMPIH.biYPelsPerMeter, 0);
Load32(BMPIH.biClrUsed, 0);
Load32(BMPIH.biClrImport, 0);
FileHeaderBuf = (u8 *)&(BMPFH); //将BMP文件结构头转化为数组存放
InfoHeaderBuf = (u8 *)(&(BMPIH)); //将BMP文件信息头转换为数组存放
f_write(&FileObject, FileHeaderBuf, 14, &ByteCnt); //写bmp格式的文件头
f_write(&FileObject, InfoHeaderBuf, 40, &ByteCnt); //写bmp格式文件的信息头
FIFO_CS_L(); //片选
FIFO_RRST_L(); //至少需要一个时钟周期的跳变才能复位
FIFO_RD_L();
FIFO_RD_H();
FIFO_RRST_H();
FIFO_RD_L();
FIFO_RD_H();
for(i= 0; i<240; i++)
{
for(j= 0; j<320; j++)
{
FIFO_RD_L();
color=((GPIOF->IDR)&0xff00); //PF8-PF15数据
FIFO_RD_H();
FIFO_RD_L();
color|=((GPIOF->IDR)&0xff00)>>8;
FIFO_RD_H();
color_red = (color & 0xF100)>>11; //获得红色分量
color_green = (color & 0x07E0)>>6; //获得绿色分量 取得的绿色分量为6bit 再左移1bit 取得5bit的绿色分量
color_blue = (color & 0x01F); //获得蓝色分量
color = ((color_red)<<10) + ((color_green)<<5) + color_blue; //组成RGB565数据
f_write(&FileObject, (u16 *)&color, 2, &ByteCnt); //color低位在前,高位在后,该转换方式为默认
}
}
f_close(&FileObject); //关闭文件
f_mount(0, NULL);
start_bmp=0;
} /*start_bmp==1*/
照片换成bmp格式的代码
|