stm32无fifo OV7670 实时显示HAL库程序

一、简介:  

OV7670一般模块指低成本数字输出CMOS摄像头,其摄像头包含30w像素的CMOS图像感光芯片,3.6mm焦距的镜头和镜头座,板载CMOS芯片所需要的各种不同电源(电源要求详见芯片的数据文件),板子同时引出控制管脚和数据管脚,方便操作和使用。

214199c585004536b35120e44edc8ceb.png

二、管脚定义

3V3-----输入电源电压(推荐使用3.3,5V也可,但不推荐) 

GDN-----接地点 

SIO_C---SCCB接口的控制时钟(注意:部分低级单片机需要上拉控制,和I2C接口类似) SIO_D---SCCB接口的串行数据输入(出)端(注意:部分低级单片机需要上拉控制,和I2C接口类似) 

VSYNC---帧同步信号(输出信号) 

HREF----行同步信号(输出信号) 

PCLK----像素时钟(输出信号) 

XCLCK---时钟信号(输入信号,时钟速度可以高达24M) 

D0-D7---数据端口(输出信号) 

RESTE---复位端口(正常使用拉高) 

PWDN----功耗选择模式(正常使用拉低) 

三、SCCB通讯时序

其作用是设置芯片内部寄存器,以控制图像的各种所需功能。其时序和一般的I2C时序相似,部分低级单片机要接上拉电阻。

行输出时序 

行输出时序可用来控制一行像素的输出情况,HREF即一行输出的开始和结束信号,同时在像素时钟的同步下,输出8位的像素信号行输出时序图:

a23999fe972d44389f7d96633648263a.jpg

全帧输出下的时序情况: 

该图显示的是一副图像输出的情况下,各控制信号和数据信号的输出。图中,VGA=640X480大小情况下,帧同步信号,行同步信号(HREF或 者HSYNC,注:HSYNC在其它场合下使用,CMOS可以设置,更多时候用HREF即可)如图:

af3c889368804e86a8c8c7a8c4ef148a.jpg

//MAIN.C

 uint16_t Row[320];

int main(void)

uint16_t linecnt=0; 

uint16_t pixcnt=0; 

  HAL_Init();

  SystemClock_Config();

 MX_USART1_UART_Init();

  printf("\r\n按下KEY1,测试KEY1按下的时间\r\n");

    static unsigned long TimerCnt = 0;

    static unsigned int temp7670 = 0;      

   uint16_t value,val,val1,val2;

   ILI9341_Init (); //LCD 初始化

    ILI9341_GramScan( 3 );

   LCD_SetFont(&Font8x16);

   LCD_SetColors(RED,BLACK);

  ILI9341_Clear(0,0,LCD_X_LENGTH,LCD_Y_LENGTH); /* 清屏,显示全黑 */

 ILI9341_DispStringLine_EN(LINE(0),"BH OV7725 Test Demo");

 while(1!=OV7660_init()); 

    while(1) 

    {

       while(value & 0x0800) value = GPIOB->IDR;    

       while((~value) & 0x0800) value = GPIOB->IDR;  

       LI9341_OpenWindow(0,0,320,240);                  

       ILI9341_Write_Cmd ( 0x2C ); 

       for(linecnt=0;linecnt<240;linecnt++)  

  {

   while(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_8)==0);

   for(pixcnt=0;pixcnt<320;pixcnt++)

   {

    while(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_9)==0);

    Row[pixcnt]=GPIOC->IDR&0XFF;

    while(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_9)==1); 

    Row[pixcnt]<<=8;

    while(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_9)==0);  

    Row[pixcnt]|=GPIOC->IDR&0XFF; 

    while(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_9)==1);                

   }  

   for(pixcnt=0;pixcnt<320;pixcnt++)

   {

             val =ili9320_BGR2RGB(Row[pixcnt]);

             ILI9341_Write_Data(val);

            }

       }

  }

}

 

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

微信公众号:数模0error

你的鼓励是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值