搞了一天了,浏览了各大网站,终于让我读成功了,记录一下这个时刻

总结:
1.接线:(总共7根)
除SCCB所需四根线
GND — GND
3.3V ---- 3.3V
PD0—SCL
PD1—SDA

还有
PWDN----PE5 拉高
RET ---- 拉高
看到这篇帖子OV7670读出的ID值为0x00,SCCB_SDA脚为0.5V,拉不高

XCLK—PC6 24MHz pwm
最重要的是OV7670的系统时钟线XCLK ,用STM32输出个最大25MHz的时钟,我用TIM3输出PWM波 ARR =2 PSC=0,频率为24MHz,比较值为1,占空比为1/3,本来以为不行,看来可以。

2.SCCB延时(100us),应该不是这个原因,50us也读成功了
3.写Ox12,之后延时3s
SCCB_WR_Reg(0x12,0x80);
delay_ms(3000);(这个延时好像也无所谓,我去掉之后也能读)
4.SCL SDA 推完输出 SDA上拉输入
5.有人说要上拉电阻,我的没接也可以读
6.重要代码部分

//SCCB.c
#include "SCCB.h"
#define SCCB_SCL BITBAND_REG(GPIOD->ODR,0)
#define SCCB_SDA BITBAND_REG(GPIOD->ODR,1)
#define SCCB_READ_SDA GPIO_ReadInputDataBit(GPIOD,GPIO_Pin_1)void SCCB_GPIO_Init(void)
{GPIO_InitTypeDef  GPIO_InitStruct;RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOD, ENABLE );GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_InitStruct.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1;GPIO_Init( GPIOD, &GPIO_InitStruct );
}void SCCB_SDA_IN(void)
{GPIO_InitTypeDef  GPIO_InitStruct;RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOD, ENABLE );GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IPU;GPIO_InitStruct.GPIO_Pin = GPIO_Pin_1;GPIO_Init( GPIOD, &GPIO_InitStruct );
}
void SCCB_SDA_OUT(void)
{GPIO_InitTypeDef  GPIO_InitStruct;RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOD, ENABLE );GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_InitStruct.GPIO_Pin = GPIO_Pin_1;GPIO_Init( GPIOD, &GPIO_InitStruct );
}
void SCCB_Start(void)
{SCCB_SDA=1;       SCCB_SCL=1;        delay_us(100);SCCB_SDA=0;delay_us(100);     //并不是必须为50us,不要太短即可SCCB_SCL=0;
}void SCCB_Stop(void)
{SCCB_SDA=0;delay_us(100);  SCCB_SCL=1;   delay_us(100); SCCB_SDA=1; delay_us(100);
} u8 SCCB_WR_Byte(u8 dat)//写1个相
{u8 j,res;   for(j=0;j<8;j++) //循环发送bit7-bit0{if(dat&0x80)SCCB_SDA=1;    else SCCB_SDA=0;dat<<=1;delay_us(100);SCCB_SCL=1;  delay_us(100);SCCB_SCL=0;         }             SCCB_SDA_IN();     //设置SDA为输入delay_us(100);SCCB_SCL=1;            //将SCL置1,此时如果数据已被从机接收,从机将把SDA置0delay_us(100);if(SCCB_READ_SDA)res=1;  //SDA置1,说明从机没有成功接收数据else res=0;         //发送成功SCCB_SCL=0;      SCCB_SDA_OUT();        //设置SDA为输出,为下一个相的输出作准备  return res;
}   u8 SCCB_WR_Reg(u8 reg,u8 data)
{u8 res=0;SCCB_Start();                    //启动传输的标志if(SCCB_WR_Byte(SCCB_ID))res=1;   //写入OV7670传感器ID   delay_us(100);if(SCCB_WR_Byte(reg))res=1;        //写寄存器地址delay_us(100);if(SCCB_WR_Byte(data))res=1;     //写要向寄存器写入的数据SCCB_Stop();                   //结束传输的标志return res;
}       void SCCB_No_Ack(void)
{delay_us(100);SCCB_SDA=1; SCCB_SCL=1;    delay_us(100);SCCB_SCL=0;  delay_us(100);SCCB_SDA=0;  delay_us(100);
}u8 SCCB_RD_Byte(void)
{u8 temp=0,j;    SCCB_SDA_IN();        //设置主机SDA连接的IO口为输入for(j=8;j>0;j--)  //循环读取bit7-bit0{                  delay_us(100);SCCB_SCL=1;temp=temp<<1;if(SCCB_READ_SDA)temp++;   //SCCB_READ_SDA是从IO口读到的数据delay_us(100);SCCB_SCL=0;}   SCCB_SDA_OUT();     //将主机连接SDA的IO口设置为输出  return temp;
}
u8 SCCB_RD_Reg(u8 reg)
{u8 val=0;//对应两相写操作SCCB_Start();               //启动传输SCCB_WR_Byte(SCCB_ID);  //相1        delay_us(100); SCCB_WR_Byte(reg);    //相2  delay_us(100);SCCB_Stop();             //结束传输delay_us(100); //对应两相读操作SCCB_Start();            //启动传输SCCB_WR_Byte(SCCB_ID|0X01);      //相1delay_us(100);val=SCCB_RD_Byte();         //相2SCCB_No_Ack();            //读取完8bit数据后的应答SCCB_Stop();              //结束传输return val;
}
//SCCB.h
#ifndef __SCCB_H__
#define __SCCB_H__#include "system.h"#define SCCB_ID 0X42 //器件地址void SCCB_GPIO_Init(void);
void SCCB_SDA_IN(void);
void SCCB_SDA_OUT(void);
void SCCB_Start(void);
void SCCB_Stop(void);
u8 SCCB_WR_Byte(u8 dat);
u8 SCCB_WR_Reg(u8 reg,u8 data);
void SCCB_No_Ack(void);
u8 SCCB_RD_Byte(void);
u8 SCCB_RD_Reg(u8 reg);
#endif
//main.c
#include "SCCB.h"
#include "usart.h"
#include "led.h"//LED 接在PE5,PB5上
int main()
{u8 ID=0;USART1_Configuration(115200);led_init();PEOut(5) = 1;PBOut(5) = 0;TIM3_PWM_Init(2,0); //arr = 2 psc = 0  24MHz TIM_SetCompare1(TIM3,1);SCCB_GPIO_Init();printf("initing....\r\n");SCCB_WR_Reg(0x12,0x80);  delay_ms(3000);ID = SCCB_RD_Reg(0x0a);printf("ID=%X\r\n",ID);while(1){       }
}

