OpenEdv-开源电子网

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

STM32F103CBT6 + ov2640 获取的数据开头不是FF D8居然是1B 10

[复制链接]

2

主题

13

帖子

0

精华

新手上路

积分
31
金钱
31
注册时间
2019-5-19
在线时间
11 小时
发表于 2019-6-15 10:26:25 | 显示全部楼层 |阅读模式
20金钱
本帖最后由 ql125671817 于 2019-6-15 16:43 编辑

@正点原子

是的!我又来啦,继上次7725实在调不出来之后,我转战了ov2640 好的,问题来啦!!!

我发现一个很特别的问题,因为我参考了正点原子的代码。
首先,因为STM32F103CBT6的SRAM就只有20K,然后参考的代码中使用的是F103ZE芯片,那个有64K的SRAM
当时没有改,导致后来一分配内存就卡死。

啊上面只是分享我调试的过程。
1. 原子的代码 在ov2640.h中是这么写的:
//OV2640 相关IO
[mw_shl_code=c,true]#define OV2640_VSYNC         PDin(6)                                //POWER DOWN控制信号
#define OV2640_PWDN          PBout(3)                        //POWER DOWN控制信号
#define OV2640_RST          PGout(15)                        //复位控制信号
#define OV2640_HREF          PGin(14)                        //HREF信号
#define OV2640_PCLK          PBin(4)                                //PCLK信号
#define OV2640_DATA           GPIOC->IDR&0x00FF        //数据输入端口[/mw_shl_code]
因为我的板子上只有 0 1 3 4 12 13 14 15引脚可以使用,所以我改成了
[mw_shl_code=c,true]#define OV2640_VSYNC         PAin(6)                                //POWER DOWN控制信号
#define OV2640_PWDN          PAout(12)                        //POWER DOWN控制信号
#define OV2640_RST          PAout(11)                        //复位控制信号
#define OV2640_HREF          PAin(8)                        //HREF信号
#define OV2640_PCLK          PAin(1)                                //PCLK信号
#define OV2640_DATA   GPIOB->IDR & 0xf01b#define OV2640_DATA           GPIOB->IDR&0xF01B //数据输入端口[/mw_shl_code]
2.同时我的引脚配置是这样的:
[mw_shl_code=c,true]        
GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_3|GPIO_Pin_4|
        GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15; //PB 15 14 13 12 4 3 1 0 输入 上拉
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
        GPIO_Init(GPIOB, &GPIO_InitStructure);[/mw_shl_code]

3.然后因为我只打算拍照,所以有如下设置:
[mw_shl_code=c,true]void ov2640_speed_ctrl(void)
{
        u8 clkdiv,pclkdiv;                        //时钟分频系数和PCLK分频系数
        clkdiv=10;
        pclkdiv=10;
        SCCB_WR_Reg(0XFF,0X00);               
        SCCB_WR_Reg(0XD3,pclkdiv);        //设置PCLK分频
        SCCB_WR_Reg(0XFF,0X01);
        SCCB_WR_Reg(0X11,clkdiv);        //设置CLK分频        
}[/mw_shl_code]4.读数据
[mw_shl_code=c,true]        
for(i=0;i<10;i++)                //丢弃10帧,等待OV2640自动调节好(曝光白平衡之类的)
        {
                while(OV2640_VSYNC==1);         
                while(OV2640_VSYNC==0);         
        }  
        while(OV2640_VSYNC==1)        //开始采集jpeg数据
        {
                        while(OV2640_HREF)
                        {  
                                while(OV2640_PCLK==0);
                                ov2640_framebuf[jpeglen++]=OV2640_DATA;
                                while(OV2640_PCLK==1);  
                                num++;
                        }
        }[/mw_shl_code]

5.使用的是jpeg模式,咱们大家都知道jpeg 是以 FF D8 开头 FF D9结尾的,但是但是但是!!!!!
我输出的结果是这样的:
1b101b000000120a110a000101010000000000001b13000300181011131110181312131a19181a021a08020101020912180a1a180a1a19130a1211000a0913000301081112180219010b12191a191b120913081312091819121b13000301191a1a020002030808031202120212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121b08001b00000109010101010101000000000000000001020308090a0b101112131b080009000002010303020803090908080000011901020300080109020101010a0301010b02010802010101100302010109020100080302020211120a0b101112090a0b10111208090a0b1011120308090a0b1011120308090a0b1011120308090a0b1011120308090a0b1011120308090a0b101112020308090a0b101112020308090a0b101112020308090a0b101112020308090a0b101112020308090a0b10111201020308090a0b10111201020308090a0b1011121b08001b01000301010101010101010100000000000001020308090a0b101112131b0800090100020102080803080b0908080001020b0001020301080901010a0201010b01010302020110080201010101110303020009020201120a08080109010b1011120a0b101112090a0b1011120308090a0b1011120308090a0b1011120308090a0b1011120308090a0b101112020308090a0b101112020308090a0b101112020308090a0b101112020308090a0b101112020308090a0b101112020308090a0b101112020308090a0b101112020308090a0b1011121b0000011000000000030101000201010301011b12001803010002010301001b0002090a1b120819111a181b03191b12001a12001000021b0911190a18100118111b0b131a0811021b1b0b181003130b031b18031b121b0a1b110a1b00090a010002091b001a1b11030019101311090212101001000908000100090800010009080001000908000100090800010009080001000908000100090800010009080001100212000800010900080001090008000109000800010900080001090008000109000802000210090800010009080001000908000100090800010009080001000908000100090800010009080001000908000100090800010009080001000908000100090800010009080001000908000100090800010009080001000908000100090800010009080001000908011b11000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

