前言:之前因为贪图便宜买了一个7块钱的ov7670摄像头,然后想用我的stm32开发板驱动起来结合rtthread做个小项目出来,但是一路上遇到了许多问题,最终没能成功,在此记录一下用stm32驱动ov7670的过程

项目框架如下:

现阶段只能驱动起lcd屏幕,在摄像头驱动这一步卡住了。

屏幕部分:

液晶控制器芯片为NT35510,NT35510 控制器根据自身的 IM[3:0] 信号线电平决定它与 MCU 的通讯方式,它本身支持 SPI 及8080 通讯方式,本示例中液晶屏的NT35510 控制器在出厂前就已经按固定配置好 (内部已连接硬件电路),它被配置为通过 8080 接口通讯,使用 16 根数据线的 RGB565 格式,且背光 LED 引脚不与 NT35510 相连,而是直接引出到排针供外部控制器控制。

电容屏含触控IC 型号为GT917S ,它接收触摸屏的信号进行处理,把触摸信息使用 I2C接口输出到 STM32 等控制器,前期屏幕仅做显示,后期添加操作系统以及触控

电容屏引脚与开发板引脚连接图:

引脚说明:

信号线 NT35510对应信号线 说明
LCD_DB[15:0] DB[15:0] 数据信号
LCD_RD RDX 读数据信号,低电平有效
LCD_RS D/CX 数据/命令信号,高电平时,D[15:0] 表示的是数据,
LCD_RESET RESX 复位信号,低电平有效
LCD_WR WRX 写数据信号,低电平有效
LCD_CS CSX 片选信号,低电平有效
LCD_BK 背光信号,低电平点亮
RST 与触摸 IC 相连 触摸 IC 的复位引脚
INT 与触摸 IC 相连 触摸 IC 的中断信号引脚
SCL 与触摸 IC 相连 触摸 IC 的 IIC 总线的时钟信号
SDA 与触摸 IC 相连 触摸 IC 的 IIC 总线的数据信号

带x表示低电平有效

屏幕的使用方式:

可以通过IO口模拟8080通信时序,但是IO口速度慢,同时STM32的外设FSMC通信协议与8080时序类似,只需稍微修改一下即可使用。

摄像头部分:

摄像头使用OV7670

实物图

SCCB协议与IIC协议基本相同,通过该协议发送控制信号,

注意:SCCB协议在接收到读寄存器的命令后不会发送应答信号,所以使用HAL库的HAL_I2C_MemRead函数会出现卡住的情况。

OV7670内部芯片管脚图

功能框图

引脚图

时钟

首先是时钟的问题,因为ov7670本身没有晶振,需要外接晶振或者其他时钟信号给XCLK引脚提供24MHz的时钟信号,这里使用的是STM32的MCO1,

注意:亲测必须使用24MHz的频率,此时读取的设备ID跟OV7670数据手册上的数值才会一致,频率过高或过低会出现读取的ID与数据手册不一致的情况。

SCCB通信协议

SCCB用于读取/写入寄存器,控制OV7670的参数以及模式
具体参考数据手册的寄存器部分

SCCB通信协议与I2C类似,只需要将对应的I2C引脚初始化即可。

DCMI

DCMI是数字摄像头接口,用于摄像头与主控之间的数据传输。我就是在这一步卡住的。在初始化DCMI与DMA并且确保摄像头初始化成功且DCMI的GPIO有数据后,首先发现DMA不能正常传输数据,上网查了一下,1,说是HAL自动生成的初始化代码会导致DMA不能正常开启,但是修改代码后还是读取不到数据。2,然后继续往上排查,我把DCMI数据寄存器的值打印出来发现里面的值是空的,说明DCMI没有接收到数据。但是我通过打印DCMI的数据传输的GPIO后发现GPIO的电平是由变化的,说明摄像头向DCMI发送数据了,但是DCMI并没有接收到,说明是DCMI的问题。网上有关DCMI的资料比较少,所以暂时先不研究了,在这一步卡了太久,有点浪费时间了。
----------------------------------------------------------------------------------------------------
改了一下DCMI的PCLK极性和垂直同步信号的极性后DCMI的DR寄存器里面有值了,但是DMA还是没法传输数据
DCMI的初始化代码如下

  hdcmi.Instance = DCMI;hdcmi.Init.SynchroMode = DCMI_SYNCHRO_HARDWARE;hdcmi.Init.PCKPolarity = DCMI_PCKPOLARITY_RISING;hdcmi.Init.VSPolarity = DCMI_VSPOLARITY_HIGH;hdcmi.Init.HSPolarity = DCMI_HSPOLARITY_LOW;hdcmi.Init.CaptureRate = DCMI_CR_ALTERNATE_4_FRAME;hdcmi.Init.ExtendedDataMode = DCMI_EXTEND_DATA_8B;hdcmi.Init.JPEGMode = DCMI_JPEG_DISABLE;

