首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 单片机 >

STM32F103驱动OV7670,没法初始化

2013-06-26 
STM32F103驱动OV7670,无法初始化SIOC-PA6 SIOD-PA7XCLK-PA8 VSYNC-PB15HREF-PC6 PCLK-PC7 reset根据硬件模

STM32F103驱动OV7670,无法初始化
SIOC-PA6 SIOD-PA7
XCLK-PA8 VSYNC-PB15
HREF-PC6 PCLK-PC7 reset根据硬件模组使用说明,接了5K左右的电阻到3.3V,PWDN直接接了GND。
参考的别人的程序,初始化几乎没动,但是不能成功,读出7670ID高字节是00。
我使用的晶振是8M,OV7670不带晶振,不带FIFO。XCLK选择的是PLL时钟2分频,36MHZ。在RCC里,PLL时钟是72M。
SCCB总线复位这,根据程序仿真看,应该是复位成功了。SIOC,SIOD电平根据程序有变化。3.27及3.03V。
u8 rdOV7660Reg(u8 regID, u8 *regDat)
{
//通过写操作设置寄存器地址
startSCCB();
if(0==SCCBwriteByte(0x42))
{
stopSCCB();
return(0);
}
DelaySCCB(1000);
  if(0==SCCBwriteByte(regID))
{
stopSCCB();
return(0);
}
stopSCCB();

DelaySCCB(1000);

//设置寄存器地址后,才是读
startSCCB();
if(0==SCCBwriteByte(0x43))
{
stopSCCB();
return(0);
}
DelaySCCB(1000);
  *regDat=SCCBreadByte();
  noAck();
  stopSCCB();
  return(1);
}
读ID这一段,SCCBreadByte()函数里,
SCCB_SID_IN;/*设置SDA为输入*/
DelaySCCB(1500);
for(j=8;j>0;j--) //循环8次接收数据
{     
DelaySCCB(1500);
SCCB_SIC_H();
DelaySCCB(1500);
read=read<<1;
if(SCCB_SID_STATE) 
{
read=read+1;
}
SCCB_SIC_L();
DelaySCCB(1500);
}
/*重新配置输出*/
SCCB_SID_OUT;/*设置SDA为输出*/
return(read);
头文件里#define SCCB_SID_STATE GPIOA->IDR&0x80,仿真时候看,IDR07也就是PA7(SIOD)端口位输入从来没变过,导致SCCB_SID_STATE始终是0.用PA7控制小灯,没问题。造成问题无法解决的另一原因是我看了很久的SCCB总线时序,也没看明白。有做过的,了解的,指点下。谢谢。 STM32?OV7670?SCCB
[解决办法]

引用:
Quote: 引用:

试试读寄存器可不可以读出来?I2C两根线接上拉了吗?

已经上拉了。是4.5K左右的电阻。读寄存器读不出来。


那应该是I2C有问题!检查一下电路!

热点排行