[STM32F0] OV7670摄像头读出的画面不对

[复制链接]
 楼主| feiyinglala 发表于 2016-6-2 08:51 | 显示全部楼层 |阅读模式
本帖最后由 feiyinglala 于 2016-6-2 08:59 编辑

用stm32f051用IO口直接驱动没有fifo的OV7670,现在问题是,在彩条测试模式,读出的画面颜色不正常。摄像头配置为 QVGA RGB565 ,而且一行像素应该是有640字节,可是现在读出的有效数据为315个像素点.最后15个像素读出的又到了下一行数据,见数据包

彩条测试模式
彩条测试.jpg

这是正常模式读出的画面
正常模式.jpg

附摄像头寄存器配置
  1.    {0x3a, 0x04},//VYUY/UYVY|TSLB(行缓冲测试选项):[5]-负片,[4]UV输出数据,[3]输出顺序,【0】自动输出窗口】
  2.         {0x40, 0xd0},//RGB565|COM15(通用控制15):
  3.         {0x12, 0x16},//QVGA,RGB输出|COM7(通用控制7):
  4.         
  5.         //输出窗口设置:HSATRT-184 HSTOP-40 VSTART-10 VSTOP-490
  6.         {0x32, 0x80},//|HERF(HERF控制):[5:0]HREF结束开始的低3位
  7.         {0x17, 0x16},//|HSTART(行频开始高八位)
  8.         {0x18, 0x04},//|HSTOP(行频结束高八位)
  9.         {0x19, 0x02},//|VSTART(场频开始高八位)
  10.         {0x1a, 0x7b},//|VSTOP(场频结束高八位)
  11.          {0x03, 0x06},//|VREF(帧竖直方向控制):[3:0]VREF结束开始的低两位


  12.         {0x0c, 0x00},//COM3
  13.         {0x15, 0x00},//COM10
  14.         {0x3e, 0x00},//COM14[000x xxxx]:DCW,缩放参数,PCLK分频
  15.         {0x70, 0x00},//SCALING_XSC:00 无测试图案;01 移位1                                3a
  16.         {0x71, 0x80},//SCALING_YSC:10 八色颜色条;11 渐变城灰色颜色条        35
  17.         {0x72, 0x11},//SCALING_DCWCTR:DCW
  18.         {0x73, 0x00},//SCALING_PC[0000 XXXX]:DSP时钟分频
  19.         
  20.         {0xa2, 0x02},//SCALING_PCLK_DELAY:像素时钟延迟
  21.         {0x11, 0x81},//CLKRC:时钟分频设置,0,不分频.
  22.         
  23.         //伽马曲线参数
  24.         {0x7a, 0x20},//SLOP:
  25.         {0x7b, 0x1c},//GAM1
  26.         {0x7c, 0x28},//GAM2
  27.         {0x7d, 0x3c},//GAM3
  28.         {0x7e, 0x55},//GAM4
  29.         {0x7f, 0x68},//GAM5
  30.         {0x80, 0x76},//GAM6
  31.         {0x81, 0x80},//GAM7
  32.         {0x82, 0x88},//GAM8
  33.         {0x83, 0x8f},//GAM9
  34.         {0x84, 0x96},//GAM10
  35.         {0x85, 0xa3},//GAM11
  36.         {0x86, 0xaf},//GAM12
  37.         {0x87, 0xc4},//GAM13
  38.         {0x88, 0xd7},//GAM14
  39.         {0x89, 0xe8},//GAM15
  40.         
  41.         {0x13, 0xe0},//COM8:AGC,AEC,条纹滤波器
  42.         {0x00, 0x00},//AGC
  43.         
  44.         {0x10, 0x00},//AECH:曝光值
  45.         {0x0d, 0x00},//COM4[00XX 0000]:平均选择
  46.         {0x14, 0x28},//0x38, limit the max gain
  47.         {0xa5, 0x05},//BD50MAX:50Hz条纹滤波器步长限制
  48.         {0xab, 0x07},//BD60MAX:60Hz条纹滤波器步长限制
  49.         
  50.         {0x24, 0x75},//AEW:40
  51.         {0x25, 0x63},//AEW:
  52.         {0x26, 0xA5},//VPT
  53.         
  54.         //基于直方图的AEC/AGC控制
  55.         {0x9f, 0x78},//HAECC1
  56.         {0xa0, 0x68},//HAECC2
  57.         {0xa6, 0xdf},//HAECC3
  58.         {0xa7, 0xdf},//HAECC4
  59.         {0xa8, 0xf0},//HAECC5
  60.         {0xa9, 0x90},//HAECC6
  61.         {0xaa, 0x94},//HAECC7
  62.         {0x13, 0xe5},//COM8 【为何配置两次】
  63.         {0x0e, 0x61},//COM5        【保留】
  64.         {0x0f, 0x4b},//COM6
  65.         //{0x16, 0x02},//【保留】
  66.         
  67.         {0x1e, 0x07},//MVFP:图像输出镜像控制.0x07,【镜像】
  68.         //{0x21, 0x02},//ADCCTR1:【保留】
  69.         //{0x22, 0x01},//ADCCTR1:【保留】
  70.         //{0x23, 0x00},//ADCCTR1:【保留】
  71.         //{0x33, 0x0b},//CHLF:【保留】

  72.         {0x37, 0x1d},//ADC:【保留】
  73.         {0x38, 0x71},//ACOM:【保留】
  74.         {0x39, 0x2a},//OFON:【保留】
  75.         {0x3c, 0x78},//COM12[X000 0000]:HREF选项
  76.         
  77.         {0x69, 0x00},//GFIX:修复增益控制
  78.         {0x6b, 0x40},//DBLV:PLL*4=48Mhz
  79.         {0x74, 0x19},//REG74:

  80.         {0x92, 0x00},//DM_LNL:空行
  81.     {0x93, 0x00},//DM_LNH:空行   

  82.         {0xb1, 0x0c},//ABLC1:自动黑电平校正使能
  83.         
  84.         {0xb3, 0x82},//THL_ST:80
  85.         
  86.         {0x43, 0x14},//AWBC1:【保留】
  87.         {0x44, 0xf0},//AWBC2:【保留】
  88.         {0x45, 0x34},//AWBC3:【保留】
  89.         {0x46, 0x58},//AWBC4:【保留】
  90.         {0x47, 0x28},//AWBC5:【保留】
  91.         {0x48, 0x3a},//AWBC6:【保留】
  92.         
  93.         {0x64, 0x04},//LCC3:
  94.         {0x65, 0x20},//LCC4:        
  95.         {0x66, 0x05},//LCC5:        
  96.         {0x94, 0x04},//LCC6
  97.         {0x95, 0x08},//LCC7
  98.         
  99.         {0x6c, 0x0a},//AWBCTR3
  100.         {0x6d, 0x55},//AWBCTR2
  101.         {0x6e, 0x11},//AWBCTR1
  102.         {0x6f, 0x9f},//AWBCTR0:0x9e for advance AWB        
  103.         
  104.         {0x4f, 0x80},//MTX1:
  105.         {0x50, 0x80},//MTX2:
  106.         {0x51, 0x00},//MTX3:
  107.         {0x52, 0x22},//MTX4:
  108.         {0x53, 0x5e},//MTX5:
  109.         {0x54, 0x80},//MTX6:

  110.         {0x09, 0x03},//COM2:驱动能力最大


  111.     {0x55, 0x00},//BRIGHT:亮度,原为00
  112.     {0x56, 0x40},//CONTRAS:对比度
  113.     {0x57, 0x80},//CONTRAS-CENTER:0x40,  change according to Jim's request        