STM32F4驱动OV7670总结相关推荐

  1. stm32F4驱动MCP41010程序-数字电位器-应用详解

    1. MCP41010简介 256抽头,数字电位器. 有三种总电阻阻值型号,10kΩ.50kΩ.100kΩ.tb上买到的绝大多数都是10kΩ. 三线SPI通信. 2. 应用领域 音响.功放 使用数字电 ...

  2. STM32驱动OV7670(无FIFO)相关问题的解决

    STM32驱动OV7670(无FIFO)相关问题的解决 文章目录 STM32驱动OV7670(无FIFO)相关问题的解决 前言 一.OV7670大体介绍与需要关注的点 二.遇到的问题及解决 1.引脚冲 ...

  3. STM32驱动代码:STM32F4驱动7针0.96寸OLED显示字符、汉字

    STM32F4驱动7针0.96寸OLED显示字符.汉字 适用于stm32f1.stm32f4移植 工程资料链接:STM32F4驱动7针0.96寸OLED.rar 一. 代码效果 二.硬件准备 1.准备 ...

  4. 【Verilog】FPGA驱动Ov7670/Ov7725搭建视频通路(RGB565、灰度图)

    一.课题功能指标要求 (一)课程目的 • 加深对数字电路时序的理解: • 掌握 OV 系列摄像头输出时序: • 掌握 I2C 总线时序,以及使用 verilog 驱动三态门的方法: • 掌握数字系统设 ...

  5. stm32驱动 ov7670发送到串口上位机显示图像

    所需硬件: 1.stm32 103ZET6核心板,没有lcd(调试摄像头一定要买一个lcd,太方便了,都是泪): 2.OV7670带FIFO淘宝一搜一大把最常见的那种: 驱动代码:参考正点原子官方例程 ...

  6. stm32f4驱动enc28j60(吐槽篇)

    鼓捣enc28j60这个模块过程还是比较曲折的! 买这个模块的时候,卖家只附送了51的驱动工程.或者说,就51的工程能用! 在51上,一编译一下载就搞定了! ===================== ...

  7. 【干货】老外的GitHub整理的stm32f4驱动库

    昨晚在github发现了一个老外自己整理的封装库,有很多,比如一些通讯啊啥的,一些显示屏驱动等等 目录 STM32F4 Libraries and projects Here are listed a ...

  8. STM32F4驱动NEC协议的红外接收头

    红外遥控是一种无线.非接触式控制技术,具有抗干扰能力强.传输可靠.价格便宜.功耗低.易实现等优点.被很多的家用电器所采用.目前常用的红外遥控器协议有NEC协议(PWM脉冲宽度调制).Philips R ...

  9. STM32F4驱动42步进电机(采用驱动器)

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 器件 实物 接线 TB6600拨码卡关 代码说明 main.c 代码如下(示例): main.c 代码(极简版) step_ ...

最新文章

  1. python输出一个月日历表_关于python一个月总结
  2. Deep Learning – Review by LeCun, Bengio, and Hinton
  3. 解决Sharepoint每天第一次打开速度慢的问题
  4. linux系统wget、curl终端命令行获取公网ip地址及其他网络信息
  5. JS判断相等或者不等于(==、===、!=、!==)运算符
  6. PHP实现上传文件并存进数据库的方法
  7. Q125:PBRT-V3,对比VolPathIntegrator::Li()和EstimateDirect()判断Medium的方式
  8. Android TextView用drawableLeft时,改变文字和图片间的距离
  9. (转)c# Invoke和BeginInvoke区别
  10. c/c++中关于sizeof、strlen的使用说明
  11. 【Android RTMP】RTMP 数据格式 ( FLV 视频格式分析 | AVC 序列头格式解析 )
  12. 国内著名高校飞跃手册整理
  13. Postman下载安装
  14. 计算机专业辐射,电脑辐射主要来源在哪——专业实测让你弄个明白
  15. Debian回收站无法删除解决
  16. LTE终端能力等级 Category
  17. 简单好用的js 压缩工具
  18. CS 与 PS 的区别
  19. Java获取某个日期前后几天日期
  20. ImageIo类常用方法以及图片操作

热门文章

  1. Python 读取Excel文件并把相关信息@给相应的微信好友
  2. 浙江省计算机等级考试c语言,浙江省高校计算机等级考试二级(C语言.doc
  3. python 3d图如何改变视角_2D变3D,视角随意换,神还原高清立体感,还是不用3D建模的那种 | 代码数据开源...
  4. 语义分割标注方式和指标
  5. 大众mpv_买别克GL8请等一等,大众商务MPV要来了长超5.3米,或售30万起
  6. MicroStrategy软件工程师职…
  7. android盒子分屏,分屏智投投屏神器免费版 1.7.4 安卓免费版
  8. python中sum()的用法
  9. ruoyi后台管理系统分析(六)----system包
  10. 03Vue3-模板语法