发新帖本帖赏金 10.00元(功能说明)我要提问
返回列表
打印
[STM32F4]

【F446RE开发板试用】ov2640+DCMI——失败的尝试

[复制链接]
5064|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
wu1169668869|  楼主 | 2015-10-2 10:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
首先感谢21家给的这次试用的机会,让自己能够体验下F446的高端性能,在此由衷的感谢21家,感谢论坛。
本工程部分参考和复制了正点原子F4系列教程的DCMI源码,在此提出感谢,也不算用于了商业活动,仅用于内部交流。


首先非常不好意思用了这样一个标题,显然这不是一个成功的实验。
鉴于搞了三天没能实现理想的效果,而且也没太多资料可以参考,这里就当个问题留给爱折腾的坛友们

0. 先扯扯淡吧STM32F446RET6作为一块64PIN的STM32,能集成DCMI可以算是一朵奇葩了(用cubemx选芯片,选中64脚分装,FSMC,FMC都变为不可选项,只有DCMI这项这么坚挺地存在= =,不知道有什么特殊用意)。使用DCMI+DMA,单片机就可以单纯靠硬件获取图像信息了,配合F4的高性能,非常适合做图像方面的小应用(我不知道具体能做什么...)

1.理想状态下DCMI读取、保存数据的方式:
(1)配置摄像头输出合适数据格式,如YUV、RGB或者JPEG;
(2)配置DCMI;
(3)配置DMA;
(4)开启DMA,开启DCMI,等待帧中断,读取图片。
有带FMC的多引脚芯片可以配置ov2640输出RGB格式的数据,直接使用DMA循环模式输出到TFT的显示缓存区。
64PIN不提供FMC,所以采用单片机内部sram保存JPEG数据,串口发送,电脑显示来测试。

2. 理想是丰满的然而现实是...
嗯怎么说,DCMI配置完成后完全没有动静啊喂
那就调试吧
根据ov2640输出,配置DCMI寄存器如下。

主要注意PCKPOL,HSPOL,VSPOL三个信号。这三个寄存器决定了DCMI采集图像的格式。
(这里是一些个人的理解,有理解不对的地方坛友们多多指教哈)
PCKPOL为0在像素同步信号下降沿读取图像数据,1为上升沿
HSPOL,行同步极性控制,为0则摄像头HSYNC=0期间的数据将被忽略;反之亦然
VSPOL,场同步极性控制,为0则摄像头VSYNC=0期间的数据将被忽略;反之亦然
手册中对这些寄存器描述如下:(446有专门的参考手册,虽然不知道有什么区别,这里用的第一版的英文手册)
Bit 7 VSPOL: Vertical synchronization polarity
This bit indicates the level on the VSYNC pin when the data are not valid(无效) on the
parallel interface.
0: VSYNC active low
1: VSYNC active high

Bit 6 HSPOL: Horizontal synchronization polarity
This bit indicates the level on the HSYNC pin when the data are not valid on the
parallel interface.
0: HSYNC active low
1: HSYNC active high
Bit 5 PCKPOL: Pixel clock polarity
This bit configures the capture edge of the pixel clock
0: Falling edge active.
1: Rising edge active.

实际测试得到的行场同步信号时序:


以上两图是OV2640配置为320*240大小JPEG输出时的时序(使用杜邦线连接,所以将摄像头的时钟降了很多。。先考虑功能实现)
从上到下分别是VSYNC、HSYNC、PCLK(场、行、像素)
于是可以配置
PCKPOL=0,下降沿读取数据
HSPOL=0,//实际调试只有这个置0 DCMI才能读取到数据,(个人感觉也可以直接接到固定电平,一旦时序确定了以后
VSPOL=0,低电平期间数据无效


