找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 14861|回復(fù): 11
打印 上一主題 下一主題
收起左側(cè)

STM32驅(qū)動(dòng)OV7725攝像頭拍照液晶顯示程序源碼

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
改寫了一個(gè)攝像頭拍照,并保存SD卡
本程序運(yùn)行需要SD卡支持,具體操作參考“Doc/readme.txt”文件的說(shuō)明

/*********************************************************************************************/
本文檔使用 TAB = 4 對(duì)齊,使用keil5默認(rèn)配置打開閱讀比較方便。

【*】程序簡(jiǎn)介

-工程名稱:OV7725攝像頭-液晶顯示
-實(shí)驗(yàn)平臺(tái): 秉火STM32 指南者 開發(fā)板
-MDK版本:5.16
-ST固件庫(kù)版本:3.5


【 !】功能簡(jiǎn)介:
驅(qū)動(dòng)攝像頭,把采集得的圖像直接顯示在液晶屏上,支持拍照。

【 !】實(shí)驗(yàn)操作:
連接攝像頭、3.2寸液晶屏、接入已格式化的SD卡,下載程序后復(fù)位開發(fā)板即可,屏幕會(huì)顯示采集得的圖像,
可通過(guò)旋轉(zhuǎn)鏡頭調(diào)焦。
按Key1可以把當(dāng)前屏幕顯示的圖像保存成BMP圖片到SD卡
按Key2可以使用黑白模式。

bsp_ov7725.c文件中cam_mode提供了幾組不同的配置,
可以根據(jù)其中的注釋說(shuō)明使用不同的配置測(cè)試下

修改cam_mode的值可實(shí)現(xiàn)不同的配置



/***************************************************************************************************************/

【*】 引腳分配

攝像頭:
攝像頭與STM32的普通GPIO相連,使用模擬I2C:
        
        
        OV7725_OE         <--->    PA3     //FIFO輸出使能
        OV7725_RRST     <--->    PA2        //讀指針復(fù)位引腳,低電平復(fù)位
        OV7725_RCLK     <--->    PC5        //FIFO讀時(shí)鐘
        OV7725_XCLK     <--->    不需要連接,OV7725時(shí)鐘輸入引腳,攝像頭內(nèi)已自帶晶振
        OV7725_VSYNC     <--->    PC3        //OV7725幀同步信號(hào)
        OV7725_WRST     <--->    PC4        //寫指針復(fù)位引腳,低電平復(fù)位
        OV7725_WEN         <--->    PD3        //FIFO寫使能
        OV7725_HREF     <--->    不需要連接,本程序控制不需要這個(gè)信號(hào)        
        OV7725_D[0:7]     <--->    PB[8:15]    //FIFO數(shù)據(jù)信號(hào)線        
        OV7725_SIO_C     <--->    PC6        //I2C 時(shí)鐘信號(hào),模擬
        OV7725_SIO_D     <--->    PC7        //I2C 數(shù)據(jù)信號(hào),模擬

                                       
液晶屏:
液晶屏接口與STM32的FSMC接口相連,支565格式,
使用FSMC產(chǎn)生8080時(shí)序與液晶屏驅(qū)動(dòng)芯片ILI9341通訊.


        /*液晶控制信號(hào)線*/
        ILI9341_CS     <--->    PD7          //片選,選擇NOR/SRAM塊 BANK1_NOR/SRAM1
        ILI9341_DC  <--->     PD11        //PD11為FSMC_A16,本引腳決定了訪問(wèn)LCD時(shí)使用的地址
        ILI9341_WR     <--->     PD5            //寫使能
        ILI9341_RD  <--->     PD4            //讀使能
        ILI9341_RST    <--->     PE1            //復(fù)位引腳
        ILI9341_BK     <--->     PD12         //背光引腳
        
    數(shù)據(jù)信號(hào)線省略,本實(shí)驗(yàn)沒有驅(qū)動(dòng)觸摸屏。

串口(TTL-USB TO USART):
CH340的收發(fā)引腳與STM32的發(fā)收引腳相連。
    RX<--->PA9
    TX<--->PA10
                                                