开头是 1B 10 结尾是 1B 11,也能够正好对应上FF D8 ,FF D9 的模式,那我这里是因为什么错了呀?
  是引脚配置错了?
  感谢回答!!!
        





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

使用道具 举报

2

主题

13

帖子

0

精华

新手上路

积分
31
金钱
31
注册时间
2019-5-19
在线时间
11 小时
 楼主| 发表于 2019-6-15 10:35:01 | 显示全部楼层
@正点原子   快来快来看一看
回复

使用道具 举报

2

主题

13

帖子

0

精华

新手上路

积分
31
金钱
31
注册时间
2019-5-19
在线时间
11 小时
 楼主| 发表于 2019-6-15 10:37:04 | 显示全部楼层
本帖最后由 ql125671817 于 2019-6-15 15:55 编辑

而且我的数据里面根本就没有CDEF这样的字母@正点原子
回复

使用道具 举报

2

主题

13

帖子

0

精华

新手上路

积分
31
金钱
31
注册时间
2019-5-19
在线时间
11 小时
 楼主| 发表于 2019-6-15 15:34:50 | 显示全部楼层
本帖最后由 ql125671817 于 2019-6-15 15:55 编辑

@正点原子 帮帮忙!!
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2019-6-16 02:14:19 | 显示全部楼层
20K内存, 建议降低摄像头输出分辨率。你先搞个高内存的MCU调通先吧。
回复

使用道具 举报

2

主题

13

帖子

0

精华

新手上路

积分
31
金钱
31
注册时间
2019-5-19
在线时间
11 小时
 楼主| 发表于 2019-6-16 08:51:11 | 显示全部楼层
正点原子 发表于 2019-6-16 02:14
20K内存, 建议降低摄像头输出分辨率。你先搞个高内存的MCU调通先吧。

jpeg输出的话我感觉 800*600的分辨率 20K内存也是够用的呀
回复

使用道具 举报

2

主题

13

帖子

0

精华

新手上路

积分
31
金钱
31
注册时间
2019-5-19
在线时间
11 小时
 楼主| 发表于 2019-6-16 09:04:33 | 显示全部楼层
正点原子 发表于 2019-6-16 02:14
20K内存, 建议降低摄像头输出分辨率。你先搞个高内存的MCU调通先吧。

我都降低到 40 * 40的分辨率了 OV2640_OutSize_Set(40,40)
然后初始化的时候 选择的是uvga 800*600的配置,其他的一样,
调了非常久,发现数据开头都是1B 10结尾都是1B 11
我感觉是摄像头模组坏了,不然就是我板子坏了= =
回复

使用道具 举报

2

主题

13

帖子

0

精华

新手上路

积分
31
金钱
31
注册时间
2019-5-19
在线时间
11 小时
 楼主| 发表于 2019-6-19 21:05:37 | 显示全部楼层
@正点原子 没辙了没辙啦!
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2019-6-20 01:53:40 | 显示全部楼层
ql125671817 发表于 2019-6-16 09:04
我都降低到 40 * 40的分辨率了 OV2640_OutSize_Set(40,40)
然后初始化的时候 选择的是uvga 800*600的 ...

下载我们例程,你试试看能显示么?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

2

主题

13

帖子

0

精华

新手上路

积分
31
金钱
31
注册时间
2019-5-19
在线时间
11 小时
 楼主| 发表于 2019-6-20 19:49:30 | 显示全部楼层
正点原子 发表于 2019-6-20 01:53
下载我们例程,你试试看能显示么?

就是照着你的F103ZET6改的呀 TAT

void ov2640_speed_ctrl(void)
{
        u8 clkdiv,pclkdiv;                        //时钟分频系数和PCLK分频系数
        clkdiv=1;
        pclkdiv=23;
        SCCB_WR_Reg(0XFF,0X00);               
        SCCB_WR_Reg(0XD3,pclkdiv);        //设置PCLK分频
        SCCB_WR_Reg(0XFF,0X01);
        SCCB_WR_Reg(0X11,clkdiv);        //设置CLK分频       
}

