STM32 驱动OV7670 详解(一)- 硬件和上位机资源

以下内容基于 STM32F103C8T6 Blue Pill 板子 + OV7670 摄像头(带 AL422B FIFO 模块)。

【其实驱动摄像头并不复杂,但是融合了 GPIO、中断、串口、I2C 等等内容,不失为一种学习 STM32 基础开发的好方法。另外网上能找到的开发笔记也大多不全,或是纯粹的淘宝源代码并无注释,对初学者可能比较难以理解。因此记录一下整个开发过程和工具,希望对有需要的朋友能有所帮助】

首先是硬件选择,受限于成本,我没有选择各类 STM32 开发板,直接使用了最便宜的 STM32F103C8T6 Blue Pill,所有的线都通过杜邦线连接。这里要说明一下:之前看到有些资料上提到用杜邦线可能导致出现图像花屏、错位等现象,但我在实际开发中,使用的长度约 15cm 的杜邦线,也没有将 D0~D7 数据线单独分组,图像传输还是稳定的。因此用杜邦线的朋友可以参考,出现花屏很可能还是与程序本身有关,当然有条件用 PCB 走线代替杜邦线当然是最好的,毕竟杜邦线也存在接触不良的可能。

摄像头一侧是选择的 OV7670 摄像头带 AL422B FIFO。关于为什么要选择带 FIFO 的,网上还是有很详细的说明,不过有些提到是因为 STM32F103 系列的只有 20KB SRAM 是不太正确的。其实如果不需要把图像存下来,只是做一个显示的话 20KB SRAM 并不是限制,最大的限制是在于 STM32F103 的 GPIO 翻转速率。参考这篇博客STM32 IO口翻转速度测试报告 的测试记录,GPIO 最大的翻转速率也就是 12MHz,但是 OV7670 的时钟速率就已经是 24MHz了,所以 STM32F103 的 IO 速率是跟不上 OV7670 的数据输出速率的,这才是要使用 FIFO 的根本原因。

当然,网上我看到也有一些通过 STM32 自带的 DCMI 外设来实现不需要 FIFO 也可以驱动摄像头,但是对于 STM32F103 系列的而言是没有这个外设的。因此,我还是选择了带有 FIFO 的摄像头。

硬件的选择就是这样了,开发环境上我是选择了用上位机来显示图像,本来一开始是打算用 128×160 的 LCD 屏幕的,但是连完摄像头之后发现能用的 IO 口资源已经很少了,再加上调试也不方便,就还是选择了上位机,对于初学者建议还是用上位机能更好的调驱动摄像头的问题。说到上位机,网上下载到的很多上位机可能不支持 RGB565 的传输格式,很多是 YUV 的,所以在用的时候一定要注意区分,否则无法正确的看到图像。另外就是上位机使用时一般会有一个图像传输起始和中止的标志位,每家的上位机也不一样,一定要注意,否则也无法看到图像。

我用的是上位机是山外调试助手(V1.1.9),这个应该直接在bing上搜索就能下载到,还是附上我下载的连接吧 山外调试助手下载,它支持 RGB565 格式的数据。

到目前为止,所有的硬件和开发环境就介绍完了,下一节就开始介绍驱动代码了。

你可能感兴趣的:(STM32)