| 这些寄存器在代码里表现为一堆宏定义   /*OV7725寄存器宏定义*/#define GAIN      0x00#define BLUE      0x01#define RED       0x02#define GREEN     0x03#define BAVG      0x05#define GAVG      0x06…………
 复制代码
 
 模块初始化
 引脚定义
 
 //D0~D7:PA0~PA7       VSYNC:PA8//WRST:PB13  RRST:PB14  OE:PB5  RCLK:PB6  WEN:PB7  SDA:PB8  SCL:PB9#define OV7725_VSYNC    PAin(8)#define OV7725_WRST                PBout(13)#define OV7725_WREN                PBout(7)#define OV7725_RCK_H        GPIOB->BSRR=1<<6#define OV7725_RCK_L        GPIOB->BRR=1<<6#define OV7725_RRST                PBout(14)#define OV7725_CS                PBout(5)
 复制代码
 
 #define SCCB_SCL                    PBout(9)                 //SCL#define SCCB_SDA                    PBout(8)                 //SDA#define SCCB_READ_SDA            PBin(8)                  //ÊäÈëSDA
 复制代码
 
 
 我使用的是杜邦线连接如,IO口是自己重新定义的(全使用普通IO即可),STM32F1系列的PB3,PB4,PA13,PA14,PA15用于JTAG,如果有使用到其中的引脚,需要进行特殊配置,具体可参考网上更多教程。当时使用PB3,PB4作为SCCB的引脚,出现问题才发现这个原因。
 
 初始化
 写寄存器的函数,寄存器的配置都是通过这个函数
 
 u8 SCCB_WR_Reg(u8 reg,u8 data){        u8 res=0;        SCCB_Start();                          //启动SCCB传输        if(SCCB_WR_Byte(SCCB_ID))res=1;        //写器件ID,为0x42        delay_us(100);          if(SCCB_WR_Byte(reg))res=1;                //写寄存器地址,直接写对应的寄存器地址        delay_us(100);          if(SCCB_WR_Byte(data))res=1;         //写数据,根据寄存器功能写对应数据          SCCB_Stop();          return        res;}
 复制代码
 
 将要配置的寄存器地址和对应的值,存在一个二维数组里边
 
 //初始化寄存器系列及其对应的值const u8 ov7725_init_reg_tb1[][2]={        /*输出窗口设置*/        {CLKRC,     0x00}, //clock config        {COM7,      0x06}, //VGA RGB565        {HSTART,    0x3f}, //水平起始位置        {HSIZE,     0x50}, //水平尺寸        {VSTRT,     0x03}, //垂直其实位置        ......
 复制代码
 
 初始化时,在循环语句调用写寄存器的函数,依次写入寄存器的地址和对应的值,即可完成寄存器的配置
 
   //初始化OV7725,采用QVGA分辨率(320*240)        for(i=0;i<sizeof(ov7725_init_reg_tb1)/sizeof(ov7725_init_reg_tb1[0]);i++)        {                   SCCB_WR_Reg(ov7725_init_reg_tb1[0],ov7725_init_reg_tb1[1]);         }
 复制代码
 
 
 |