我最近在搞ov7670 SCCB能通讯 设置成功但是开启了MCO我没有示波器也不知道有没有频率 OV7670的D0~D7一直是0xff!是不是没给时钟的原因?
[mw_shl_code=c,true]以下是主函数调用
int main(void)
{
u8 data1;
u8 data2;
u32 i;
delay_init(168);
LCD_Init();
LCD_Clear(0);;
OV7670_init();
LCD_SetAdd(0,0,239,319);
for(i=0;i<76800;i++)
{
CLK_init_ON(); // OV7670 XCLK ??
data1=GPIOF->IDR;
CLK_init_OFF(); //OV7670 XCLK ??
CLK_init_ON(); // OV7670 XCLK ??
data2=GPIOF->IDR>>8;
CLK_init_OFF(); //OV7670 XCLK ??
LCD_WR_DATA8(data1);
LCD_WR_DATA8(data2);
}
while(1)
{
}
}
以下驱动程序
void CLK_init_ON(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
/* Configure MCO2 pin(PC9) in alternate function */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_Init(GPIOC, &GPIO_InitStructure);
GPIO_PinAFConfig(GPIOC,GPIO_Pin_9,GPIO_AF_MCO);
/* System clock selected to output on MCO2 pin(PC9)*/
RCC_MCO2Config(RCC_MCO2Source_HSE, RCC_MCO2Div_2);
}
void CLK_init_OFF(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
GPIO_Init(GPIOC, &GPIO_InitStructure);
}
void OV7670_GPIO_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
/* Enable GPIOC clock */
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|
GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;//GPIO_Mode_AF_OD GPIO_Mode_AF_PP GPIO_Mode_IPU GPIO_Mode_IN_FLOATING
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
GPIO_InitStructure.GPIO_OType = GPIO_OType_OD;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_Init(GPIOF, &GPIO_InitStructure);
}
void OV7670_GPIO_CONTRL_CONFIG(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);
GPIO_InitStructure.GPIO_Pin = LCD_HREF_BIT|LCD_VSYNC_BIT|LCD_PCLK_BIT;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
GPIO_InitStructure.GPIO_OType = GPIO_OType_OD;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_Init(GPIOC, &GPIO_InitStructure);
/* System clock selected to output on MCO2 pin(PC9)*/
//RCC_MCO2Config(RCC_MCO2Source_SYSCLK, RCC_MCO2Div_2);
}
////////////////////////////
//????????OV7670?????÷
//·?????1-???? 0-?§°?
unsigned char wrOV7670Reg(unsigned char regID, unsigned char regDat)
{
startSCCB();
if(0==SCCBwriteByte(0x42))
{
stopSCCB();
return(0);
}
delay_us(100);
if(0==SCCBwriteByte(regID))
{
stopSCCB();
return(0);
}
delay_us(100);
if(0==SCCBwriteByte(regDat))
{
stopSCCB();
return(0);
}
stopSCCB();
return(1);
}
////////////////////////////
//????????OV7670?????÷
//·?????1-???? 0-?§°?
unsigned char rdOV7670Reg(unsigned char regID, unsigned char *regDat)
{
//?¨??????×÷?è???????÷???·
startSCCB();
if(0==SCCBwriteByte(0x42))
{
stopSCCB();
return(0);
}
delay_us(100);
if(0==SCCBwriteByte(regID))
{
stopSCCB();
return(0);
}
stopSCCB();
delay_us(100);
//?è???????÷???·?ó????????
startSCCB();
if(0==SCCBwriteByte(0x43))
{
stopSCCB();
return(0);
}
delay_us(100);
*regDat=SCCBreadByte();
noAck();
stopSCCB();
return(1);
}
//(140,16,640,480) is good for VGA
//(272,16,320,240) is good for QVGA
/* config_OV7670_window */
void OV7670_config_window(unsigned int startx,unsigned int starty,unsigned int width, unsigned int height)
{
unsigned int endx;
unsigned int endy;// "v*2"±???
unsigned char temp_reg1, temp_reg2;
unsigned char temp=0;
endx=(startx+width);
endy=(starty+height+height);// "v*2"±???
rdOV7670Reg(0x03, &temp_reg1 );
temp_reg1 &= 0xf0;
rdOV7670Reg(0x32, &temp_reg2 );
temp_reg2 &= 0xc0;
// Horizontal
temp = temp_reg2|((endx&0x7)<<3)|(startx&0x7);
wrOV7670Reg(0x32, temp );
temp = (startx&0x7F8)>>3;
wrOV7670Reg(0x17, temp );
temp = (endx&0x7F8)>>3;
wrOV7670Reg(0x18, temp );
// Vertical
temp =temp_reg1|((endy&0x3)<<2)|(starty&0x3);
wrOV7670Reg(0x03, temp );
temp = starty>>2;
wrOV7670Reg(0x19, temp );
temp = endy>>2;
wrOV7670Reg(0x1A, temp );
}
void set_OV7670reg(void)
{
wrOV7670Reg(0x8c, 0x00);
wrOV7670Reg(0x3a, 0x04);
wrOV7670Reg(0x40, 0xd0); //???10???¨??COM15???è??????????·??§??????????
wrOV7670Reg(0x8c, 0x00);
wrOV7670Reg(0x12, 0x14); //????????QVGA,??è????0x14
wrOV7670Reg(0x32, 0x80);
wrOV7670Reg(0x17, 0x16);
wrOV7670Reg(0x18, 0x04);
wrOV7670Reg(0x19, 0x02);
wrOV7670Reg(0x1a, 0x7b);//0x7a, ???0x7b
wrOV7670Reg(0x03, 0x06);//0x0a, ???0x06
wrOV7670Reg(0x0c, 0x04);//???0x04 com3,?è????·???????????????
wrOV7670Reg(0x3e, 0x00);// ???0x00 com14??dcw??pclk??·??è???????°·?????
wrOV7670Reg(0x70, 0x3a); //???0x04
wrOV7670Reg(0x71, 0x35); //???0x35
wrOV7670Reg(0x72, 0x11); //???0x11
wrOV7670Reg(0x73, 0x00);//???f0 ??????????±???????
wrOV7670Reg(0xa2, 0x00); //???0x02
wrOV7670Reg(0x11, 0xff); //?±????????????????×??ó?????????0x81 ?¨??±??©
//wrOV7670Reg(0x15 , 0x31);
wrOV7670Reg(0x7a, 0x20); //???0x20 ?????÷7a--89???¤?í?ú???è??
wrOV7670Reg(0x7b, 0x1c); //???0x1c
wrOV7670Reg(0x7c, 0x28); //???0x28
wrOV7670Reg(0x7d, 0x3c); //???0x3c
wrOV7670Reg(0x7e, 0x55); //???0x55
wrOV7670Reg(0x7f, 0x68); //???0x68
wrOV7670Reg(0x80, 0x76); //???0x76
wrOV7670Reg(0x81, 0x80); //???0x80
wrOV7670Reg(0x82, 0x88); //???0x88
wrOV7670Reg(0x83, 0x8f); //???0x8f
wrOV7670Reg(0x84, 0x96); //???0x96
wrOV7670Reg(0x85, 0xa3); //???0xa3
wrOV7670Reg(0x86, 0xaf); //???0xaf
wrOV7670Reg(0x87, 0xc4); //???0xc4
wrOV7670Reg(0x88, 0xd7); //???0xd7
wrOV7670Reg(0x89, 0xe8); //???0xe8
wrOV7670Reg(0x32,0xb6);
wrOV7670Reg(0x13, 0xff); //???0xe0 com13 AGC,AWB,AEC???????? ?¨??±??©
wrOV7670Reg(0x00, 0x00);//AGC //???0x00
wrOV7670Reg(0x10, 0x00);//???0x00 ??????
wrOV7670Reg(0x0d, 0x00);//???0x00 COM4
wrOV7670Reg(0x14, 0x4e);//???0x28, limit the max gain ×????????è?? ??±???
wrOV7670Reg(0xa5, 0x05); //???0x05 50Hz bangding step limting
wrOV7670Reg(0xab, 0x07); //???0x07 60Hz bangding step limting
wrOV7670Reg(0x24, 0x75); //???0x75 agc/aec-???¨???????ò????
wrOV7670Reg(0x25, 0x63); //???0x63 agc/aec-???¨???????ò????
wrOV7670Reg(0x26, 0xA5); //???0xa5 agc/aec-?ì?????????ò
wrOV7670Reg(0x9f, 0x78); //???0x78 ?ù???±·?????aec/agc??????1
wrOV7670Reg(0xa0, 0x68); //???0x68 ?ù???±·?????aec/agc??????2
// wrOV7670Reg(0xa1, 0x03);//0x0b,
wrOV7670Reg(0xa6, 0xdf);//0xd8, ???0xdf ?ù???±·?????aec/agc??????3
wrOV7670Reg(0xa7, 0xdf);//0xd8, ???0xdf ?ù???±·?????aec/agc??????4
wrOV7670Reg(0xa8, 0xf0); //???0xf0 ?ù???±·?????aec/agc??????5
wrOV7670Reg(0xa9, 0x90); //???0x90 ?ù???±·?????aec/agc??????6
wrOV7670Reg(0xaa, 0x94); //???0x94 ?ù???±·?????aec/agc??????7
//wrOV7670Reg(0x13, 0xe5); //???0xe5
wrOV7670Reg(0x0e, 0x61); //???0x61 COM5
wrOV7670Reg(0x0f, 0x43); //???0x4b COM6
wrOV7670Reg(0x16, 0x02); //???0x02 ±???
wrOV7670Reg(0x1e, 0x37);//0x07, ???0x37 ?®??????/?ú?±·×????? ?è????01?ó·??ú·×?
wrOV7670Reg(0x21, 0x02); //???0x02 ±???
wrOV7670Reg(0x22, 0x91); //???0x91 ±???
wrOV7670Reg(0x29, 0x07); //???0x07 ±???
wrOV7670Reg(0x33, 0x0b); //???0x0b href????????????????80?±??±?
wrOV7670Reg(0x35, 0x0b); //???0xe0 ±???
wrOV7670Reg(0x37, 0x3f); //???0x1d adc????
wrOV7670Reg(0x38, 0x01); //???0x71 adc??????????????
wrOV7670Reg(0x39, 0x00); //???0x2a adc????????
wrOV7670Reg(0x3c, 0x78); //???0x78 COM12
wrOV7670Reg(0x4d, 0x40); //???0x40 ±???
wrOV7670Reg(0x4e, 0x20); //???0x20 ±???
wrOV7670Reg(0x69, 0x00); //???0x00 ???¨????????
wrOV7670Reg(0x6b, 0x4a); //PLL???0x00 pll???? ?????è??
wrOV7670Reg(0x74, 0x19); //???0x19 ??????×?????
wrOV7670Reg(0x8d, 0x4f); //???0x4f ±???
wrOV7670Reg(0x8e, 0x00); //???0x00 ±???
wrOV7670Reg(0x8f, 0x00); //???0x00 ±???
wrOV7670Reg(0x90, 0x00); //???0x00 ±???
wrOV7670Reg(0x91, 0x00); //???0x00 ±???
wrOV7670Reg(0x92, 0x00); //0x19,//0x66 ???0x00 ??????8??
wrOV7670Reg(0x96, 0x00); //???0x00 ±???
wrOV7670Reg(0x9a, 0x80); //???0x80 ±???
wrOV7670Reg(0xb0, 0x84); //???0xe0 ±???
wrOV7670Reg(0xb1, 0x0c); //???0x0c ablc?è??
wrOV7670Reg(0xb2, 0x0e); //???0x0e ±???
wrOV7670Reg(0xb3, 0x82); //???0x82 ablc target
wrOV7670Reg(0xb8, 0x0a); //???0x0a ±???
wrOV7670Reg(0x43, 0x14); //???0x14 43-48??±???
wrOV7670Reg(0x44, 0xf0); //???0xf0
wrOV7670Reg(0x45, 0x34); //???0x34
wrOV7670Reg(0x46, 0x58); //???0x58
wrOV7670Reg(0x47, 0x28); //???0x28
wrOV7670Reg(0x48, 0x3a); //???0x3a
wrOV7670Reg(0x59, 0x88); //???0x88 51-5e±???
wrOV7670Reg(0x5a, 0x88); //???0x88
wrOV7670Reg(0x5b, 0x44); //???0x44
wrOV7670Reg(0x5c, 0x67); //???0x67
wrOV7670Reg(0x5d, 0x49); //???0x49
wrOV7670Reg(0x5e, 0x0e); //???0xe0
wrOV7670Reg(0x64, 0x04); //???0x04 64-66???·????
wrOV7670Reg(0x65, 0x20); //???0x20
wrOV7670Reg(0x66, 0x05); //???0x05
wrOV7670Reg(0x94, 0x04); //???0x04 94-95???·????
wrOV7670Reg(0x95, 0x08); //???0x08
wrOV7670Reg(0x6c, 0x0a); //???0x0a 6c-6fawb?è??
wrOV7670Reg(0x6d, 0x55); //???0x55
wrOV7670Reg(0x6e, 0x11); //???0x11
wrOV7670Reg(0x6f, 0x9f); //0x9e for advance AWB ???9f
wrOV7670Reg(0x6a, 0x40); //???0x40 g?¨??awb????
wrOV7670Reg(0x01, 0x40); //???0x40 b?¨??awb????????
wrOV7670Reg(0x02, 0x40); //???0x40 r?¨??awb????????
//wrOV7670Reg(0x13, 0xe7); //???0xe7
wrOV7670Reg(0x15, 0x00); //00 cmos10 ????pclk????????
wrOV7670Reg(0x4f, 0x80); //???0x80 ?????????????ó?????è??
wrOV7670Reg(0x50, 0x80); //???0x80
wrOV7670Reg(0x51, 0x00); //???0x00
wrOV7670Reg(0x52, 0x22); //???0x22
wrOV7670Reg(0x53, 0x5e); //???0x5e
wrOV7670Reg(0x54, 0x80); //???0x80
wrOV7670Reg(0x58, 0x9e); //???0x9e
wrOV7670Reg(0x41, 0x08); //???0x08 com16 ??????±????è??
wrOV7670Reg(0x3f, 0x00); //???0x00 ±????????÷??
wrOV7670Reg(0x75, 0x05); //???0x05
wrOV7670Reg(0x76, 0xe1); //???0xe1
wrOV7670Reg(0x4c, 0x00); //???0x00 ???ù????????
wrOV7670Reg(0x77, 0x01); //???0x01 ???ù????????
wrOV7670Reg(0x3d, 0xc1); //0xc0, com13 ?????è??
wrOV7670Reg(0x4b, 0x09); //???0x09 ?????÷4b?è??
wrOV7670Reg(0xc9, 0x60); //???0x60 ±?????????
//wrOV7670Reg(0x41, 0x38); //???0x38 com16±????è???è??
wrOV7670Reg(0x56, 0x40);//0x40, change according to Jim's request ??±???????
wrOV7670Reg(0x34, 0x11); //???0x11 ?????ó??????????????
wrOV7670Reg(0x3b, 0x02);//0x00,//???0x02, com11????
wrOV7670Reg(0xa4, 0x89);//0x88, ???89 nt????
wrOV7670Reg(0x96, 0x00); //???0x00 ????96-9c±???
wrOV7670Reg(0x97, 0x30); //???0x30
wrOV7670Reg(0x98, 0x20); //???0x20
wrOV7670Reg(0x99, 0x30); //???0x30
wrOV7670Reg(0x9a, 0x84); //???0x84
wrOV7670Reg(0x9b, 0x29); //???0x29
wrOV7670Reg(0x9c, 0x03); //???0x03
wrOV7670Reg(0x9d, 0x4c); //???0x4c 50HZ???????¨????
wrOV7670Reg(0x9e, 0x3f); //???0x3f 60HZ???????¨????
wrOV7670Reg(0x09, 0x00); //???0x00 ?¨???????÷com2
wrOV7670Reg(0x3b, 0xc2);//0x82,//0xc0,//???0xc2, //night mode ???0xc2
}
/* OV7670_init() */
//·???1??????·???0?§°?
unsigned char OV7670_init(void)
{
unsigned char temp;
// unsigned int i=0;
OV7670_GPIO_Init();
OV7670_GPIO_CONTRL_CONFIG();
SCCB_GPIO_Config(); // io init..
CLK_init_ON();
temp=0x80;
if(0==wrOV7670Reg(0x12, temp)) //Reset SCCB
{
return 0 ;
}
delay_ms(100);
set_OV7670reg();
OV7670_config_window(272,12,320,240);// set 240*320
return 0x01; //ok
}
[/mw_shl_code]
------------------------------
试过了 灯亮了。。时钟搞定了。。又出了个问题 显示出来的是波纹一样的线条 就是把摄像机照到阳光那里显示的线条比较白,把摄像机照到黑暗的地方线条就有点红黑。。什么情况是摄像机问题还是我处理有问题。。
一周热门 更多>