/*********************************************************************************************/

單片機(jī)源程序如下:
  1. /**
  2.   ******************************************************************************
  3.   * @file    main.c
  4.   * @author  fire
  5.   * @version V1.0
  6.   * @date    2013-xx-xx
  7.   * @brief   攝像頭火眼ov7725測(cè)試?yán)?br />
  8.   ******************************************************************************
  9.   * @attention
  10.   *
  11.   * 實(shí)驗(yàn)平臺(tái):秉火 F103-指南者 STM32 開發(fā)板
  12.   *
  13.   ******************************************************************************
  14.   */
  15.   
  16. #include "stm32f10x.h"
  17. #include "./ov7725/bsp_ov7725.h"
  18. #include "./lcd/bsp_ili9341_lcd.h"
  19. #include "./led/bsp_led.h"   
  20. #include "./usart/bsp_usart.h"
  21. #include "./key/bsp_key.h"  
  22. #include "./systick/bsp_SysTick.h"
  23. #include "./bmp/bsp_bmp.h"
  24. #include "ff.h"


  25. extern uint8_t Ov7725_vsync;

  26. unsigned int Task_Delay[NumOfTask];

  27. extern OV7725_MODE_PARAM cam_mode;

  28. FATFS fs;                                                                                                        /* FatFs文件系統(tǒng)對(duì)象 */
  29. FRESULT res_sd;                /* 文件操作結(jié)果 */


  30. /**
  31.   * @brief  主函數(shù)
  32.   * @param  無(wú)  
  33.   * @retval 無(wú)
  34.   */
  35. int main(void)        
  36. {               
  37.        
  38.         float frame_count = 0;
  39.         uint8_t retry = 0;

  40.         /* 液晶初始化 */
  41.         ILI9341_Init();
  42.         ILI9341_GramScan ( 3 );
  43.        
  44.         LCD_SetFont(&Font8x16);
  45.         LCD_SetColors(RED,BLACK);

  46.   ILI9341_Clear(0,0,LCD_X_LENGTH,LCD_Y_LENGTH);        /* 清屏,顯示全黑 */
  47.        
  48.         /********顯示字符串示例*******/
  49.   ILI9341_DispStringLine_EN(LINE(0),"BH OV7725 Test Demo");

  50.         USART_Config();
  51.         LED_GPIO_Config();
  52.         Key_GPIO_Config();
  53.         SysTick_Init();
  54.        
  55.         /*掛載sd文件系統(tǒng)*/
  56.         res_sd = f_mount(&fs,"0:",1);
  57.         if(res_sd != FR_OK)
  58.         {
  59.                 printf("\r\n請(qǐng)給開發(fā)板插入已格式化成fat格式的SD卡。\r\n");
  60.         }
  61.        
  62.         printf("\r\n ** OV7725攝像頭實(shí)時(shí)液晶顯示例程** \r\n");
  63.        
  64.         /* ov7725 gpio 初始化 */
  65.         OV7725_GPIO_Config();
  66.        
  67.         LED_BLUE;
  68.         /* ov7725 寄存器默認(rèn)配置初始化 */
  69.         while(OV7725_Init() != SUCCESS)
  70.         {
  71.                 retry++;
  72.                 if(retry>5)
  73.                 {
  74.                         printf("\r\n沒有檢測(cè)到OV7725攝像頭\r\n");
  75.                         ILI9341_DispStringLine_EN(LINE(2),"No OV7725 module detected!");
  76.                         while(1);
  77.                 }
  78.         }


  79.         /*根據(jù)攝像頭參數(shù)組配置模式*/
  80.         OV7725_Special_Effect(cam_mode.effect);
  81.         /*光照模式*/
  82.         OV7725_Light_Mode(cam_mode.light_mode);
  83.         /*飽和度*/
  84.         OV7725_Color_Saturation(cam_mode.saturation);
  85.         /*光照度*/
  86.         OV7725_Brightness(cam_mode.brightness);
  87.         /*對(duì)比度*/
  88.         OV7725_Contrast(cam_mode.contrast);
  89.         /*特殊效果*/
  90.         OV7725_Special_Effect(cam_mode.effect);
  91.        
  92.         /*設(shè)置圖像采樣及模式大小*/
  93.         OV7725_Window_Set(cam_mode.cam_sx,
  94.                                                                                                                 cam_mode.cam_sy,
  95.                                                                                                                 cam_mode.cam_width,
  96.                                                                                                                 cam_mode.cam_height,
  97.                                                                                                                 cam_mode.QVGA_VGA);

  98.         /* 設(shè)置液晶掃描模式 */
  99.         ILI9341_GramScan( cam_mode.lcd_scan );
  100.        
  101.        
  102.        
  103.         ILI9341_DispStringLine_EN(LINE(2),"OV7725 initialize success!");
  104.         printf("\r\nOV7725攝像頭初始化完成\r\n");
  105.        
  106.         Ov7725_vsync = 0;
  107.        
  108.         while(1)
  109.         {
  110.                 /*接收到新圖像進(jìn)行顯示*/
  111.                 if( Ov7725_vsync == 2 )
  112.                 {
  113.                         frame_count++;
  114.                         FIFO_PREPARE;                          /*FIFO準(zhǔn)備*/                                       
  115.                         ImagDisp(cam_mode.lcd_sx,
  116.                                                                 cam_mode.lcd_sy,
  117.                                                                 cam_mode.cam_width,
  118.                                                                 cam_mode.cam_height);                        /*采集并顯示*/
  119.                        
  120.                         Ov7725_vsync = 0;                       
  121. //                        LED1_TOGGLE;

  122.                 }
  123.                
  124.                 /*檢測(cè)按鍵*/
  125.                 if( Key_Scan(KEY1_GPIO_PORT,KEY1_GPIO_PIN) == KEY_ON  )
  126.                 {               
  127.                         static uint8_t name_count = 0;
  128.                         char name[40];
  129.                        
  130.                         //用來(lái)設(shè)置截圖名字,防止重復(fù),實(shí)際應(yīng)用中可以使用系統(tǒng)時(shí)間來(lái)命名。
  131.                         name_count++;
  132.                         sprintf(name,"0:photo_%d.bmp",name_count);

  133.                         LED_BLUE;
  134.                         printf("\r\n正在截圖...");
  135.                        
  136.                         /*截圖必需設(shè)置好液晶顯示方向和截圖窗口*/
  137.                         ILI9341_GramScan ( cam_mode.lcd_scan );                       
  138.                        
  139.                         if(Screen_Shot(0,0,LCD_X_LENGTH,LCD_Y_LENGTH,name) == 0)
  140.                         {
  141.                                 printf("\r\n截圖成功!");
  142.                                 LED_GREEN;
  143.                         }
  144.                         else
  145.                         {
  146.                                 printf("\r\n截圖失!");
  147.                                 LED_RED;
  148.                         }
  149.                 }
  150.                 /*檢測(cè)按鍵*/
  151.                 if( Key_Scan(KEY2_GPIO_PORT,KEY2_GPIO_PIN) == KEY_ON  )
  152.                 {
  153.                         /*LED反轉(zhuǎn)*/
  154. //                        LED3_TOGGLE;                       
  155.                        
  156.                                 /*動(dòng)態(tài)配置攝像頭的模式,
  157.                             有需要可以添加使用串口、用戶界面下拉選擇框等方式修改這些變量,
  158.                             達(dá)到程序運(yùn)行時(shí)更改攝像頭模式的目的*/
  159.                        
  160.                                 cam_mode.QVGA_VGA = 0,        //QVGA模式
  161.                                 cam_mode.cam_sx = 0,
  162.                                 cam_mode.cam_sy = 0,       

  163.                                 cam_mode.cam_width = 320,
  164.                                 cam_mode.cam_height = 240,

  165.                                 cam_mode.lcd_sx = 0,
  166.                                 cam_mode.lcd_sy = 0,
  167.                                 cam_mode.lcd_scan = 3, //LCD掃描模式,本橫屏配置可用1、3、5、7模式

  168.                                 //以下可根據(jù)自己的需要調(diào)整,參數(shù)范圍見結(jié)構(gòu)體類型定義       
  169.                                 cam_mode.light_mode = 0,//自動(dòng)光照模式
  170.                                 cam_mode.saturation = 0,       
  171.                                 cam_mode.brightness = 0,
  172.                                 cam_mode.contrast = 0,
  173.                                 cam_mode.effect = 1,                //黑白模式
  174.                        
  175.                         /*根據(jù)攝像頭參數(shù)寫入配置*/
  176.                         OV7725_Special_Effect(cam_mode.effect);
  177.                         /*光照模式*/
  178.                         OV7725_Light_Mode(cam_mode.light_mode);
  179.                         /*飽和度*/
  180.                         OV7725_Color_Saturation(cam_mode.saturation);
  181.                         /*光照度*/
  182.                         OV7725_Brightness(cam_mode.brightness);
  183.                         /*對(duì)比度*/
  184.                         OV7725_Contrast(cam_mode.contrast);
  185.                         /*特殊效果*/
  186.                         OV7725_Special_Effect(cam_mode.effect);
  187.                        
  188.                         /*設(shè)置圖像采樣及模式大小*/
  189.                         OV7725_Window_Set(cam_mode.cam_sx,
  190. ……………………

  191. …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼

所有資料51hei提供下載:
2.攝像頭拍照.zip (1.07 MB, 下載次數(shù): 270)



分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏9 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:1 發(fā)表于 2017-5-15 22:48 | 只看該作者
好資料,51黑有你更精彩!!!
回復(fù)

使用道具 舉報(bào)

板凳
ID:243738 發(fā)表于 2017-11-5 12:49 | 只看該作者
為了下載這個(gè)資料我發(fā)了兩個(gè)貼,但是不知道為什么下載不起,我的電腦彈不出那個(gè)窗口~嚶嚶嚶~
回復(fù)

使用道具 舉報(bào)

地板
ID:481541 發(fā)表于 2019-2-27 14:47 | 只看該作者
請(qǐng)問(wèn)這個(gè)精英版可以用嗎
回復(fù)

使用道具 舉報(bào)

5#
ID:481541 發(fā)表于 2019-2-27 15:17 | 只看該作者
如果是TF屏幕可以用嗎,在線等
回復(fù)

使用道具 舉報(bào)

6#
ID:481306 發(fā)表于 2019-3-1 06:17 來(lái)自手機(jī) | 只看該作者
非常不錯(cuò),感謝分享。
回復(fù)

使用道具 舉報(bào)

7#
ID:518541 發(fā)表于 2019-5-8 14:43 | 只看該作者
沒有黑幣了,能不發(fā)我郵箱,1787713921@qq.com ,感謝!
回復(fù)

使用道具 舉報(bào)

8#
ID:319423 發(fā)表于 2019-8-7 15:31 | 只看該作者
什么型號(hào)的開發(fā)板啊
回復(fù)

使用道具 舉報(bào)

9#
ID:620272 發(fā)表于 2019-11-15 09:00 | 只看該作者
能不能用山外的串口顯示出圖像啊
回復(fù)

使用道具 舉報(bào)

10#
ID:907687 發(fā)表于 2021-4-18 09:51 | 只看該作者
18846081939 發(fā)表于 2019-8-7 15:31
什么型號(hào)的開發(fā)板啊

好像是F1系列的開發(fā)板
回復(fù)

使用道具 舉報(bào)

11#
ID:956087 發(fā)表于 2022-3-8 10:31 | 只看該作者
18846081939 發(fā)表于 2019-8-7 15:31
什么型號(hào)的開發(fā)板啊

只要驅(qū)動(dòng)是F1都能用
回復(fù)

使用道具 舉報(bào)

12#
ID:956087 發(fā)表于 2022-3-10 11:42 | 只看該作者
‘?dāng)z像頭帶FIFO嗎
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表