到目前为止似乎都比较顺利(似乎似乎…显然我也不知道问题在哪= =
然后配置DMA

打赏榜单

21ic小喇叭 打赏了 10.00 元 2015-10-30

沙发
wu1169668869|  楼主 | 2015-10-2 11:11 | 只看该作者
重新开一楼好了

使能DCMI->CR的capture位(bit0)
Bit 0 CAPTURE: Capture enable
0: Capture disabled.
1: Capture enabled.
The camera interface waits for the first start of frame, then a DMA request is
generated to transfer the received data into the destination memory.
In snapshot mode, the CAPTURE bit is automatically cleared at the end of the
1st frame received.
In continuous grab mode, if the software clears this bit while a capture is
ongoing, the bit will be effectively cleared after the frame end.
Note: The DMA controller and all DCMI configuration registers should be
programmed correctly before enabling this bit.
这一位要等到最后使能!!!

配置JPEG控制位。以及fifo等配置…这里没动原子的程序
还要使能DCMI的帧结束中断。

DMA2Stream1对应进行配置,这个比较常规一点。

虽然支持双缓冲,这里先不折腾,能用就好。
这里修改为正常模式,即非循环模式。通过查询传输完成位确定图像传输完成。进行串口发送

3. 然后问题就来了。。。
这样配置DCMI并不会工作!!!
于是进入了调试,发现在enable DCMI之后
将VSPOL从1点击变为0,DCMI开始正常获取数据
然后就脑洞巨大的在程序中模拟这一过程。。

        OV2640_JPEG_Mode();                //JPEG模式
        My_DCMI_Init();                        //DCMI配置
        DCMI_DMA_Init((u32)&jpeg_buf,jpeg_buf_size,DMA_MemoryDataSize_Word,DMA_MemoryInc_Enable);//DCMI DMA配置
        OV2640_OutSize_Set(jpeg_img_size_tbl[size][0],jpeg_img_size_tbl[size][1]);//设置输出尺寸
        DCMI_Start();                 //启动传输
        delay_ms(1000);
        DCMI->CR &= (~(1<<7));

虽然粗暴了一点,确实可以出数据了,而且看着还算正确……

理论上配置OV2640DCMI以及DMA,然后坐着等数据就好了。实际上呢,应该也是可以的。只是个人不知道该怎么继续往下调了,在这做个记录吧。
目前只能实现DCMI捕获OV2640输出的一定长度的JPEG数据,通过串口1115200发送给电脑。然后整个程序就挂掉了,没跑飞但是没有什么动静有待进一步调试

使用特权

评论回复
板凳
wu1169668869|  楼主 | 2015-10-2 11:14 | 只看该作者
附上程序
实验35 摄像头实验 - stm_std.rar (566.04 KB) 图像串口.rar (177.33 KB)
个人感觉思路还算清晰
申请到板子并且手上有ov2640的可以试试

使用特权

评论回复
地板
lkl0305| | 2015-10-2 16:51 | 只看该作者
楼主的仪器很励害呀

使用特权

评论回复
5
wu1169668869|  楼主 | 2015-10-2 17:12 | 只看该作者
lkl0305 发表于 2015-10-2 16:51
楼主的仪器很励害呀

一个带16通道逻辑分析的示波器…
学生狗所以…学校的东西还是靠谱一点的:L

使用特权

评论回复
6
colin2135| | 2015-10-5 20:06 | 只看该作者
刚好也做做F446DCMI的试用分享,没想到楼主抢先一步发布出来了,哈哈,串口l图像上位机是自己写的吗?

使用特权

评论回复
7
wu1169668869|  楼主 | 2015-10-5 23:02 | 只看该作者
colin2135 发表于 2015-10-5 20:06
刚好也做做F446DCMI的试用分享,没想到楼主抢先一步发布出来了,哈哈,串口l图像上位机是自己写的吗? ...

移植都没移植好,找了两天不知道问题出在哪里…
也没有人可以请教的,,,就先分享出来了

还请层主分享能正常使用的!!!
(上位机是正点原子的教程里配套的软件,之前买的那个摄像头配的上位机也是一样的,只要发jpeg数据就能显示图像了)
感觉测试使用比较方便

使用特权

评论回复
8
colin2135| | 2015-10-6 12:54 | 只看该作者
wu1169668869 发表于 2015-10-5 23:02
移植都没移植好,找了两天不知道问题出在哪里…
也没有人可以请教的,,,就先分享出来了

不知道楼主移植出现了什么问题?请多多交流。我的已经能够正常使用,这两天编辑会发布出来。

使用特权

评论回复
9
colin2135| | 2015-10-9 15:04 | 只看该作者
wu1169668869 发表于 2015-10-2 11:11
重新开一楼好了

使能DCMI->CR的capture位(bit0)

https://bbs.21ic.com/icview-1156856-1-1.html 我的DCMI贴上来了,欢迎看看。

使用特权

评论回复
发新帖 本帖赏金 10.00元(功能说明)我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

83

帖子

0

粉丝