读出的数据,方括号内为数据的字节统计
  1. BD D7 BD D7 BD D7 BD D7 BD D7 BD D7 BD D7 BD D7 BD D7 BD D7 BD D7 BD D7 BD D7 BD D7 BD D7         [30]
  2. BD D7 BD D7 BD D7 BD D7 BD D7 BD D7 BD D7 BD D7 BD D7 BD D7 BD D7 BD D7                         [58]

  3. BD 52 B4 F1

  4. B5 48 B5 48 B5 48 B5 48 B5 48 B5 48 B5 48 B5 48 B5 48 B5 48 B5 48 B5 48 B5 48 B5 48 B5 48         [88]+4
  5. B5 48 B5 48 B5 48 B5 48 B5 48 B5 48 B5 48 B5 48 B5 48 B5 48 B5 48 B5 48 B5 48 B5 48 B5 48         [118]
  6. B5 48 B5 48 B5 48 B5 48 B5 48 B5 48 B5 48 B5 48                                                 [134]                                                

  7. 47 07 26 03

  8. 25 74 25 74 25 74 25 74 25 74 25 74 25 74 25 74 25 74 25 74 25 74 25 74 25 74 25 74 25 74         [164]+8
  9. 25 74 25 74 25 74 25 74 25 74 25 74 25 74 25 74 25 74 25 74 25 74 25 74 25 74 25 74 25 74         [194]
  10. 25 74 25 74 25 74 25 74 25 74 25 74 25 74 25 74 25 74 25 74                                         [214]

  11. 2C CF 1C 8E

  12. 1D 05 1D 05 1D 05 1D 05 1D 05 1D 05 1D 05 1D 05 1D 05 1D 05 1D 05 1D 05 1D 05 1D 05 1D 05         [244]+12
  13. 1D 05 1D 05 1D 05 1D 05 1D 05 1D 05 1D 05 1D 05 1D 05 1D 05 1D 05 1D 05 1D 05 1D 05 1D 05         [274]
  14. 1D 05 1D 05 1D 05 1D 05 1D 05 1D 05 1D 05 1D 05                                                 [290]

  15. BA 66 A1 A3

  16. 98 D1 98 D1 98 D1 98 D1 98 D1 98 D1 98 D1 98 D1 98 D1 98 D1 98 D1 98 D1 98 D1 98 D1 98 D1         [320]+16
  17. 98 D1 98 D1 98 D1 98 D1 98 D1 98 D1 98 D1 98 D1 98 D1 98 D1 98 D1 98 D1 98 D1 98 D1 98 D1         [350]
  18. 98 D1 98 D1 98 D1 98 D1 98 D1 98 D1 98 D1 98 D1 98 D1 98 D1                                         [370]

  19. A0 4D 90 0B

  20. 90 63 90 63 90 63 90 63 90 63 90 63 90 63 90 63 90 63 90 63 90 63 90 63 90 63 90 63 90 63         [400]+20
  21. 90 63 90 63 90 63 90 63 90 63 90 63 90 63 90 63 90 63 90 63 90 63 90 63 90 63 90 63 90 63         [430]
  22. 90 63 90 63 90 63 90 63 90 63 90 63 90 63 90 63                                                 [446]

  23. 22 02 00 E0

  24. 00 6E 00 6E 00 6E 00 6E 00 6E 00 6E 00 6E 00 6E 00 6E 00 6E 00 6E 00 6E 00 6E 00 6E 00 6E         [476]+24
  25. 00 6E 00 6E 00 6E 00 6E 00 6E 00 6E 00 6E 00 6E 00 6E 00 6E 00 6E 00 6E 00 6E 00 6E 00 6E         [506]
  26. 00 6E 00 6E 00 6E 00 6E 00 6E 00 6E 00 6E 00 6E 00 6E 00 6E                                         [522]

  27. 08 0A 00 08

  28. 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00         [552]+28
  29. 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00         [582]
  30. 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                                                 [598]

  31. 08 20 94 51                                                                                         +32=630

  32. BD D7 BD D7 BD D7 BD D7 BD D7 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00         [???]这是下一行数据了吧?
  33. 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

