一.搞了几天摄像头终于搞出来了一点成果,本打算用BMP格式保存读出的数据但是数据太大达到225k,后来又将BMP数据转成JPEG格式就小了很多,jpeg是有损压缩图片会变得不那么清晰。

搞出来的成果:

二.摄像头小知识:XCLK是输入摄像头的时钟,看别的原理图接的是一个12M的晶振,初始化的时候4倍频达到48M,这里没有接,用PA8输出8M内部6倍频达到48M,PCLK是摄像头输出的时钟达到12M,图像输出的是QVGA,RGB565格式,用的是VGA时序,一个像素需要2个pclk.

行输出时序图:

HREF是一个行信号,这个信号和mcu的一个引脚连接在SN74LVC1G00D(与非门)上,和mcu一块控制fifo,当准备写fifo时,mcu发送高电平,这时fifo并没有被使能,只有当HREF产生高电平信号时,在PCLK的配合下将数据写到fifo中。

帧输出时序图:

VSYNC是帧同步信号,当摄像头采集到一帧数据,会发出帧同步信号,用外部中断捕获这个帧中断信号。

void EXTI4_IRQHandler(void)
{         
    if(EXTI_GetITStatus(EXTI_Line4)==SET)    //是4线的中断
    {   if(OV7670_CS == 0) 
        {       
                if(ov_sta == 0)
                {            
                    OV7670_WRST=0;    //复位写指针                   
                    OV7670_WRST=1;    
                    OV7670_WREN=1;    //允许写入FIFO      
                    ov_sta=1;
                }
                else
                {
                    OV7670_WRST=0;    //复位写指针                   
                    OV7670_WRST=0;    
                    OV7670_WREN=1;    //允许写入FIFO 
                }
            }
    }
    EXTI_ClearITPendingBit(EXTI_Line4);  //清除EXTI4线路挂起位                          
}

三.读取数据并转换,也是仿照的别人的用的开源库。

