完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我的目的很简单,就是利用stm32F4 驱动摄像头在我的ILI9341显示屏(240*320分辨率)上显示画面。
把我手头上的器件图先给出把,换一种叙述的方式。 在刚拿到这原理图是,其实是很懵的,虽然现在也没有多少的理解,但是这摄像头毕竟和淘宝上千篇一律的并不同,正点原子的那批带FIFO AL422B芯片,价格也偏高。 看过了很多篇OV7725的文章之后,我开始纠结实物上器件的布局。 因为我发现无论是我手头上的这个二手(同学那拿来的,不知道是不是野火的) 还是淘宝上看到的实物图,都没有发现晶振这玩意,这就导致我特别纠结,XCLK的来源在哪,反复看来看去,也不可能是外部输入的。后来看到这摄像头模块上的两个螺丝,本以为摄像头是焊牢在表面,其实并不是,拆开之后看到了新世界: 想起来我之所以纠结这个,是因为之前照着正点原子STM32F1 相关的OV7725寄存器配置,用逻辑分析仪得出的波形特别不对劲,这里也就不浪费时间再弄出那些没意义的时序图了,(有空的话,贴上来把),等下贴正确的时序。在此顺便表达下我的想法,因为不论是TFT_LCD显示屏,还是这种摄像头,做32单片机教程的人总是喜欢将各种各样型号的lcd或者摄像头全部集成在一个工程里,而对于我们初学者,往往摄像头就只有一个,显示屏也只有一块,看到那复杂的工程真是令人头大。 所以我现在所做的即从最简单的代码开始,之前对我手头上另一块R91506V3的普中屏有了一定的了解,这块LCDILI9341的显示屏有点不同,第一步就得理清楚,屏幕和摄像头哪些配置是必须的,哪些无关紧要(或者说为了更高级功能的开发), 初学者就是得往简单的方面做起。写下这段话的时候,我还没有将显示屏的代码进行优化,(我发现商家写的代码过于冗杂),所以一定会想办法裁剪出合适的最小代码版。 现在的进度还停留在显示屏可以正常显示图片,这一函数很重要,有些商家给的工程代码里并没有LCD_ShowPicture()函数,得率先理解那个函数里面的代码,毕竟是图像视频流的基础把。 以上的基本也算是废话,讲点正题: 相信如果有人能看我这帖子,一定也对QVGA Frame时序有了一定的了解,摘自OV7725_datasheet 这个图,首先是存在问题的,QVGA的分辨率是320x240,那么最上面那个1240数字笔误,应当修正为240,同时这里得理解分辨率,320是水平像素点320个,垂直像素点为240个,而不是我之前一直以为的320行 240列,这里刚好反了一下。 如果上面那个图理解了的话,这个图绝对是存在问题的, 而网上杂七杂八的教程根本没有讲到特别重要的一个细节: 即PCLK时钟输出, 并不是固定在某一频率的, 而是在HREF的高电平期间,才输出我们通过SCCB向摄像头配置好的PCLK频率。 口说无凭,我用我那坚强的24MHz的逻辑分析仪抓取了摄像头的输出时序,VSYNC,HSYNC,PCLK 这里设置的是QVGA输出,PCLK = 12MHz,也就是tpclk = 1/12MHz 这里特别需要注意的是,最下面的PCLK并没有参考意义,因为毕竟我的逻辑分析仪采样率只有24MHz,显然是无法显现出12MHz的PCLK信号的,具体采样率和能显示的频率之间,还是一知半解的。 看到VSYNC的频率为37.4,也就是我们常说的帧率fps37.4,算法如下: 278 x 576 x 2 / 12M = 26.688ms 看的出来跟图上的26.305ms相差并不大 上图是HSYNC的波形,看的出来,在HSYNC期间,PCLK开始会将数据进行输出,高电平持续时间为: 320 x 2 /12MHz =53.33 us 和图上完全符合一致。 然后我们转至具体的寄存器配置,这里的SCCB函数的编写,用了原子哥F1里的, 只不过我们需要对GPIO口有所了解,以及F4和F1 GPIO配置接口的变化,这部分配置完,我用逻辑分析仪验证过是经得起使用的,但是以后肯定“手自笔录”,这段时间先能成功显示画面,后续一步一步改进。 讲道理,寄存器的配置,最重要的只有两个: CLKRC COM7 一个设置PCLK的输出频率(同时影响帧率) 另一个设置是QVGA 还是VGA RGB565的设置(也会影响帧率) 其他的寄存器,只是为了校准等其他花里胡哨的功能,等我后续再验证,只要上面两个设置好, 一个简单的复位命令,将寄存器里的值复位到默认值,我觉得并不会怎么太影响画面。不然你看下面这些,看起来实在是太冗杂了: 另外有关帧率的其他设置,其实还有EXHCL EXHCH这些很陌生的寄存器影响,具体目前也不是很清楚,后续再研究,所以不必纠结一定要设置,只要摄像头复位了,这些寄存器的值保持默认就一点关系都没有,即可以直接留几条重要的命令,省的麻烦。 同时网上还有说什么摄像头的eeprom不稳定,每次都得初始化的言论存疑?? 我重新读取了下,之前存进去的数据,并没有出现重新上电(注释掉OV7725初始化函数)之前配置数据丢失的情况,eeprom不是出了名的掉电不丢失数据吗?待验证。。。 所以目前的进度到这,虽然离显示画面还挺遥远的,但是方向很重要, 下一步不是将画面同步到显示屏上,而是打算先利用中断取一帧画面传到电脑上, 估摸着用串口传输,240*320*2个字节数据要在53.3us内采集出来,不知道会遇到什么困难险阻,哎,可能后续会用上DMA(现在也还是不熟悉),或者直接GPIO口read,用寄存器操作速度快一点,同时现在对时钟树不了解,肯定得进一步提高语句执行的速度的,以及那让人现在有点忘而却步的DCMI接口,先试试看GPIO采集,后续也一定要融合出多种版本的, 只要这一步成了,其实距离动态显示画面也不远了。 ps,在纠结摄像头前几天,倒是用IO口模拟出R61509V显示屏的时序,其实真的很简单。后续再重新自己配置FSMC 加油把。 2019.9.19: 摄像头借的,不得已得还回去,连JLink调试器都没了,暂时搁置这个工程了,等自己的ILI9341和R61509V3接口的转接板到了,先行鼓捣下ILI9341在普中的stm32F103上的驱动显示(毕竟那个开发板还有一键USB下载,自己最小的F4开发板并没有串口下载的驱动),能和R61509V一样方便之后,再重新买个OV7670不带FIFO,淘宝20块的那种继续研究把。。。另外似乎上述的OV7725是专门硬件二值化的?所以不知道 原理图下三个数字芯片的功能怎么实现的??? |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1113 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1134 浏览 1 评论
569 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
424 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1020 浏览 2 评论
1611浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
277浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
288浏览 3评论
272浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
247浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-8-19 22:21 , Processed in 0.673085 second(s), Total 46, Slave 40 queries .
Powered by 电子发烧友网
© 2015 www.ws-dc.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号