logo资料库

关于野火OV7725例程移植为OV7670问题总结.pdf

第1页 / 共8页
第2页 / 共8页
第3页 / 共8页
第4页 / 共8页
第5页 / 共8页
第6页 / 共8页
第7页 / 共8页
第8页 / 共8页
资料共8页,全文预览结束
关于野火OV7725例程移植为OV7670总结 作者:Lisboa 用了三天的时间,终于搞定了程序的移植。也是第一次移植stm32程序。 最终的移植成功版本,改了SCCB通信、FIFO读写时序、寄存器配置、引脚修改的一些地方。 一、移植过程中SCCB通信遇到的问题 1.由于野火的OV7725摄像头内置上拉电阻,所以在配置时SDA和SDL都被设置成了Mode_OD (开漏模式),但是战舰带的OV7670摄像头 并没有内置上拉电阻,所以不能用开漏模式,否则不能正常输出高电平,SDA线也不会被主机拉高。 于是参考了战舰的例程。战舰对SCL线设置为了PP(推挽输出模式),SDA线的输出则需要切换。如下: 在战舰的例程上进行修改时,由于需要修改一些IO口,所以需要把这句改掉。我尝试用这样的手法修改: 发现并不可行。查询网络,原因可能是在运行中途修改管脚模式时,由于32的LCKK:锁密钥,并不能直接修改管脚工作模式。我们选择 对底层寄存器进行操作。。
于是乎这样改: *注:SDA为PC7口。 2. 还有需要修改的地方就是:在需要读取SDA电平状态的时候,要用SCCB_SDA_IN 这个语句把替换掉SDA_H,而不是先SDA_H 然后 再SCCB_SDA_IN 。否则不能正确读取到SDA线的电平。 3.最后一步,器件ID: 在这一段代码用到: 二、FIFO读数据时序的修改 1.由于每个人选择的数据口可能不同,有的是0-7位,有的是8-15位,所以我这里给出了两种不同的读取时序。 H_MY_READ_FIFO_PIXEL(YUV)是当数据位选择的是8-15位时候用的; L_MY_READ_FIFO_PIXEL(YUV)是当数据位选择的是0-7位时候用的。 *注:因为我要的二值化的图像,所以只读取了YUV 分量中的Y分量。
下面这段代码是读取RGB565的: 2. 关于IDR寄存器的认识 IDR是一个16的寄存器,是用来查看某一组I/O电平的状态的。就拿我上面写的 READ_FIF_PIXEL 来说吧 RGB565 = (...-> IDR) & 0xff00; 这句话的意思是,读取IDR寄存器的16位数据,但是我们这时候只要高八位,就是P8-P15口存到高 位比如此时RGB565的值是0x1f00; 然后RCLK拉高再拉低,读取下一位FIFO来的数据,要把它存到RGB565的低八位,就把IDR寄存器右移八位,然后或上之前的数值,比 如此时RGB565的值就变成了0x1f38。 三、寄存器的配置 1. 我用的YUV,没有给每位寄存器重定义。所以要结合Datasheet自行查看。 /*以下为 YUV参数设置*/ {0x12, 0x10}, {0x3a, 0x14}, {0x3d, 0x80}, //0 0 : Y U Y V (3a:14 3d:80) //0 1 : Y V Y U (3a:14 3d:81) //1 0 : U Y V Y (3a:18 3d:80) //1 1 : V Y U Y (3a:18 3d:81) {0x67, 0x11}, //手工设置 U {0x68, 0xFF}, //手工设置 V {0x40, 0xC0}, //YUV输出 //输出窗口设置 {0x32, 0x80}, //HREF {0x17, 0x16}, //HSTART {0x18, 0x04},//HSTOP {0x19, 0x02},//VSTRT {0x1a, 0x7a},//0x7a, VSTOP {0x03, 0x0a},//0x0a, VREF {0x0c, 0x0c}, {0x15, 0x00}, {0x3e, 0x00},//10 {0x70, 0x00}, {0x71, 0x01},
{0x72, 0x11}, {0x73, 0x09},// {0xa2, 0x02},//15 {0x11, 0x00},//时钟分频设置,0,不分频. {0x7a, 0x20}, {0x7b, 0x1c}, {0x7c, 0x28}, {0x7d, 0x3c},//20 {0x7e, 0x55}, {0x7f, 0x68}, {0x80, 0x76}, {0x81, 0x80}, {0x82, 0x88}, {0x83, 0x8f}, {0x84, 0x96}, {0x85, 0xa3}, {0x86, 0xaf}, {0x87, 0xc4},//30 {0x88, 0xd7}, {0x89, 0xe8}, {0x13, 0xe0}, {0x00, 0x00},//AGC {0x10, 0x00}, {0x0d, 0x00}, {0x14, 0x20},//0x38, limit the max gain {0xa5, 0x05}, {0xab, 0x07}, {0x24, 0x75},//40 {0x25, 0x63}, {0x26, 0xA5}, {0x9f, 0x78}, {0xa0, 0x68}, {0xa1, 0x03},//0x0b, {0xa6, 0xdf},//0xd8, {0xa7, 0xdf},//0xd8, {0xa8, 0xf0}, {0xa9, 0x90}, {0xaa, 0x94},//50 {0x13, 0xe5}, {0x0e, 0x61}, {0x0f, 0x4b}, {0x16, 0x02}, {0x1e, 0x27},//图像输出镜像控制.0x07, {0x21, 0x02}, {0x22, 0x91}, {0x29, 0x07}, {0x33, 0x0b}, {0x35, 0x0b},//60 {0x37, 0x1d}, {0x38, 0x71}, {0x39, 0x2a}, {0x3c, 0x78}, {0x4d, 0x40}, {0x4e, 0x20}, {0x69, 0x5d}, {0x6b, 0x40},//PLL*4=48Mhz {0x74, 0x19},
{0x8d, 0x4f}, {0x8e, 0x00},//70 {0x8f, 0x00}, {0x90, 0x00}, {0x91, 0x00}, {0x92, 0x00},//0x19,//0x66 {0x96, 0x00}, {0x9a, 0x80}, {0xb0, 0x84}, {0xb1, 0x0c}, {0xb2, 0x0e}, {0xb3, 0x82},//80 {0xb8, 0x0a}, {0x43, 0x14}, {0x44, 0xf0}, {0x45, 0x34}, {0x46, 0x58}, {0x47, 0x28}, {0x48, 0x3a}, {0x59, 0x88}, {0x5a, 0x88}, {0x5b, 0x44},//90 {0x5c, 0x67}, {0x5d, 0x49}, {0x5e, 0x0e}, {0x64, 0x04}, {0x65, 0x20}, {0x66, 0x05}, {0x94, 0x04}, {0x95, 0x08}, {0x6c, 0x0a}, {0x6d, 0x55}, {0x4f, 0x80}, {0x50, 0x80}, {0x51, 0x00}, {0x52, 0x22}, {0x53, 0x5e}, {0x54, 0x80}, //{0x54, 0x40},//110 {0x09, 0x03},//驱动能力最大 {0x6e, 0x11},//100 {0x6f, 0x9f},//0x9e for advance AWB {0x55, 0x00},//亮度 {0x56, 0x40},//对比度 {0x57, 0x80},//0x40 2.RGB565的配置: /*以下为OV7670 QVGA RGB565参数 */ {0x3a, 0x04},// {0x40, 0x10}, {0x12, 0x14}, {0x32, 0x80}, {0x17, 0x16},
{0x18, 0x04},//5 {0x19, 0x02}, {0x1a, 0x7b},//0x7a, {0x03, 0x06},//0x0a, {0x0c, 0x0c}, {0x15, 0x02}, {0x3e, 0x00},//10 {0x70, 0x00}, {0x71, 0x01}, {0x72, 0x11}, {0x73, 0x09},// {0xa2, 0x02},//15 {0x11, 0x00}, {0x7a, 0x20}, {0x7b, 0x1c}, {0x7c, 0x28}, {0x7d, 0x3c},//20 {0x7e, 0x55}, {0x7f, 0x68}, {0x80, 0x76}, {0x81, 0x80}, {0x82, 0x88}, {0x83, 0x8f}, {0x84, 0x96}, {0x85, 0xa3}, {0x86, 0xaf}, {0x87, 0xc4},//30 {0x88, 0xd7}, {0x89, 0xe8}, {0x13, 0xe0}, {0x00, 0x00},//AGC {0x10, 0x00}, {0x0d, 0x00}, {0x14, 0x30},//0x38, limit the max gain {0xa5, 0x05}, {0xab, 0x07}, {0x24, 0x75},//40 {0x25, 0x63}, {0x26, 0xA5}, {0x9f, 0x78}, {0xa0, 0x68}, {0xa1, 0x03},//0x0b, {0xa6, 0xdf},//0xd8, {0xa7, 0xdf},//0xd8, {0xa8, 0xf0}, {0xa9, 0x90}, {0xaa, 0x94},//50 {0x13, 0xf5}, {0x0e, 0x61}, {0x0f, 0x4b}, {0x16, 0x02}, {0x1e, 0x07},//0x07, {0x21, 0x02}, {0x22, 0x91},
{0x29, 0x07}, {0x33, 0x0b}, {0x35, 0x0b},//60 {0x37, 0x1d}, {0x38, 0x71}, {0x39, 0x2a}, {0x3c, 0x78}, {0x4d, 0x40}, {0x4e, 0x20}, {0x69, 0x5d}, {0x6b, 0x40},//PLL {0x74, 0x19}, {0x8d, 0x4f}, {0x8e, 0x00},//70 {0x8f, 0x00}, {0x90, 0x00}, {0x91, 0x00}, {0x92, 0x00},//0x19,//0x66 {0x96, 0x00}, {0x9a, 0x80}, {0xb0, 0x84}, {0xb1, 0x0c}, {0xb2, 0x0e}, {0xb3, 0x82},//80 {0xb8, 0x0a}, {0x43, 0x14}, {0x44, 0xf0}, {0x45, 0x34}, {0x46, 0x58}, {0x47, 0x28}, {0x48, 0x3a}, {0x59, 0x88}, {0x5a, 0x88}, {0x5b, 0x44},//90 {0x5c, 0x67}, {0x5d, 0x49}, {0x5e, 0x0e}, {0x64, 0x04}, {0x65, 0x20}, {0x66, 0x05}, {0x94, 0x04}, {0x95, 0x08}, {0x6c, 0x0a}, {0x6d, 0x55}, {0x4f, 0x80}, {0x50, 0x80}, {0x51, 0x00}, {0x52, 0x22}, {0x53, 0x5e}, {0x54, 0x80}, //{0x54, 0x40},//110
{0x6e, 0x11},//100 {0x6f, 0x9f},//0x9e for advance AWB {0x55, 0x00},//亮度 {0x56, 0x45},//对比度 {0x57, 0x80},//0x40 四、移植过程中引脚的修改 1.外部中断的修改 我需要修改的引脚有FIFO-OE / FIFO-RCLK / FIIFO-RRST / SCL / SDA / VSYNC / WRST 其他的不用多说,VSYNC需要修改的地方还是蛮多的~(我用的外部中断口是PB13) 其中需要注意的是:macOV7670_VSYNC_EXTI_IRQ这个,Pin13口需要用这个,具体用哪个要查书。 2. AFIO时钟的开启 当你需要的外部中断不是32自带的外部中断引脚时候,必须开启AFIO时钟。 当把GPIO用作EXTI外部中断或使用重映射功能的时候,必须开启AFIO时钟,而在使用默认复用功能的时候,就不必开启AFIO时钟了。
分享到:
收藏