void camera_refresh(void)
{   
    int width, height;
    int j,i;
     u16 color=0;
    int col;
    int t;
   jpeg_compress_info *cinfo;
    pt_buf = 0;
    if(ov_sta)//有帧中断更新?
    {
          width = 320;//图像的宽度 
          height = 240;//图像的高度 
          cinfo = jpeg_create_compress();
          if (!cinfo) 
          {
            //printf("error in create cinfo, malloc faild!\n");
          }
          cinfo->image_width = width;
          cinfo->image_height= height;
          cinfo->output =(char *)JPG_enc_buf;//fopen("test.jpg", "wb");
          jpeg_set_default(cinfo);  
          
          jpeg_start_compress(cinfo);
  
        FLASH_SIZE1 = 8192;
        OV7670_RRST=0;                //开始复位读指针         
        OV7670_RCK_L;
        OV7670_RCK_H;
        OV7670_RCK_L;
        OV7670_RRST=1;                //复位读指针结束 
        OV7670_RCK_H;                
        for(j=0;j<240;j++)
        {    //printf("第%u行",j);
            for(i=319;i>=0;i--)
            {

    //高字节  数据位接的比较乱 根据实际情况修改
                OV7670_RCK_L;
                color = ((GPIOD->IDR&0xC000)>>14);   //D14 D15
                color |= ((GPIOD->IDR&0x0003)<<2);  //D0 D1
                color |= ((GPIOE->IDR&0x0780)>>3);  //E7 8 9 10
                OV7670_RCK_H;                 
                color<<=8;  
                OV7670_RCK_L;
                //低字节
                color |= ((GPIOD->IDR&0xC000)>>14);   //D14 D15
                color |= ((GPIOD->IDR&0x0003)<<2);  //D0 D1
                color |= ((GPIOE->IDR&0x0780)>>3);  //E7 8 9 10                
                OV7670_RCK_H;                                 
                R = (color>>8)&0xF8;
                G = (color>>3)&0xFC;
                B = (color<<3)&0xF8;
                
                buffer[i*3+0] = R;//jpeg格式顺序RGB 如果是bmp格式写成BGR
                buffer[i*3+1] = G;
                buffer[i*3+2] = B;
            }            
            jpeg_write_scanline(cinfo, buffer);//一行一行的压缩
        } 
        jpeg_finish_compress(cinfo);  
        jpeg_destory_compress(cinfo);
        //OV7670_CS=1;
         ov_sta=0;        //清零帧中断标记
        //需要多少擦多少
        for(i = 0;i<=(pt_buf/4096);i++)
        {
            W25QXX_Erase_Sector( 8192/4096+i );
        }      
        for(t = 0;t<pt_buf;t++)
        {
         send_data(JPG_enc_buf[t]);//发送数据给上位机          
        }      
        W25QXX_Write_NoCheck((u8*)JPG_enc_buf,FLASH_SIZE1,pt_buf);//写到flash


}

突然发现没加源码地址,补上:https://download.csdn.net/download/forwardjia/10633160

stm32驱动ov7670 数据转BMP格式再转JPEG存储相关推荐

  1. STM32驱动OV7670(无FIFO)相关问题的解决

    STM32驱动OV7670(无FIFO)相关问题的解决 文章目录 STM32驱动OV7670(无FIFO)相关问题的解决 前言 一.OV7670大体介绍与需要关注的点 二.遇到的问题及解决 1.引脚冲 ...

  2. 将BMP 格式图片转换为 JPEG 格式【c语言】

    源码链接: https://blog.csdn.net/qq_44394952/article/details/122587475?spm=1001.2014.3001.5502. 一.任务及目标 利 ...

  3. 保存图像数据为BMP格式的图片

    BMP文件是Windows操作系统所推荐和支持的图像文件格式,是一种将内存或显示器的图像数据不经过压缩而直接按位存盘的文件格式,所以称为位图(bitmap)文件. BMP文件结构 BMP图像文件包括四 ...

  4. 将BMP 格式图片转换为 JPEG 格式【c语言源码】

    原理及代码讲解链接: https://blog.csdn.net/qq_44394952/article/details/122587306?spm=1001.2014.3001.5502. 主函数m ...

  5. stm32驱动 ov7670发送到串口上位机显示图像

    所需硬件: 1.stm32 103ZET6核心板,没有lcd(调试摄像头一定要买一个lcd,太方便了,都是泪): 2.OV7670带FIFO淘宝一搜一大把最常见的那种: 驱动代码:参考正点原子官方例程 ...

  6. C语言将raw转为bmp,RAW格式数据转BMP格式数据

    1.BMP文件结构,注意字节对齐 __packed struct tagBITMAPFILEHEADER { T_U16 bfType; T_U32 bfSize; T_U16 bfReserved1 ...

  7. stm32驱动ov7670摄像头识别颜色并追踪

    最近在搞摄像头识别颜色并追踪,有了那么一点点成过,记录一下防止以后忘了! 先上两张成果图:有点模糊,凑合看. 大神地址:https://www.amobbs.com/thread-5499408-1- ...

  8. STM32F4驱动OV7670总结

    前言:之前因为贪图便宜买了一个7块钱的ov7670摄像头,然后想用我的stm32开发板驱动起来结合rtthread做个小项目出来,但是一路上遇到了许多问题,最终没能成功,在此记录一下用stm32驱动o ...

  9. BMP格式图像知识点总结并转灰度图

    24位彩图转换为灰度图练习 练习目的 位图知识点 BMP图像存储结构 位图文件头 位图信息头 调色板 位图数据 转灰度图重点 代码例程 练习目的 BMP格式图片灰度化 位图知识点 刚拿到任务时觉得图像 ...

最新文章

  1. NAS存储对称和非对称结构之前的区别概述
  2. Oracle脚本批量导入时,输出日志文件
  3. python 循环添加array_Python的备忘细节小抄
  4. HTML5求自动在闪,HTML5 重复而不停闪烁的团状物
  5. 浅谈敏捷思想-05.精益画布电梯演讲
  6. 【译学】数据分析手册学习09:举例说明 - 定量定性数据分析的程序和方法 Procedures and Methods
  7. 洛谷——P1724 东风谷早苗
  8. 影片剪辑app android,猫饼剪辑app
  9. c语言 unpack函数,Pack/Unpack 总结
  10. css 动效彩旗飘扬
  11. oracle 分组first,Oracle分析函数:First_Value
  12. 绕过preg_match
  13. 万字讲解Apollo,全网Apollo资料整理和学习
  14. 最佳页面置换算法详解
  15. fastreport连接mysql
  16. hdu 1430 魔板
  17. Android jdk环境配置以及创建
  18. 手把手教你五分钟扒个源码写个无敌外挂
  19. 浏览器内核、排版引擎、js引擎
  20. ActivitiListener

热门文章

  1. 电力英语计算机教材,实用科技英语(21世纪高等教育计算机规划教材)
  2. 【汇编】AT89C52点亮一盏LED灯(汇编语言)
  3. 百万悬赏!寻找“模型越大,效果越差”的奇葩任务!
  4. 恢复谷歌翻译的究极方法
  5. 远程服务器120天,Windows 2008 突破windows远程桌面会话主机120天试用期限制
  6. 数据库 Oracle设置口令到达终止时间后的宽限天数
  7. 053试题 193 - recover 命令
  8. go defer,panic,recover详解 go 的异常处理
  9. 情人节,请问你愿意为你们的爱情买一份保险吗?
  10. 抖音、快手、视频号排兵布阵VR直播