|
分享一個ov7670 +stm32 灰度圖采集程序給大家
CMOS OV7670-FIFO模塊測試程序
將帶FIFO的OV7670模塊插入板上的CMOS1接口中,攝像頭朝上,接上電源,TFT上顯示攝像頭拍攝圖像。
由于CMOS的數(shù)據(jù)先讀入MCU后,MCU再將圖像數(shù)據(jù)送到TFT上顯示,故顯示速度相對較慢。
注意:
由于FIFO控制腳復(fù)用了JTAG調(diào)試引腳,故該程序不能用JTAG在線調(diào)試。
一旦程序下載到芯片中后,JTAG引腳將被當(dāng)作普通IO口使用,并且在沒有解鎖前,不能夠再次進行JTAG仿真測試。
解鎖辦法:
通過串口下載一個正常的程序到芯片中即可,比如可以選擇QF-TEST-LED中的文件進行下載。
J1 1、2端用跳帽連接
J2 1、2端用跳帽連接
J3 1、2端用跳帽連接
程序升級:
按key2按鍵,可實現(xiàn)解鎖JTAG口,此時可以通過仿真器下載程序,若要看到圖像,注意要拔掉仿真器。
源程序:
- #include <stm32f10x.h>
- #include <stdio.h>
- #include <usart.h>
- #include <Nvic_Exit.h>
- #include <delay.h>
- #include <tft.h>
- #include <ov7670.h>
- #include<I2C.h>
- #include "include.h"
- #include "Image.h"
- void RCC_Configuration(void);
- void GPIO_Configuration(void);
- void USART_Configuration(void);
- void IO_Init(void);
- extern u8 KEY;
- u16 PixelCounter; //用于像素計數(shù)
- u8 datareadyflag;
- //u8 data[40*160];
- u8 data[R][C];
- u8 * Data;
- #define White 244
- #define Black 0
- #define STRM 500
- #define STRL 380
- #define STRR 652
- //#define STRE 1200
- u8 InterruptLine=0;
- u8 TrueLine;
- u8 DataReadyFlag=0;
- u8 BlackLineData[R];
- u8 Left[R]={1};
- u8 Right[R]={C-1};
- //uchar Mid[R]={R/2};
- u8 LastFieldMid1=45;
- u8 LastFieldMid2=45;
- u8 ThresholdValue=130;
- s16 Err = 0;
- s16 Errlast = 0;
- s16 Errd = 0;
- s16 Errdlast = 0;
- s16 Erri = 0;
- s16 Roadtype = 0;
- s16 Errhistory[8]={0};
- u16 Steerangle = 0;
- const u16 SlampeLine[R]= //采樣行,校準(zhǔn)縱向畸變
- {
- 56,//
- 57,//
- 58,//
- 59,//
- 60,//
- 61,//121.5
- 62,//118
- 64,//114.5
- 66,//111
- 68,//107.5
- 70,//104
- 72,//100.5
- 74,//97
- 76,//93.5
- 79,//90
- 82,//86.5
- 85,//83
- 88,//79.5
- 91,//76
- 94,//72.5
- 97, //69
- 101,//65.5
- 105,//62
- 110,//58.5
- 115,//55
- 120,//51.5
- 126,//48
- 134,//44.5
- 142,//41
- 150,//37.5
- 158,//34
- 166,//30.5
- 174,//27
- 182,//23.5cm
- 190,//20cm
- 204,//16.5cm
- 220,//13cm
- 238 //9.5cm
- };
- main()
- {
- RCC_Configuration();;//系統(tǒng)時鐘設(shè)置
- delay_init(72); //延時初始化
- USART1_Init(115200);//串口1初始化
- // printf("QF: You are welcom!\r\n");
- Cmos_CS =1 ;
- LCD_Init();
- IO_Init();
- GPIO_Configuration();
- USART_Configuration();
- LCD_Clear(BLUE); //清屏
- POINT_COLOR=YELLOW;
- BACK_COLOR=BLUE;
- //LCD_ShowString(20,50,"QF Welcom");
- /// LCD_ShowString(20,100,"STM32 Camera");
- // LCD_ShowString(20,150,"MYOV7670 Initing......");
-
- CMOS1_PWDN=0;
- CMOS1_RST=0;
- delay_ms(20);
- CMOS1_RST=1;
- InitI2C0();
- while(1!=Cmos7670_init()); //CMOS初始化
- Exit_Init(GPIOC, GPIO_Pin_4, GPIO_Mode_IPU, EXTI_Trigger_Falling, 2, 5); //VSYNC
- Exit_Init(GPIOD, GPIO_Pin_2, GPIO_Mode_IPU, EXTI_Trigger_Falling, 2, 0);
- while(1)
- {
-
-
- if (datareadyflag==1)
- {
- EXTI->IMR &=~(1<<4); //屏蔽中斷
- EXTI->PR |=(1<<4); //清楚懸掛標(biāo)記位;
- datareadyflag=0;
- //-----------------------------------------------------------------------
- // DataAnalyse(1);
- send_pic();
- //-----------------------------------------------------------------------
- EXTI->IMR|=(1<<4); //允許外部中斷,以便接收下幀圖像數(shù)據(jù)
- }
- }
- }
- /*******************************************************************************
- * Function Name : RCC_Configuration
- * Description : RCC select(external 8MHz)
- * Input : NO
- * Output : NO
- * Return : NO
- *******************************************************************************/
- void RCC_Configuration(void)
- {
- ErrorStatus HSEStartUpStatus;
- RCC_DeInit();
- RCC_HSEConfig(RCC_HSE_ON);
- HSEStartUpStatus = RCC_WaitForHSEStartUp();
- if(HSEStartUpStatus == SUCCESS)
- {
-
- RCC_HCLKConfig(RCC_SYSCLK_Div1);
- RCC_PCLK2Config(RCC_HCLK_Div1);
- RCC_PCLK1Config(RCC_HCLK_Div2);
- RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);
- RCC_PLLCmd(ENABLE);
- while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)
- {
- }
- RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
- while(RCC_GetSYSCLKSource() != 0x08)
- {
- }
- }
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO|RCC_APB2Periph_USART1, ENABLE);
- }
- void IO_Init(void)
- {
- RCC->APB2ENR|=1<<0;//開啟輔助時鐘
- RCC->APB2ENR|=1<<2;//先使能外設(shè)PORTA時鐘
- RCC->APB2ENR|=1<<3;//先使能外設(shè)PORTB時鐘
- RCC->APB2ENR|=1<<4;//先使能外設(shè)PORTC時鐘
- GPIOA->CRH=0X33333333; //PORTA上拉輸出
- GPIOA->CRL=0X33333333;
- GPIOA->ODR=0XFFFF;
- GPIOB->CRL=0X88888888; //PB0-7 上拉輸入
- GPIOB->CRH=0X33333333; //PB8-15 上拉輸出
- GPIOA->ODR=0XFFFF;
- GPIOC->CRH=0X33333333; //PORTC上拉輸出
- GPIOC->CRL=0X33333333;
- GPIOC->ODR=0XFFFF;
-
- JTAG_Set(JTAG_SWD_DISABLE); //JTAG功能禁止,復(fù)用JTAG端口
- }
- //保持原有配置
- void GPIO_Configuration(void)
- {
- /* 定義 GPIO 初始化結(jié)構(gòu)體 GPIO_InitStructure */
- GPIO_InitTypeDef GPIO_InitStructure;
-
- /* 設(shè)置USART1的Tx腳(PA.9)為第二功能推挽輸出模式 */
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復(fù)制代碼
下載(此代碼年代久遠,采用的老版本的庫和老版本看Keil編寫的):
Keil代碼.7z
(272.38 KB, 下載次數(shù): 60)
2022-11-22 02:56 上傳
點擊文件名下載附件
|
|