凭借着OV7620,将已经调好速度控制和角度控制的车子能跑起来了。基础功能实现后就开始对车子优化了。

一个好的人眼睛最重要,同样对于一个好的平衡车,摄像头传感器最重要。因此我决心首先做的是对摄像头的优化。

方针:

OV7620  -->  OV7725(鹰眼摄像头)    使用:KEIL 鹰眼摄像头 超核库

OV7620的缺点:

OV7620是1/3”CMOS彩色/黑白图像传感器。它支持连续和隔行两种扫描方式,VGA与QVGA两种图像格式;最高像素为664×492,帧速率为30fps。而他的缺点正是在此,帧速率太低。每秒中只能产生30唱图像。可以确定他的VSYNC信号为30HZ。
  帧速率不高为何是缺点:
 因为车子跑到一定速度之后,图像变化很快,帧的速率低导致了道路实时性差,不能够及时刷新道路情况。所以会影响智能车的提速。
鹰眼摄像头(OV7725)的优点:
1.高达150HZ的帧频率。
2.硬件二值化。(也有人认为是缺点。)
3.BGA封装:
但是鹰眼的制造商野火,采用捆绑销售,每次买的时候必须购买套装。不过商家也是为了购买者着想,因为很多人不会自己驱动OV7725,只会对例程进行修改,不会移植,这样的购买者买套件确实也不失为一个好方法。
不过博主比较穷,在一番软磨之下,商家给我单卖了一个鹰眼摄像头(OV7725),在此谢谢商家了。
驱动鹰眼的步骤:
1.知道该款摄像头的工作特点和方式。
 
  
第一大步:理解时序图。
2.在我介绍OV7620的使用(http://blog.csdn.net/lxk7280/article/details/22207001)的时候,就说了理解时序图是驱动一款摄像头的重中之重。尤其是对于鹰眼这款比较特殊的摄像头。
接下来一个必须理解的地方,否则就驱动不了该款摄像头。
那就是:鹰眼摄像头的一个PCLK信号传来的时候,会传输8个像素点。而不是OV7620的一个PCLK信号,对应1个像素点。
So:如果一行为80个点,那么一个行信号中只会有10个PCLK信号,而不是80个PCLK信号。
示例:采集到:0xFF 0X00  。  对应二值化的像素点。 黑黑黑黑白白白白
为了更好的让自己理解鹰眼摄像头的时序图,我在实验室的示波器上仔细看了下各个信号的波形。如下图:
场信号和行信号波形:
看完这么多关于时序图的波形后,相信大家对鹰眼摄像头的波形都了解了。
接下来开始进攻第二大部分:SCCB的操作。 
 3. 没有对SCCB进行操作,就没办法操作摄像头。

有人会奇怪为什么使用OV系列的摄像头每次都要进行SCCB的操作呢?难道它自己不会保存上次的操作结果吗?

原因是:OV系列的摄像头的寄存器是EEPROM,不稳定,数据很容易丢失,因此程序每次初始化时我们都要重新写入寄存器设置。

需要修改的寄存器有,PCLK速率,帧率、图像亮度、对比度、色饱和度、镜像等功能。

步骤:

首先给出OV7725的SCCB各个功能对应的寄存器的写入值:

#ifndef _OV7725_REG_H_
#define _OV7725_REG_H_#define OV7725_ID           0x21#define OV7725_GAIN      0x00
#define OV7725_BLUE      0x01
#define OV7725_RED       0x02
#define OV7725_GREEN     0x03
#define OV7725_BAVG      0x05
#define OV7725_GAVG      0x06
#define OV7725_RAVG      0x07
#define OV7725_AECH      0x08
#define OV7725_COM2      0x09
#define OV7725_PID       0x0A
#define OV7725_VER       0x0B
#define OV7725_COM3      0x0C
#define OV7725_COM4      0x0D
#define OV7725_COM5      0x0E
#define OV7725_COM6      0x0F
#define OV7725_AEC       0x10
#define OV7725_CLKRC     0x11
#define OV7725_COM7      0x12
#define OV7725_COM8      0x13
#define OV7725_COM9      0x14
#define OV7725_COM10     0x15
#define OV7725_REG16     0x16
#define OV7725_HSTART    0x17
#define OV7725_HSIZE     0x18
#define OV7725_VSTRT     0x19
#define OV7725_VSIZE     0x1A
#define OV7725_PSHFT     0x1B
#define OV7725_MIDH      0x1C
#define OV7725_MIDL      0x1D
#define OV7725_LAEC      0x1F
#define OV7725_COM11     0x20
#define OV7725_BDBase    0x22
#define OV7725_BDMStep   0x23
#define OV7725_AEW       0x24
#define OV7725_AEB       0x25
#define OV7725_VPT       0x26
#define OV7725_REG28     0x28
#define OV7725_HOutSize  0x29
#define OV7725_EXHCH     0x2A
#define OV7725_EXHCL     0x2B
#define OV7725_VOutSize  0x2C
#define OV7725_ADVFL     0x2D
#define OV7725_ADVFH     0x2E
#define OV7725_YAVE      0x2F
#define OV7725_LumHTh    0x30
#define OV7725_LumLTh    0x31
#define OV7725_HREF      0x32
#define OV7725_DM_LNL    0x33
#define OV7725_DM_LNH    0x34
#define OV7725_ADoff_B   0x35
#define OV7725_ADoff_R   0x36
#define OV7725_ADoff_Gb  0x37
#define OV7725_ADoff_Gr  0x38
#define OV7725_Off_B     0x39
#define OV7725_Off_R     0x3A
#define OV7725_Off_Gb    0x3B
#define OV7725_Off_Gr    0x3C
#define OV7725_COM12     0x3D
#define OV7725_COM13     0x3E
#define OV7725_COM14     0x3F
#define OV7725_COM16     0x41
#define OV7725_TGT_B     0x42
#define OV7725_TGT_R     0x43
#define OV7725_TGT_Gb    0x44
#define OV7725_TGT_Gr    0x45
#define OV7725_LC_CTR    0x46
#define OV7725_LC_XC     0x47
#define OV7725_LC_YC     0x48
#define OV7725_LC_COEF   0x49
#define OV7725_LC_RADI   0x4A
#define OV7725_LC_COEFB  0x4B
#define OV7725_LC_COEFR  0x4C
#define OV7725_FixGain   0x4D
#define OV7725_AREF1     0x4F
#define OV7725_AREF6     0x54
#define OV7725_UFix      0x60
#define OV7725_VFix      0x61
#define OV7725_AWBb_blk  0x62
#define OV7725_AWB_Ctrl0 0x63
#define OV7725_DSP_Ctrl1 0x64
#define OV7725_DSP_Ctrl2 0x65
#define OV7725_DSP_Ctrl3 0x66
#define OV7725_DSP_Ctrl4 0x67
#define OV7725_AWB_bias  0x68
#define OV7725_AWBCtrl1  0x69
#define OV7725_AWBCtrl2  0x6A
#define OV7725_AWBCtrl3  0x6B
#define OV7725_AWBCtrl4  0x6C
#define OV7725_AWBCtrl5  0x6D
#define OV7725_AWBCtrl6  0x6E
#define OV7725_AWBCtrl7  0x6F
#define OV7725_AWBCtrl8  0x70
#define OV7725_AWBCtrl9  0x71
#define OV7725_AWBCtrl10 0x72
#define OV7725_AWBCtrl11 0x73
#define OV7725_AWBCtrl12 0x74
#define OV7725_AWBCtrl13 0x75
#define OV7725_AWBCtrl14 0x76
#define OV7725_AWBCtrl15 0x77
#define OV7725_AWBCtrl16 0x78
#define OV7725_AWBCtrl17 0x79
#define OV7725_AWBCtrl18 0x7A
#define OV7725_AWBCtrl19 0x7B
#define OV7725_AWBCtrl20 0x7C
#define OV7725_AWBCtrl21 0x7D
#define OV7725_GAM1      0x7E
#define OV7725_GAM2      0x7F
#define OV7725_GAM3      0x80
#define OV7725_GAM4      0x81
#define OV7725_GAM5      0x82
#define OV7725_GAM6      0x83
#define OV7725_GAM7      0x84
#define OV7725_GAM8      0x85
#define OV7725_GAM9      0x86
#define OV7725_GAM10     0x87
#define OV7725_GAM11     0x88
#define OV7725_GAM12     0x89
#define OV7725_GAM13     0x8A
#define OV7725_GAM14     0x8B
#define OV7725_GAM15     0x8C
#define OV7725_SLOP      0x8D
#define OV7725_DNSTh     0x8E
#define OV7725_EDGE0     0x8F
#define OV7725_EDGE1     0x90
#define OV7725_DNSOff    0x91
#define OV7725_EDGE2     0x92
#define OV7725_EDGE3     0x93
#define OV7725_MTX1      0x94
#define OV7725_MTX2      0x95
#define OV7725_MTX3      0x96
#define OV7725_MTX4      0x97
#define OV7725_MTX5      0x98
#define OV7725_MTX6      0x99
#define OV7725_MTX_Ctrl  0x9A
#define OV7725_BRIGHT    0x9B
#define OV7725_CNST      0x9C
#define OV7725_UVADJ0    0x9E
#define OV7725_UVADJ1    0x9F
#define OV7725_SCAL0     0xA0
#define OV7725_SCAL1     0xA1
#define OV7725_SCAL2     0xA2
#define OV7725_SDE       0xA6
#define OV7725_USAT      0xA7
#define OV7725_VSAT      0xA8
#define OV7725_HUECOS    0xA9
#define OV7725_HUESIN    0xAA
#define OV7725_SIGN      0xAB
#define OV7725_DSPAuto   0xAC#endif //_OV7725_REG_H_

接着,对一些驱动OV7725时需要用到的值进行宏定义。

#ifndef _OV7725_EAGLE_H_
#define _OV7725_EAGLE_H_#include "OV7725_REG.h"
#define uint8 unsigned char
#define uint16 unsigned short //行中断
#define OV7725_HREF_PORT  PTA
#define OV7725_HREF_PIN   14
//场中断
#define OV7725_VSYNC_PORT PTB
#define OV7725_VSYNC_PIN  10
//像素中断
#define OV7725_PCLK_PORT  PTE
#define OV7725_PCLK_PIN  3
//配置摄像头 属性?
#define MAX_ROW            20                                    //定义摄像头图像宽度
#define MAX_COL            200                                    //定义摄像头图像高度typedef struct
{uint8 addr;                 /*寄存器地址*/uint8 val;                   /*寄存器值*/
} reg_s;/*返回数组元素的个数*/
#define ARR_SIZE( a ) ( sizeof( (a) ) / sizeof( ((a)[0]) ) )extern  uint8   ov7725_eagle_init(uint8 *imgaddr);
extern  void    ov7725_eagle_get_img(void);#endif  //_OV7725_EAGLE_H_

然后,撰写关于鹰眼摄像头的函数:

#include "sys.h"
#include "gpio.h"
#include "delay.h"
#include "dma.h"
#include "ftm.h"
#include "lptm.h"
#include "flash.h"
#include "stdio.h"
#include "uart.h"
#include "OV7725_REG.h"
#include "OV7725_Eagle.h"
#include "sccb.h"#define OV7725_EAGLE_Delay_ms(time)  DelayMs(time)volatile extern unsigned int       Col_Num,Col;//行计数
volatile extern unsigned char     Image[MAX_COL][MAX_ROW];
volatile extern unsigned char Flag;uint8   *ov7725_eagle_img_buff;//内部函数声明
static uint8 ov7725_eagle_reg_init(void);   //鹰眼 寄存器 初始化
static void ov7725_eagle_port_init();           //鹰眼 引脚 初始化void OV7725_Init()
{while(ov7725_eagle_reg_init() == 0);ov7725_eagle_port_init();
}/*!*  @brief      鹰眼ov7725管脚初始化(内部调用)*  @since      v5.0*/
void ov7725_eagle_port_init()
{unsigned int i;GPIO_InitTypeDef GPIO_InitStruct1;DMA_InitTypeDef DMA_InitStruct1;//数据IO口初始化for(i=0;i<8;i++){GPIO_InitStruct1.GPIO_Pin = i;GPIO_InitStruct1.GPIO_InitState = Bit_SET;GPIO_InitStruct1.GPIO_IRQMode = GPIO_IT_DISABLE;GPIO_InitStruct1.GPIO_Mode = GPIO_Mode_IN_FLOATING;GPIO_InitStruct1.GPIOx = PTD;GPIO_Init(&GPIO_InitStruct1);}//像素中断 PCLK 初始化GPIO_InitStruct1.GPIO_Pin = OV7725_PCLK_PIN;GPIO_InitStruct1.GPIO_InitState = Bit_SET;GPIO_InitStruct1.GPIO_IRQMode = GPIO_IT_DMA_RISING;GPIO_InitStruct1.GPIO_Mode = GPIO_Mode_IPD;GPIO_InitStruct1.GPIOx = OV7725_PCLK_PORT;GPIO_Init(&GPIO_InitStruct1);//行中断 HREF 初始化GPIO_InitStruct1.GPIO_Pin = OV7725_HREF_PIN;GPIO_InitStruct1.GPIO_InitState = Bit_SET;GPIO_InitStruct1.GPIO_IRQMode = GPIO_IT_RISING;GPIO_InitStruct1.GPIO_Mode = GPIO_Mode_IPD;GPIO_InitStruct1.GPIOx = OV7725_HREF_PORT;GPIO_Init(&GPIO_InitStruct1);// 场中断 VSYNC 初始化GPIO_InitStruct1.GPIO_Pin = OV7725_VSYNC_PIN;GPIO_InitStruct1.GPIO_InitState = Bit_SET;GPIO_InitStruct1.GPIO_IRQMode = GPIO_IT_RISING;   //GPIO_IT_RISINGGPIO_InitStruct1.GPIO_Mode = GPIO_Mode_IPD;   //GPIO_Mode_IPDGPIO_InitStruct1.GPIOx = OV7725_VSYNC_PORT;GPIO_Init(&GPIO_InitStruct1);//配置DMA
//   DMA_InitStruct1.Channelx          = DMA_CH1;         //DMA 1通道
//   DMA_InitStruct1.PeripheralDMAReq   =PORTE_DMAREQ;    //C端口(PCLK) 上升呀触发
//   DMA_InitStruct1.MinorLoopLength = 170;               //传输次数 超过摄像头每行像素数即可
//  DMA_InitStruct1.TransferBytes = 1;                   //每次传输1个字节
//  DMA_InitStruct1.DMAAutoClose  = ENABLE;              //连续采集
//  DMA_InitStruct1.EnableState = ENABLE;                //初始化后立即采集
//
//   DMA_InitStruct1.SourceBaseAddr =(uint32_t)&PTD->PDIR;//摄像头端口接D0-D7
//  DMA_InitStruct1.SourceMajorInc = 0;                  //地址不增加
//  DMA_InitStruct1.SourceDataSize = DMA_SRC_8BIT;       //8BIT数据
//  DMA_InitStruct1.SourceMinorInc = 0;//  //目前修改到22点37
//   DMA_InitStruct1.DestBaseAddr =(uint32_t)ov7725_eagle_img_buff;        //(uint32_t)ov7725_eagle_img_buff;  //DMA 内存  //uint8_t DMABuffer[400];
//  DMA_InitStruct1.DestMajorInc = 0;
//  DMA_InitStruct1.DestDataSize = DMA_DST_8BIT;
//  DMA_InitStruct1.DestMinorInc = 1;                   //每次传输 +1个字节
//  DMA_Init(&DMA_InitStruct1);}/*!*  @brief      鹰眼ov7725场中断服务函数*  @since      v5.0*/
void PORTB_IRQHandler(void)//功  能:PORTB 外部中断服务 //V
{uint8 i=10;if((PORTB->ISFR>>i)==1){Flag = 0;PORTB->ISFR|=(1<<10);   Col = 0;Col_Num = 0;DMA_SetEnableReq(DMA_CH1,DISABLE);        //close DMA ISr NVIC_EnableIRQ(PORTA_IRQn);//行NVIC_DisableIRQ(PORTB_IRQn);//场}
}
void PORTA_IRQHandler(void)//功  能:PORTA 外部中断服务//Herf
{unsigned int Send_Buffer;uint8 colour[2] = {254, 0};DMA_InitTypeDef DMA_InitStruct1;uint8 i=14,j,k;if((PORTA->ISFR>>i)==1);{PORTA->ISFR|=(1<<14);   if(Col_Num++ > 15)  //消隐区啦{if(Col_Num%2)   //进入行采集{//配置DMADMA_InitStruct1.Channelx          = DMA_CH1;         //DMA 1通道DMA_InitStruct1.PeripheralDMAReq   =PORTE_DMAREQ;    //E端口(PCLK) 上升呀触发    DMA_InitStruct1.MinorLoopLength = 24;       //170        //传输次数 超过摄像头每行像素数即可DMA_InitStruct1.TransferBytes = 1;                   //每次传输1个字节       DMA_InitStruct1.DMAAutoClose  = ENABLE;              //连续采集DMA_InitStruct1.EnableState = ENABLE;                //初始化后立即采集DMA_InitStruct1.SourceBaseAddr =(uint32_t)&PTD->PDIR;//摄像头端口接D0-D7DMA_InitStruct1.SourceMajorInc = 0;                  //地址不增加DMA_InitStruct1.SourceDataSize = DMA_SRC_8BIT;       //8BIT数据DMA_InitStruct1.SourceMinorInc = 0;DMA_InitStruct1.DestBaseAddr =(uint32_t)Image[Col];  //DMA 内存  //uint8_t DMABuffer[400]; DMA_InitStruct1.DestMajorInc = 0;DMA_InitStruct1.DestDataSize = DMA_DST_8BIT;DMA_InitStruct1.DestMinorInc = 1;                   //每次传输 +1个字节DMA_Init(&DMA_InitStruct1);//////Col ++; if(Col==MAX_COL)   //暂时先取200行{Flag = 1;                 //一场采集完成     DMA_SetEnableReq(DMA_CH1,DISABLE);    /NVIC_DisableIRQ(PORTA_IRQn);//行                      UART_SendData(UART4,0XFF); //调试用for(j=0;j<80;j++) for(k=0;k<23;k++){Send_Buffer = colour[ (Image[j][k] >> 7 ) & 0x01 ];UART_SendData(UART4,Send_Buffer);Send_Buffer = colour[ (Image[j][k] >> 6 ) & 0x01 ];UART_SendData(UART4,Send_Buffer);Send_Buffer = colour[ (Image[j][k] >> 5 ) & 0x01 ];UART_SendData(UART4,Send_Buffer);Send_Buffer = colour[ (Image[j][k] >> 4 ) & 0x01 ];UART_SendData(UART4,Send_Buffer);Send_Buffer = colour[ (Image[j][k] >> 3 ) & 0x01 ];UART_SendData(UART4,Send_Buffer);Send_Buffer = colour[ (Image[j][k] >> 2 ) & 0x01 ];UART_SendData(UART4,Send_Buffer);Send_Buffer = colour[ (Image[j][k] >> 1 ) & 0x01 ];UART_SendData(UART4,Send_Buffer);Send_Buffer = colour[ (Image[j][k] >> 0 ) & 0x01 ];UART_SendData(UART4,Send_Buffer);}NVIC_EnableIRQ(PORTB_IRQn);//场}}} }
}/*OV7725初始化配置表*/
reg_s ov7725_eagle_reg[] =
{//寄存器,寄存器值次{OV7725_COM4         , 0xC1},{OV7725_CLKRC        , 0x00},{OV7725_COM2         , 0x03},{OV7725_COM3         , 0xD0},{OV7725_COM7         , 0x40},{OV7725_HSTART       , 0x3F},{OV7725_HSIZE        , 0x50},{OV7725_VSTRT        , 0x03},{OV7725_VSIZE        , 0x78},{OV7725_HREF         , 0x00},{OV7725_SCAL0        , 0x0A},{OV7725_AWB_Ctrl0    , 0xE0},{OV7725_DSPAuto      , 0xff},{OV7725_DSP_Ctrl2    , 0x0C},{OV7725_DSP_Ctrl3    , 0x00},{OV7725_DSP_Ctrl4    , 0x00},#if (OV7725_EAGLE_W == 80){OV7725_HOutSize     , 0x14},
#elif (OV7725_EAGLE_W == 160){OV7725_HOutSize     , 0x28},
#elif (OV7725_EAGLE_W == 240){OV7725_HOutSize     , 0x3c},
#elif (OV7725_EAGLE_W == 320){OV7725_HOutSize     , 0x50},
#else#endif#if (OV7725_EAGLE_H == 60 ){OV7725_VOutSize     , 0x1E},
#elif (OV7725_EAGLE_H == 120 ){OV7725_VOutSize     , 0x3c},
#elif (OV7725_EAGLE_H == 180 ){OV7725_VOutSize     , 0x5a},
#elif (OV7725_EAGLE_H == 240 ){OV7725_VOutSize     , 0x78},
#else#endif{OV7725_EXHCH        , 0x00},{OV7725_GAM1         , 0x0c},{OV7725_GAM2         , 0x16},{OV7725_GAM3         , 0x2a},{OV7725_GAM4         , 0x4e},{OV7725_GAM5         , 0x61},{OV7725_GAM6         , 0x6f},{OV7725_GAM7         , 0x7b},{OV7725_GAM8         , 0x86},{OV7725_GAM9         , 0x8e},{OV7725_GAM10        , 0x97},{OV7725_GAM11        , 0xa4},{OV7725_GAM12        , 0xaf},{OV7725_GAM13        , 0xc5},{OV7725_GAM14        , 0xd7},{OV7725_GAM15        , 0xe8},{OV7725_SLOP         , 0x20},{OV7725_LC_RADI      , 0x00},{OV7725_LC_COEF      , 0x13},{OV7725_LC_XC        , 0x08},{OV7725_LC_COEFB     , 0x14},{OV7725_LC_COEFR     , 0x17},{OV7725_LC_CTR       , 0x05},{OV7725_BDBase       , 0x99},{OV7725_BDMStep      , 0x03},{OV7725_SDE          , 0x04},{OV7725_BRIGHT       , 0x00},{OV7725_CNST         , 0xFF},{OV7725_SIGN         , 0x06},{OV7725_UVADJ0       , 0x11},{OV7725_UVADJ1       , 0x02},};uint8 ov7725_eagle_cfgnum = ARR_SIZE( ov7725_eagle_reg ) ; /*结构体数组成员数目*//*!*  @brief      鹰眼ov7725寄存器 初始化*  @return     初始化结果(0表示失败,1表示成功)*  @since      v5.0*/
uint8 ov7725_eagle_reg_init(void)
{uint16 i = 0;uint8 Sensor_IDCode = 0;SCCB_GPIO_init();//OV7725_Delay_ms(50);if( 0 == SCCB_WriteByte ( OV7725_COM7, 0x80 ) ) /*复位sensor */{//      DEBUG_PRINTF("\n警告:SCCB写数据错误");return 0 ;}OV7725_EAGLE_Delay_ms(50);if( 0 == SCCB_ReadByte( &Sensor_IDCode, 1, OV7725_VER ) )    /* 读取sensor ID号*/{//     DEBUG_PRINTF("\n警告:读取ID失败");return 0;}// DEBUG_PRINTF("\nGet ID success,SENSOR ID is 0x%x", Sensor_IDCode);//  DEBUG_PRINTF("\nConfig Register Number is %d ", ov7725_eagle_cfgnum);if(Sensor_IDCode == OV7725_ID){for( i = 0 ; i < ov7725_eagle_cfgnum ; i++ ){if( 0 == SCCB_WriteByte(ov7725_eagle_reg[i].addr, ov7725_eagle_reg[i].val) ){//             DEBUG_PRINTF("\n警告:写寄存器0x%x失败", ov7725_eagle_reg[i].addr);return 0;}}}else{return 0;}// DEBUG_PRINTF("\nOV7725 Register Config Success!");return 1;
}

由于鹰眼摄像头的特色,直接导致了图像发送给上位机的时候需要进行一些细操作,才能在上位机上看到相应图像。如:

          for(i=0;i<80;i++)  //本来应该是278for(j=0;j<20;j++)  //320 may be too large;   //暂时为了提高上位机刷图速度降低两边宽度{Send_Buffer = colour[ (Image[i][j] >> 7 ) & 0x01 ];UART_SendData(UART4,Send_Buffer);Send_Buffer = colour[ (Image[i][j] >> 6 ) & 0x01 ];UART_SendData(UART4,Send_Buffer);Send_Buffer = colour[ (Image[i][j] >> 5 ) & 0x01 ];UART_SendData(UART4,Send_Buffer);Send_Buffer = colour[ (Image[i][j] >> 4 ) & 0x01 ];UART_SendData(UART4,Send_Buffer);Send_Buffer = colour[ (Image[i][j] >> 3 ) & 0x01 ];UART_SendData(UART4,Send_Buffer);Send_Buffer = colour[ (Image[i][j] >> 2 ) & 0x01 ];UART_SendData(UART4,Send_Buffer);Send_Buffer = colour[ (Image[i][j] >> 1 ) & 0x01 ];UART_SendData(UART4,Send_Buffer);Send_Buffer = colour[ (Image[i][j] >> 0 ) & 0x01 ];UART_SendData(UART4,Send_Buffer);}       

接下来就能成功的在上位机上看到相应的图像了。

大概总结:对于每一款摄像头的操作,先对它进行SCCB的写操作,初始化成自己需要的分辨率、模式,等等。

SCCB初始化之后,再进行场中断、行中断、像素中断的函数处理编辑。

最后发送到上位机上,进行显示和处理。很多上位机都可以让用户自己在Visual Stdio上编写自己的算法,直接在上位机上处理,很赞。

鹰眼摄像头(OV7725)的使用相关推荐

  1. 4-3.stm32之摄像头 ov7725的使用

    ov7725介绍 ov7725(OmniVsion_OV7725)是由OV(豪威科技)生产的一款CMOS的摄像头,已经被中国财团收购.OV7725 SCCB的接口时序(OmniVision Seria ...

  2. OV7620摄像头使用

    转载请注明出处:http://blog.csdn.net/lxk7280 有人会奇怪为什么使用OV系列的摄像头每次都要进行SCCB的操作呢?难道它自己不会保存上次的操作结果吗? 原因是:OV系列的摄像 ...

  3. 浅谈全国大学生智能车竞赛-摄像头组图像处理及控制算法

    由于是第一次写技术博客,先做一下自我介绍.本人本科专业是光电信息科学与工程(工),就读于长春理工大学光电工程学院,研究生为华中科技大学光学工程专业.本科期间参加参加过各类比赛,其中印象最深的还是智能车 ...

  4. 智能车竞赛技术报告 | 基础四轮组 - 大连理工大学 - 霹雳小队

    学 校:大连理工大学  队伍名称:霹雳小队    参赛队员:黄涛      郝泽源     何泽禹     带队教师:吴振宇 李胜铭 引 言   随着近几年的电子科学技术的不断发展,电子科技的影响逐渐 ...

  5. 智能车竞赛技术报告 | 智能车视觉 - 太原工业学院 - 晋速-轩辕星

    简 介: 本文详细介绍了太原工业学院"晋速-轩辕星"在第十六届全国大学生智能汽车竞赛智能视觉组的系统方案.本次比赛采用大赛组委会统一指定的新 C 型车模,以NXP公司生产的RT10 ...

  6. 4个mos管驱动的全桥电路原理_电源转压电路设计基础

    一.电源转压模块 所谓电源转压是将输入电压通过转压电路实现升/降压功能以供其他模块使用,智能车制作中,输入电池电压为7.2V,其他模块所需电压如下:最小系统板/OLED/鹰眼摄像头3.3V.运放供电± ...

  7. mos管h桥电机驱动电路与设计原理图-KIA MOS管 (kiaic.com)

    来源: mos管h桥电机驱动电路与设计原理图-KIA MOS管 (kiaic.com) 一.mos管H桥电路 图1中所示为一个典型的直流电机控制电路. 电路得名于"H桥驱动电路"是 ...

  8. 智能车竞赛技术报告 | 全向行进组 - 东北林业大学- 进取号E

    参赛学校:东北林业大学 队伍名称:进取号E     参赛队员:郭誉博    张晓龙    卢佰奇    第一章 引言   全国大学生智能汽车竞赛是以智能汽车为研究对象的创意性科技竞赛,是面向全国大学生 ...

  9. 四旋翼自主飞行器探测跟踪系统补充

    2017年8月12日 摘 要 本设计以16位瑞萨单片机RX23T/R5F523T5ADFM作为控制核心stm32驱动飞行器的四个直流电机,利用角速度传感器.加速度传感器等各类传感器组成飞行器飞行状态检 ...

  10. 第十八届全国大学智能车竞赛车模作品中的电子模块: 白名单与黑名单

    简 介: 本文给出了 第十八届全国大学生智能车竞赛 参赛作品中传感器模块黑名单与白名单. 该文档将会在 2023年 6月30日之前停止更新. 欢迎大家在竞赛公众号TSINGHUAZHUOQING以及本 ...

最新文章

  1. MySQL 字段类型知识
  2. python基础语法总结-Python基础语法总结之逻辑运算
  3. python将大于输出列表_python找出列表中大于某个阈值的数据段示例
  4. 浏览器差异总结,可以用此判断浏览器版本(转)
  5. cocos2d的常用动作及效果总结之五:Animation
  6. java中转json字符串_如何在Java中转义JSON字符串-Eclipse IDE技巧
  7. 关于Binder的点点滴滴(二)
  8. [转载]用UglifyJS2合并压缩混淆JS代码——javascript系列
  9. 遇到问题就请外援,汝作为高手的价值在哪里
  10. 海康rtsp视频流直播-kurento
  11. 掘金小册8折优惠:掌握这些技术,轻松拿offer
  12. 1分钟教你破解风行电视禁止安装应用!
  13. VBScript编程教程 [下]
  14. 那些年京东出现的BUG损失惨重,你还敢瞧不起测试?
  15. 一代人终将老去,但总有人正年轻
  16. Windows下WordPress安装教程(全)
  17. python 修改文件只读_Python脚本去除文件的只读性操作
  18. PTA---航空公司VIP客户查询 (25分)---Stl-Map容器简单使用
  19. 天津大学计算机专硕_天津大学计算机技术专硕考研参考书
  20. 夹角余弦 python_python 根据余弦定理计算两边的夹角

热门文章

  1. 视频贴片广告有哪些形式,视频贴片广告展示形式如何?
  2. swiper半圆形旋转
  3. 简单谈谈MySQL的两阶段提交
  4. Word文档中统一字符串八大妙法(转)
  5. Websphere 学习(二)
  6. 【法律】如何保障未来夫妻合法权益:婚前房屋财产约定协议书
  7. cad转excel插件c2e_cad表格转换器2016
  8. 3GPP协议下载地址
  9. 如何连接学校计算机机房的网络,学校电脑室机房管理之网络连接
  10. WIFI和路由器密码破解的方法