可以 下一步了!!!

ov7670读取ID成功(不带FIFO),记录注意事项相关推荐

  1. 用20块的摄像头(不带fifo的OV7670)做WiFi实时传图小车

    博客地址 用20块的摄像头(不带fifo的OV7670)做WiFi实时传图小车 – Infinite's Blog 零.导读 在这篇文章中,你将看到如下内容: OV7670 QVGA配置的注意事项: ...

  2. OV7670带FIFO入坑指南

    本文针对带FIFO的OV7670摄像头模块进行说明. 对于新手入坑OV7670摄像头的小白来说,入坑之路漫漫,最坑爹的是不知道入口在哪里~~下面就来简单的说一下我这几天的实验心得. 什么是带FIFO的 ...

  3. STM32F103C8T6+带FIFO的OV7670的输出测试图像实例代码

    一.工程文件链接及说明 Keil5工程文件: 链接:https://pan.baidu.com/s/13wCMPQU0DgbJ57sSiR16NQ?pwd=7670 提取码:7670 工程文件中,主要 ...

  4. 基于STM32F407的摄像头(不带FIFO的OV7670)图像采集及LCD显示实验-笔记整理

    硬件说明 STM32F4开发板 stm32f4系列的芯片处理的能力可以说非常强大了的,而且内部还自带有数字摄像头接口(DCMI),可以说stm32f407的核心板和不带FIFO的摄像头模块OV7670 ...

  5. rt-thread通过spi连接W25Q32后无法读取ID

    注意,cs引脚必须由rtt控制,但是我这个cs引脚用的是PA15,它默认是jlink的引脚,所以首先要将jlink禁用,如下: rcu_periph_clock_enable(RCU_AF);rcu_ ...

  6. asp 随机读取ID之Access

    我在用ASP连接access 这个桌面数据库的时候,有时候要随机读取ID,传统的办法是: select top 3 * from tablename order by Rnd(ID) 但这样不行,默认 ...

  7. 超宽带高速记录回放系统的分类和使用方法的高速数据采集卡的分类和使用方法

    8bit 1GS/s 高速数据采集卡 产品编号:HSDAQ9870 规 格:8bit 1GS/s 高速数据采集卡 及专用高性能磁盘阵列服务器系统 产品类别:高速数据采集卡 Product charac ...

  8. C# 服务端(API)连接 安卓设备 读取 IC卡(仅读取ID),RFID卡(包含ID卡),获取卡号(10进制)

    处理安卓设备NFC读卡 C#WebAPI做服务端 APP使用 uni-app开发, 走了不少弯路,这里记录一下 获取 卡10进制ID的方法 商米POS.安卓移动设备(手机)通过NFC功能 读取 IC卡 ...

  9. 8bit 1GS/s 高速数据采集卡超宽带高速记录回放系统的分类和使用方法

    8bit 1GS/s 高速数据采集卡 产品编号:HSDAQ9870 规 格:8bit 1GS/s 高速数据采集卡 及专用高性能磁盘阵列服务器系统 产品类别:高速数据采集卡 Product charac ...

最新文章

  1. 写给小白看的硬核递归(低调点,当回小白)
  2. [Python图像处理] 三十五.OpenCV图像处理入门、算数逻辑运算与图像融合(推荐)
  3. 输出该数二进制表示中1的个数。求取十进制数字元素1的个数 (3种方法)
  4. Taro+react开发(94):问答模块01
  5. Power Bi:零售数据可视化
  6. 文件服务和对象存储服务器,对象存储与块存储服务
  7. ps还原上一步快捷键_ps怎么返回上一步?PS返回上一步快捷键
  8. 单表置换加密matlab,单表置换密码
  9. 有关H5第六章的背景与阴影介绍
  10. java实现中国象棋 源代码
  11. Python XML文件快速排版
  12. 腾讯20岁生日前夕,给了自己一个改变
  13. Japanese(Shift-Jis)的编码范围
  14. html添加启动项,电脑BIOS启动项怎么设置?bios设置启动项图解
  15. Python递归函数应用之计算阶乘
  16. GUID分区与MBR分区有什么区别? 操作系统知识
  17. Navicat使用指南(一)
  18. 15款值得推荐的思维导图(心智图 )工具
  19. 第三方支付平台:银联在线支付
  20. MPLS TE CSPF

热门文章

  1. 64位系统控件注册方法
  2. PHP内置函数file_put_content(),将数据追加写入文件
  3. alsa框架与音频芯片移植基础
  4. 服务器消息7995,修复sql2000数据库置疑时出现的错误.docx
  5. 阿里云云服务器Kibana配置血泪史
  6. 基于密度聚类的新闻热点发现实现步骤
  7. 有没有大佬帮帮我哦,看不懂这个题欸
  8. 【MASM】hello world
  9. 简记一次计算机系统课程实验-RISCV流水线处理器设计与实现
  10. java eclipse字体大小设置_eclipse字体大小如何设置-eclipse字体大小设置方法 - 河东软件园...