/*******************************************************************************
//
// 使用单片机STM32F100C8T6 8
// 晶振:8.00M
// 编译环境 Keil uVision4
// 在3.3V的供电环境下,就能运行
// 波特率 115200
// 使用:STM32F100C8T6串口1连接电脑
*******************************************************************************/
#include "stm32f10x_lib.h"
#include "usart.h"
#include "delay.h"
#include "sys_config.h"
#include "dcmi_ov2640.h"
#define uchar unsigned char
#define uint unsigned int
extern u32 JpegDataCnt;
extern u8 JpegBuffer[10240];
extern u8 VsyncActive;
OV2640_IDTypeDef OV2640_Camera_ID;
/*
********************************************************************************
** 函数名称 : main(void)
** 函数功能 : 主函数
** 输 入 : 无
** 输 出 : 无
** 返 回 : 无
********************************************************************************
*/
int main(void)
{
u16 i = 0;
RCC_Configuration(); //配置RCC
USART1_Configuration(); //配置串口1
Delay_Init(72);
OV2640_HW_Init(); //IIC初始化
OV2640_ReadID(&OV2640_Camera_ID); //读取OV2640ID,测试硬件,依次为:0x7F,0xA2,0x26,0x42
OV2640_JPEGConfig(JPEG_160x120); //配置OV2640输出320*240像素的JPG图片
OV2640_BrightnessConfig(0x20);
OV2640_AutoExposure(2);
OV2640_CaptureGpioInit(); //数据采集引脚初始化
EXTI->IMR &= ~EXTI_Line8; //关闭场同步中断
EXTI->EMR &= ~EXTI_Line8;
EXTI->IMR &= ~EXTI_Line12; //关闭像素同步中断
EXTI->EMR &= ~EXTI_Line12;
Delay_nMS(10); //等待图像输出稳定
EXTI->IMR |= EXTI_Line8; //使能场同步中断,准备下次采集
EXTI->EMR |= EXTI_Line8;
while(1)
{
if(VsyncActive == 2)
{
//封帧格式为:0xAA CMD 0x55
if(get_flag_usart()==1)
{
while(JpegBuffer[JpegDataCnt]==0) //将后边的无用的0去掉
JpegDataCnt--;
if(JpegBuffer[0]==0xff && JpegBuffer[1]==0xd8 && JpegBuffer[JpegDataCnt-1]==0xff && JpegBuffer[JpegDataCnt]==0xd9)
{
JpegDataCnt++;
for(i = 0; i < JpegDataCnt; i ++)
USART1_SendData(JpegBuffer[i]);
set_flag_usart(0);
}
}
JpegDataCnt++;
for(i=0;i < JpegDataCnt; i ++) //手动清除大数组
JpegBuffer[i]=0;
//else Delay_nMS(50);
JpegDataCnt = 0; //JPEG计数器清零
EXTI->IMR |= EXTI_Line8; //使能场同步中断,准备下次采集
EXTI->EMR |= EXTI_Line8;
//VsyncCnt = 0; //开始下一帧数据采集
}
}
}