找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3950|回复: 1
打印 上一主题 下一主题
收起左侧

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端用跳帽连接



程序升级:

按key2按键,可实现解锁JTAG口,此时可以通过仿真器下载程序,若要看到图像,注意要拔掉仿真器。
   
源程序:

  1. #include <stm32f10x.h>
  2. #include <stdio.h>
  3. #include <usart.h>
  4. #include <Nvic_Exit.h>
  5. #include <delay.h>
  6. #include <tft.h>
  7. #include <ov7670.h>
  8. #include<I2C.h>
  9. #include "include.h"
  10. #include "Image.h"

  11. void RCC_Configuration(void);
  12. void GPIO_Configuration(void);
  13. void USART_Configuration(void);
  14. void IO_Init(void);               
  15. extern u8 KEY;


  16. u16 PixelCounter;   //用于像素计数
  17. u8 datareadyflag;

  18. //u8 data[40*160];
  19. u8 data[R][C];
  20. u8 * Data;


  21. #define   White   244
  22. #define   Black   0

  23. #define STRM  500
  24. #define STRL  380
  25. #define STRR  652
  26. //#define STRE  1200


  27. u8 InterruptLine=0;
  28. u8 TrueLine;
  29. u8 DataReadyFlag=0;


  30. u8 BlackLineData[R];
  31. u8 Left[R]={1};
  32. u8 Right[R]={C-1};
  33. //uchar Mid[R]={R/2};

  34. u8 LastFieldMid1=45;
  35. u8 LastFieldMid2=45;

  36. u8 ThresholdValue=130;
  37. s16 Err = 0;
  38. s16 Errlast   = 0;
  39. s16 Errd  = 0;
  40. s16 Errdlast  = 0;
  41. s16 Erri  = 0;
  42. s16 Roadtype  = 0;
  43. s16 Errhistory[8]={0};
  44. u16  Steerangle  = 0;

  45. const u16 SlampeLine[R]=     //采样行,校准纵向畸变
  46.   {
  47.      56,//
  48.      57,//
  49.      58,//
  50.      59,//
  51.      60,//
  52.      61,//121.5
  53.      62,//118
  54.      64,//114.5
  55.      66,//111
  56.      68,//107.5
  57.      70,//104
  58.      72,//100.5
  59.      74,//97
  60.      76,//93.5
  61.      79,//90
  62.      82,//86.5
  63.      85,//83
  64.      88,//79.5
  65.      91,//76
  66.      94,//72.5
  67.      97, //69
  68.      101,//65.5
  69.      105,//62
  70.      110,//58.5
  71.      115,//55
  72.      120,//51.5
  73.      126,//48
  74.      134,//44.5
  75.      142,//41
  76.      150,//37.5
  77.      158,//34
  78.      166,//30.5
  79.      174,//27
  80.      182,//23.5cm
  81.      190,//20cm
  82.      204,//16.5cm
  83.      220,//13cm
  84.      238 //9.5cm
  85.   };






  86. main()
  87. {
  88.         RCC_Configuration();;//系统时钟设置
  89.         delay_init(72);                //延时初始化
  90.         USART1_Init(115200);//串口1初始化  
  91. //        printf("QF: You are welcom!\r\n");

  92.         Cmos_CS =1 ;  
  93.         LCD_Init();
  94.         IO_Init();
  95.         GPIO_Configuration();

  96.         USART_Configuration();
  97.         LCD_Clear(BLUE);       //清屏
  98.         POINT_COLOR=YELLOW;
  99.         BACK_COLOR=BLUE;
  100.   //LCD_ShowString(20,50,"QF Welcom");
  101. ///        LCD_ShowString(20,100,"STM32 Camera");
  102. //        LCD_ShowString(20,150,"MYOV7670 Initing......");
  103.    
  104.         CMOS1_PWDN=0;
  105.         CMOS1_RST=0;
  106.         delay_ms(20);
  107.         CMOS1_RST=1;
  108.         InitI2C0();         
  109.         while(1!=Cmos7670_init());   //CMOS初始化        
  110.         Exit_Init(GPIOC, GPIO_Pin_4, GPIO_Mode_IPU, EXTI_Trigger_Falling, 2, 5);        //VSYNC                 
  111.         Exit_Init(GPIOD, GPIO_Pin_2, GPIO_Mode_IPU, EXTI_Trigger_Falling, 2, 0);
  112.           while(1)
  113.         {
  114.          
  115.             
  116.                         if (datareadyflag==1)
  117.                         {
  118.                          EXTI->IMR &=~(1<<4);  //屏蔽中断           
  119.              EXTI->PR |=(1<<4);  //清楚悬挂标记位;
  120.                     datareadyflag=0;
  121. //-----------------------------------------------------------------------
  122.                         //   DataAnalyse(1);
  123.                        send_pic();

  124. //-----------------------------------------------------------------------
  125.                          EXTI->IMR|=(1<<4);          //允许外部中断,以便接收下帧图像数据

  126.                         }
  127.         }
  128. }

  129. /*******************************************************************************
  130. * Function Name  : RCC_Configuration
  131. * Description    : RCC select(external 8MHz)
  132. * Input          : NO
  133. * Output         : NO
  134. * Return         : NO
  135. *******************************************************************************/
  136. void RCC_Configuration(void)
  137. {

  138.   ErrorStatus HSEStartUpStatus;
  139.   RCC_DeInit();
  140.   RCC_HSEConfig(RCC_HSE_ON);   
  141.   HSEStartUpStatus = RCC_WaitForHSEStartUp();

  142.   if(HSEStartUpStatus == SUCCESS)         
  143.   {
  144.   
  145.     RCC_HCLKConfig(RCC_SYSCLK_Div1);  
  146.     RCC_PCLK2Config(RCC_HCLK_Div1);                  
  147.         RCC_PCLK1Config(RCC_HCLK_Div2);                  
  148.     RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);        
  149.     RCC_PLLCmd(ENABLE);
  150.     while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)         
  151.        {
  152.        }
  153.     RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
  154.     while(RCC_GetSYSCLKSource() != 0x08)         
  155.        {
  156.        }
  157.      }

  158.     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO|RCC_APB2Periph_USART1, ENABLE);
  159. }

  160. void IO_Init(void)
  161. {

  162.           RCC->APB2ENR|=1<<0;//开启辅助时钟
  163.         RCC->APB2ENR|=1<<2;//先使能外设PORTA时钟
  164.         RCC->APB2ENR|=1<<3;//先使能外设PORTB时钟
  165.          RCC->APB2ENR|=1<<4;//先使能外设PORTC时钟

  166.            GPIOA->CRH=0X33333333; //PORTA上拉输出
  167.         GPIOA->CRL=0X33333333;
  168.         GPIOA->ODR=0XFFFF;         

  169.         GPIOB->CRL=0X88888888; //PB0-7  上拉输入
  170.         GPIOB->CRH=0X33333333; //PB8-15  上拉输出
  171.         GPIOA->ODR=0XFFFF;

  172.            GPIOC->CRH=0X33333333; //PORTC上拉输出
  173.         GPIOC->CRL=0X33333333;         
  174.         GPIOC->ODR=0XFFFF;        
  175.                     
  176.            JTAG_Set(JTAG_SWD_DISABLE);         //JTAG功能禁止,复用JTAG端口
  177. }

  178. //保持原有配置
  179. void GPIO_Configuration(void)
  180. {
  181.     /* 定义 GPIO 初始化结构体 GPIO_InitStructure */
  182.     GPIO_InitTypeDef GPIO_InitStructure;
  183.    
  184.     /* 设置USART1的Tx脚(PA.9)为第二功能推挽输出模式 */


  185. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

下载(此代码年代久远,采用的老版本的库和老版本看Keil编写的):
Keil代码.7z (272.38 KB, 下载次数: 60)

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:194871 发表于 2017-8-5 12:07 | 只看该作者
谢谢楼主
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表