|
本例程,是通過stm32中斷獲取攝像頭數(shù)據(jù),只獲取了Y數(shù)據(jù)存于數(shù)組中,而且因?yàn)镾RAM內(nèi)存不夠只取部分?jǐn)?shù)據(jù)顯示LCD屏,成像沒問題不過還是有點(diǎn)慢,效果是能看出來一幀一幀圖像刷,猜測有很大原因是攝像頭數(shù)據(jù)寫入LCD屏RAM速度慢,可能還有其他解決辦法吧,本人實(shí)力有限,那話不多說了,直接給代碼,這是主函數(shù)代碼
- /* Includes ------------------------------------------------------------------*/
- #include "stm32f10x.h"
- #include <stdio.h>
- #include "delay.h"
- #include "usart.h"
- #include "GC2155.h"
- #include "SCCB.h"
- #include "stm32f10x_flash.h"
- #include "lcd.h"
- u8 display[62400]={0};
- void EXTI15_10_IRQHandler(void) //VSYNC --- PG15
- {
- unsigned short i;
-
- if(EXTI->PR & 0x08000)//發(fā)生了場中段
- {
- EXTI->PR |= 1<<15; //在該位寫1清清除PG15中斷
- EXTI->IMR &= 0<<15; //屏蔽PG15中斷
- for(i = 0;i < 1000;i++);
- TimerCnt2=0;
- //初始化DMA
- EXTI->IMR |= 1<<14; //開行中斷
-
- }
- else
- {
- //啟動(dòng)DMA傳輸,每個(gè)PCLK下降沿觸發(fā)DAM傳輸
-
- if(EXTI->PR & 0x04000) //發(fā)生行中段
- {
- //while(!(GPIOG->IDR&0x0400)); //下降沿觸發(fā)數(shù)據(jù)獲取
-
- for(i=0;i<480;i++)
- {
- if((i+1)%2)
- {
- display[TimerCnt2]=(GPIOC->IDR&0xff);
- TimerCnt2++;
- }
- }
-
-
- if(TimerCnt2>=62400) //判斷是否寫完,寫完則屏蔽中斷
- {
- EXTI->IMR &= 0<<14;
- EXTI->IMR &= 0<<15; //屏蔽PG15中斷
- }
- EXTI->PR=1<<14; //清除行中段
- }
-
- }
-
- }
- int main(void)
- {
- u16 R,G,B,Y;
- u16 i;
- i=0;
-
- delay_init();
- uart_init(115200);
- //TIM3_Int_Init(999,71);//1MHZ的計(jì)數(shù)頻率,計(jì)數(shù)到1000為1ms
- LCD_Init();
- LCD_WriteRAM_Prepare();
-
- delay_ms(100);
- while(1!=OV7670_init()) ;
- OV7670_GPIO_CONTRL_CONFIG();
- NVIC_Configuration();
-
- while(1)
- {
- if(TimerCnt2==62400)
- {
- LCD_Clear(0xffff);
- for(i=0;i<62400;i++)
- {
- Y=(display[i]&0xff);
- Y<<=8;
-
- R=Y&0xf800;
- B=Y>>11;
- Y>>=5;
- G=Y&0x07e0;
-
- LCD_WriteRAM(R+G+B);
- }
- i=0;
- TimerCnt2=0;
- EXTI->IMR |= 1<<15;
- }
- }
- }
復(fù)制代碼
只有代碼資料,攝像頭資料你們上官網(wǎng),或其他網(wǎng)站都可以搜到
|
-
-
Demo_032a_2.7z
2019-12-11 11:08 上傳
點(diǎn)擊文件名下載附件
229.57 KB, 下載次數(shù): 146
整個(gè)工程文件都在里面
評分
-
查看全部評分
|