#include "ov5640.h" #include "ov5640cfg.h" #include "ov5640af.h" #include "sccb.h" extern DMA_HandleTypeDef hdma_dcmi; extern DCMI_HandleTypeDef hdcmi; uint8_t OV5640_WR_Reg(uint16_t reg,uint8_t data) { uint8_t res=0; SCCB_Start(); if(SCCB_WR_Byte(OV5640_ADDR))res=1; if(SCCB_WR_Byte(reg>>8))res=1; if(SCCB_WR_Byte(reg))res=1; if(SCCB_WR_Byte(data))res=1; SCCB_Stop(); return res; } uint8_t OV5640_RD_Reg(uint16_t reg) { uint8_t val=0; SCCB_Start(); SCCB_WR_Byte(OV5640_ADDR); SCCB_WR_Byte(reg>>8); SCCB_WR_Byte(reg); SCCB_Stop(); SCCB_Start(); SCCB_WR_Byte(OV5640_ADDR|0X01); val=SCCB_RD_Byte(); SCCB_No_Ack(); SCCB_Stop(); return val; } uint8_t OV5640_Init(void) { uint16_t i=0; uint16_t reg; OV5640_POWER_ON; // Power on -> Wieso RESET? HAL_Delay(30); // Funktioniert nicht! reg=OV5640_RD_Reg(OV5640_CHIPIDH); // default value: 0x56 reg<<=8; reg|=OV5640_RD_Reg(OV5640_CHIPIDL); // default value: 0x40 if(reg!=OV5640_ID) { printf("ID: %d \r\n",reg); return 1; } OV5640_WR_Reg(0x3103,0X11); //system clock from pad, bit[1] OV5640_WR_Reg(0X3008,0X82); HAL_Delay(10); for(i=0;i