void ov2640_jpg_photo()
{

        u32 i=0;
         u32 jpeglen=0;  // 行数统计
        for(i=0;i<10;i++)                //丢弃10帧,等待OV2640自动调节好(曝光白平衡之类的)
        {
                while(OV2640_VSYNC==1);         
                while(OV2640_VSYNC==0);          
        }  
        while(OV2640_VSYNC==1)        //开始采集jpeg数据
        {
                        while(OV2640_HREF)
                        {  
                                while(OV2640_PCLK==0);
                                ov2640_framebuf[jpeglen++]=OV2640_DATA;
                                while(OV2640_PCLK==1);  
                                num++;
                        }
        }

  Wifi_SendData_Picture(NULL, (char *)ov2640_framebuf, num );
  myfree(SRAMIN,ov2640_framebuf); //释放内存
}
int main()
{
        while(OV2640_Init());
        my_mem_init(SRAMIN);   
        ov2640_framebuf=mymalloc(SRAMIN,10*1024);//申请帧缓存
        OV2640_JPEG_Mode();                                                        //切换为JPEG模式
        OV2640_OutSize_Set(320,240);
        ov2640_speed_ctrl();
        delayms(1000);
       ov2640_jpg_photo();
}
回复

使用道具 举报

2

主题

13

帖子

0

精华

新手上路

积分
31
金钱
31
注册时间
2019-5-19
在线时间
11 小时
 楼主| 发表于 2019-6-20 19:52:48 | 显示全部楼层
正点原子 发表于 2019-6-20 01:53
下载我们例程,你试试看能显示么?

我是直接用wifi把读到的数据发出来的,不过在keil的Debug里面看ov2640_framebuf的内容
第一个字节每次都是0x1B,不论怎么调试
回复

使用道具 举报

2

主题

13

帖子

0

精华

新手上路

积分
31
金钱
31
注册时间
2019-5-19
在线时间
11 小时
 楼主| 发表于 2019-6-20 20:11:28 | 显示全部楼层
本帖最后由 ql125671817 于 2019-6-20 20:13 编辑
正点原子 发表于 2019-6-20 01:53
下载我们例程,你试试看能显示么?

我的数据接受口是这样定义的:
[mw_shl_code=c,true]#define OV2640_DATA   GPIOB->IDR & 0xf01b  //0x00FF        //数据输入端口 15 14 13 12 4 3 1 0   1111 0000 0001 1011
GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;
        //PB 15 14 13 12 4 3 1 0 输入 上拉
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
        GPIO_Init(GPIOB, &GPIO_InitStructure)
uxga[/mw_shl_code]
然后我因为没有采用SXGA1600*1200的分辨率,所以我修改了ov2640 init()中的:
        //初始化 OV2640,采用UVGA 800*600  SXGA分辨率(1600*1200)  
[mw_shl_code=c,true]for(i=0;i<sizeof(ov2640_uxga_init_reg_tbl)/2;i++)
        {
                   SCCB_WR_Reg(ov2640_uxga_init_reg_tbl[0],ov2640_uxga_init_reg_tbl[1]);
        }
改成了uxga[/mw_shl_code]

其余都没有改变。

一开始我以为是硬件问题,后来我又在你的淘宝店上买了一个ov2640,发现还是这问题。
我测试了引脚是不是有问题,引脚接地-LED灯亮实验,证明引脚是好的。

我又觉得是不是内存开得有问题,因为只有20K的SRAM,所以在malloc.c里面改成了:
[mw_shl_code=c,true]#define MEM1_BLOCK_SIZE                        32                      //内存块大小为32字节
#define MEM1_MAX_SIZE                        15*1024                                                  //最大管理内存 20K
#define MEM1_ALLOC_TABLE_SIZE        MEM1_MAX_SIZE/MEM1_BLOCK_SIZE         //内存表大小[/mw_shl_code]
[/mw_shl_code]
已经没辙了,哭哭。

已经不知道还有什么地方可以修改了,接线我都检查非常多次了 = =

回复

使用道具 举报

18

主题

99

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
465
金钱
465
注册时间
2016-1-20
在线时间
89 小时
发表于 2019-8-8 15:34:42 | 显示全部楼层
ql125671817 发表于 2019-6-20 20:11
我的数据接受口是这样定义的:
[mw_shl_code=c,true]#define OV2640_DATA   GPIOB->IDR & 0xf01b  //0x0 ...

你好请问 问题解决了吗
回复

使用道具 举报

4

主题

9

帖子

0

精华

初级会员

Rank: 2

积分
65
金钱
65
注册时间
2019-8-2
在线时间
28 小时
发表于 2019-10-17 14:37:42 | 显示全部楼层
问题怎么解决的啊
回复

使用道具 举报

0

主题

8

帖子

0

精华

新手上路

积分
46
金钱
46
注册时间
2018-7-26
在线时间
10 小时
发表于 2019-12-2 17:41:21 | 显示全部楼层
我的问题是帧同步没有变化,行同步却没问题,快弄死了
回复

使用道具 举报

17

主题

63

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
402
金钱
402
注册时间
2020-5-8
在线时间
153 小时
发表于 2020-6-12 07:00:41 | 显示全部楼层
        SCCB_WR_Reg(0XFF,0X00);
        SCCB_WR_Reg(0XD3,30);  //设置PCLK分频
        SCCB_WR_Reg(0XFF,0X01);
        SCCB_WR_Reg(0X11,0X1);   //设置CLK分频
我的这样很好
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-10 13:15

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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