日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

OV7670 STM32驱动 YUYV格式调试总结

發布時間:2023/12/29 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 OV7670 STM32驱动 YUYV格式调试总结 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言

單片機只有能夠看見世界,才能真正的走向智能化,所以,用單片機驅動攝像頭很有必要。而在攝像頭當中,OV7670是比較經典的一款。

硬件準備

1 .STM32開發板;
2. OV7670模塊;

OV7670基礎知識

驅動源程序直接用某點原子的挺好,這里就不貼出來了。
1、存儲(OV7670往FIFO中寫數據)
戰艦OV7670模塊存儲圖像數據的過程為:main_等待OV767同步信號->main_幀同步信號觸發中斷->exti_FIFO寫指針復位->exti_FIFO寫使能->main_等待第二個同步信號(如果第一幀還沒處理完第二幀中斷到來則FIFO寫禁止)

OV7670_WREN=1; //允許寫入FIFOOV7670_WRST=0; //復位寫指針 OV7670_WRST=1;

之后攝像頭傳感器會自動快速存儲像素到FIFO

2、讀取(MCU從FIFO中讀取數據)
讀取過程:FIFO讀指針復位->給FIFO讀時鐘(FIFO RCLK)->讀取第一個像素高字節->給FIFO讀時鐘(FIFO RCLK)->讀取第一個像素低字節->給FIFO讀時鐘(FIFO RCLK)->讀取第二個像素高字節->循環讀取剩余像素->將所有像素值依次顯示在LCD上或存儲在數組里面
關于數據量,比如QVGA模式,RGB565格式,我們總共循環讀取3202402次,讀取一幀數據

OV7670_RRST=0; //開始復位讀指針 OV7670_RCK_L;OV7670_RCK_H;OV7670_RCK_L;OV7670_RRST=1; //復位讀指針結束 OV7670_RCK_H;

然后FIFO就會按照從上到下,從左到右的順序依次輸出像素

調試記錄

1.配置灰度輸出遇到的問題以及解決辦法
在寄存器配置上,在正點原子代碼基礎上,更改寄存器配置

{0x12,0x10},{0x3a, 0x14},{0x3d, 0x80}, {0x67, 0x11}, {0x68, 0xFF}, {0x40, 0xC0},

直接添加在OV7670.config文件末尾就行,就會得到YUYV格式的輸出,每個像素會傳來兩個字節,只要高字節,第2,4,6等字節直接扔掉不要,然后為了在LCD上得到顯示結果,需要將256灰度轉化為RGB565而在LCD上顯示,綜合代碼如下

OV7670_RCK_L;color=GPIOC->IDR&0XFF; //讀數據OV7670_RCK_H; color<<=8; OV7670_RCK_L;//color|=GPIOC->IDR&0XFF; //讀數據OV7670_RCK_H; color_r = color&0xf800;color_b = color>>11;color_g =(color>>5)&0x07e0; LCD->LCD_RAM= color_r + color_g + color_b;

接下來會發現還有問題,那就是屏幕碎片化,閃動嚴重,原因有二:
第一是因為在正點原子代碼上有"FIFO"還沒有寫入完畢而提前被LCD讀取完了,LCD后半截時有時無,就造成了比較大但范圍又相似的抖動,正點原子代碼如下:

OV7670_WREN=1; //允許寫入FIFOOV7670_WRST=0; //復位寫指針 OV7670_WRST=1; ov_sta++;

應該更正為:

if(ov_sta==0){ OV7670_WREN=1; //允許寫入FIFOOV7670_WRST=0; //復位寫指針 OV7670_WRST=1; ov_sta++; }else {OV7670_WREN=0; //禁止寫入FIFO OV7670_WRST=0; //復位寫指針 OV7670_WRST=1; }

第二會發現屏幕有很多毛刺尖銳閃動,是因為屏幕刷新率太高,這是源代碼:

while(1)OV7670_camera_refresh();

但是應該人為的減慢這個速度或者固定下來,比如改為10幀的刷新率,改進后的代碼為:

while(1){ delay_ms(100);OV7670_camera_refresh(); //更新顯示}

LCD上的顯示完美輸出

總結

這種點對點的攝像頭,并不適合入門,資金充裕的話建議入手openmv,又快又方便。

總結

以上是生活随笔為你收集整理的OV7670 STM32驱动 YUYV格式调试总结的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。