请教原子哥 先上程序
这是OV7670的初始化部分 (感觉不对)
u8 OV7670_Init(void)
{
u8 temp;
u16 i = 0;
My_DCMI_Init(); //初始化DCMI
SCCB_Init(); //初始化SCCB
if(SCCB_WR_Reg(0x12,0x80)) return 1; //复位SCCB
delay_ms(50);
//读取产品ID
temp = SCCB_RD_Reg(0x0b);
if(temp != 0x73) return 2;
temp = SCCB_RD_Reg(0x0a);
if(temp != 0x76) return 2;
//初始化序列
for(i=0;i<sizeof(ov7670_init_reg_tbl)/sizeof(ov7670_init_reg_tbl[0])/2;i++)
{
SCCB_WR_Reg(ov7670_init_reg_tbl[0],ov7670_init_reg_tbl[1]);
delay_ms(2);
}
return 0x00; //OK
}
//设置窗口大小
void OV7670_Window_Set(u16 sx,u16 sy,u16 width,u16 height)
{
u16 endx;
u16 endy;
u8 temp;
endx=sx+width*2; //V*2
endy=sy+height*2;
if(endy>784)endy-=784;
temp=SCCB_RD_Reg(0X03); //读取Vref之前的值
temp&=0XF0;
temp|=((endx&0X03)<<2)|(sx&0X03);
SCCB_WR_Reg(0X03,temp); //设置Vref的start和end的最低2位
SCCB_WR_Reg(0X19,sx>>2); //设置Vref的start高8位
SCCB_WR_Reg(0X1A,endx>>2); //设置Vref的end的高8位
temp=SCCB_RD_Reg(0X32); //读取Href之前的值
temp&=0XC0;
temp|=((endy&0X07)<<3)|(sy&0X07);
SCCB_WR_Reg(0X17,sy>>3); //设置Href的start高8位
SCCB_WR_Reg(0X18,endy>>3); //设置Href的end的高8位
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
---------------------------------
这是SCCB的配置 只是初始化部分 其余的与原子哥的一样
void SCCB_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB,ENABLE); //使能PB端口时钟
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10|GPIO_Pin_11; // 端口配置
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; //SCCB_SIDE3
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_SetBits(GPIOB,GPIO_Pin_10|GPIO_Pin_11); // 输出高
SCCB_SDA_OUT();
}
对应SCCB.H的配置
#define SCCB_SDA_IN() {GPIOB->MODER&=~(3<<(11*2));GPIOB->MODER|=0<<2*11;} //PB11输入
#define SCCB_SDA_OUT() {GPIOB->MODER&=~(3<<(11*2));GPIOB->MODER|=1<<2*11;} //PB11输出
//IO操作函数
#define SCCB_SCL PBout(10) //SCL
#define SCCB_SDA PBout(11) //SDA
#define SCCB_READ_SDA PBin(11) //输入SDA
#define SCCB_ID 0X42 //OV7670的ID
一周热门 更多>