标题:
ov7670+stm32 灰度图采集程序
[打印本页]
作者:
oaujunpong
时间:
2017-5-6 15:20
标题:
ov7670+stm32 灰度图采集程序
分享一个ov7670 +stm32 灰度图采集程序给大家
CMOS OV7670-FIFO模块测试程序
将带FIFO的OV7670模块插入板上的CMOS1接口中,摄像头朝上,接上电源,TFT上显示摄像头拍摄图像。
由于CMOS的数据先读入MCU后,MCU再将图像数据送到TFT上显示,故显示速度相对较慢。
注意:
由于FIFO控制脚复用了JTAG调试引脚,故该程序不能用JTAG在线调试。
一旦程序下载到芯片中后,JTAG引脚将被当作普通IO口使用,并且在没有解锁前,不能够再次进行JTAG仿真测试。
解锁办法:
通过串口下载一个正常的程序到芯片中即可,比如可以选择QF-TEST-LED中的文件进行下载。
J1 1、2端用跳帽连接
J2 1、2端用跳帽连接
J3 1、2端用跳帽连接
0.png
(49.67 KB, 下载次数: 46)
下载附件
2017-5-6 18:01 上传
程序升级:
按key2按键,可实现解锁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; //用于像素计数
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]= //采样行,校准纵向畸变
{
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();;//系统时钟设置
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); //清楚悬挂标记位;
datareadyflag=0;
//-----------------------------------------------------------------------
// DataAnalyse(1);
send_pic();
//-----------------------------------------------------------------------
EXTI->IMR|=(1<<4); //允许外部中断,以便接收下帧图像数据
}
}
}
/*******************************************************************************
* 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;//先使能外设PORTA时钟
RCC->APB2ENR|=1<<3;//先使能外设PORTB时钟
RCC->APB2ENR|=1<<4;//先使能外设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功能禁止,复用JTAG端口
}
//保持原有配置
void GPIO_Configuration(void)
{
/* 定义 GPIO 初始化结构体 GPIO_InitStructure */
GPIO_InitTypeDef GPIO_InitStructure;
/* 设置USART1的Tx脚(PA.9)为第二功能推挽输出模式 */
…………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
下载(此代码年代久远,采用的老版本的库和老版本看Keil编写的):
Keil代码.7z
(272.38 KB, 下载次数: 60)
2022-11-22 02:56 上传
点击文件名下载附件
下载积分: 黑币 -5
作者:
_少年放肆的梦
时间:
2017-8-5 12:07
谢谢楼主
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1