读取摄像头数据的代码
  1. {//读取一帧画面
  2.         V_XCLK_OFF();
  3.         //等待进入帧同步中断
  4.         do{
  5.                 V_XCLK_L;
  6.                 V_XCLK_H;                        
  7.         }
  8.         while(!GPIO_ReadInputDataBit(V_CONTROL,V_SYNC_Pin));                                                //捕获场同步的高电平

  9.         do{
  10.                 V_XCLK_L;
  11.                 V_XCLK_H;                        
  12.         }
  13.         while(GPIO_ReadInputDataBit(V_CONTROL,V_SYNC_Pin));                                                //捕获场同步的高电平

  14.         Task_Flag |= 0x08;
  15.         Task_Flag |= 0x04;
  16.         Herf_Counter = 0;
  17.         Current_Buf = V_Buf1;
  18.         for(;Herf_Counter<=240;)
  19.         {
  20.                 do        {
  21.                         V_XCLK_H;
  22.                         V_XCLK_L;               
  23.                 }
  24.                 while(!GPIO_ReadInputDataBit(V_CONTROL,V_HERF_Pin));        //捕获到行同步

  25.                 Point_Counter =0;
  26.                 Herf_Counter += 1;                                //
  27.                 Point_Counter = 0;
  28.                 *Current_Buf = (u8) (Herf_Counter>>8);        //DDêy¸3Öμ
  29.                 *(Current_Buf+1) = (u8) Herf_Counter;
  30.                 while(Point_Counter<640)
  31.                 {
  32.                         V_XCLK_H;
  33.                         *(Current_Buf+2+Point_Counter++) = OV7670_Data_Cap();
  34.                         V_XCLK_L;               
  35.                 }
  36.                 OV7670_Data_Send(Current_Buf);        //每采集完一行的数据后就发送,然后
  37.         }
  38.         return 0;
  39. }



 楼主| feiyinglala 发表于 2016-6-2 19:03 | 显示全部楼层
help,help,need help!
mark0668 发表于 2016-6-2 21:52 | 显示全部楼层
没有fifo  你单片机有这么高的速度读??
colin2135 发表于 2016-6-3 09:17 | 显示全部楼层
这个真是。。
楼主是不是连XCLK也是用IO模拟的?

如楼上所说,不带DCMI的接口的最好使用FIFO,不然IO的速度是跟不上摄像头数据的输出速度。所以才造成有些像素没有读到的原因。

建议还是使用带有DCMI接口的MCU,不然整个CPU只工作在读取数据,没啥实际意义。

评分

参与人数 1威望 +3 收起 理由
feiyinglala + 3

查看全部评分

 楼主| feiyinglala 发表于 2016-6-3 21:44 | 显示全部楼层
colin2135 发表于 2016-6-3 09:17
这个真是。。
楼主是不是连XCLK也是用IO模拟的?

是用IO模拟XCLK的,现在我这快不了,因为目前数据是发给51,由51通过串口发给电脑,51操作串口太快我这里老出故障
 楼主| feiyinglala 发表于 2016-6-5 20:22 | 显示全部楼层
mark0668 发表于 2016-6-2 21:52
没有fifo  你单片机有这么高的速度读??

stm32全速运行,48M理论上应该可以吧?不过,我用EXIT来检测帧同步,行同步,和像素时钟程序莫名其妙出错!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

21

主题

224

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部