STM32读取OV2640ID始终为0问题

前言

最近在进行一个STM32和OV2640摄像头的项目,在项目最刚开始读取设备ID的初始阶段,读出来的ID始终是0x00,这个问题困扰了我3天,经过不懈努力,终于读出正确的ID号:0x26,在此记录以下我的调试历程。

硬件资源

极客STM32F429IGTB6开发版一块,该模块可以通过usb 5v供电,也可以通过3.3V直接供电,问题其实就出在这里,后面会详细解释,极客OV2640扩展版一块。ov2640通过杜邦线从开发板上供电,开发板通过ST-Link3.3V供电。

bug现象

STM32与OV2640是通过I2C协议进行通信的,最刚开始用的是STM32的硬件IIC去配置和读取OV2640寄存器信息。但是在写命令时,始终卡在EV6也就是这一句上while(!I2C_CheckEvent(CAMERA_I2C, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED)),后来改为软件模拟IIC,不管主机发送什么,从机都应答0,正常情况下,如果没有这个地址,主机寻址,从机是不会应答的。

解决过程

再三确认我的软件模拟IIC过程是没有问题的,因此问题可能出在OV2640硬件扩展板上,一是扩展版电路问题,二是OV2640本身就坏了,先换了一个OV2640,发现不管用,那扩展版电路问题比较大。
于是查看扩展版电路,这是我的OV2640扩展版电路图
在这里插入图片描述
这个电路很简单,3.3V经过两个降压电路降到2.8V,和1.5V给OV2640供电,再就是一个晶振电路了。最初怀疑晶振坏了或者虚焊等,用电压表的蜂鸣档去量四个角,至少连接是正常的,没有虚焊,电压也正常。
在量电压过程中,突然发现,本应该供电3.3V,这时候只有3.0v左右,突发奇想是不是电压太低了供电不行,于是量了4引脚和10引脚,分别是2.6V,1.1-1.2V,再查OV2640的数据手册找到了如下的电路要求在这里插入图片描述
10号引脚最低电压是1.24,这里的供电电压只有1.1不到1.2,有没有可能是这里电压太低了,导致芯片无法正常启动!
果断换到USB口5V供电,再次读取ID
在这里插入图片描述
已经能正确读出0x26的设备ID了!!,也就是说,问题出在供电电压上。

另外改换成硬件IIC去通信,发现还是卡在EV6那里,这里也证实了STM32 硬件IIC确实有BUG,还是用软件模拟更靠谱一点。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值