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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

stm32驱动ov7670 数据转BMP格式再转JPEG存储

發布時間:2023/12/29 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 stm32驱动ov7670 数据转BMP格式再转JPEG存储 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一.搞了幾天攝像頭終于搞出來了一點成果,本打算用BMP格式保存讀出的數據但是數據太大達到225k,后來又將BMP數據轉成JPEG格式就小了很多,jpeg是有損壓縮圖片會變得不那么清晰。

搞出來的成果:

?

二.攝像頭小知識:XCLK是輸入攝像頭的時鐘,看別的原理圖接的是一個12M的晶振,初始化的時候4倍頻達到48M,這里沒有接,用PA8輸出8M內部6倍頻達到48M,PCLK是攝像頭輸出的時鐘達到12M,圖像輸出的是QVGA,RGB565格式,用的是VGA時序,一個像素需要2個pclk.

行輸出時序圖:

HREF是一個行信號,這個信號和mcu的一個引腳連接在SN74LVC1G00D(與非門)上,和mcu一塊控制fifo,當準備寫fifo時,mcu發送高電平,這時fifo并沒有被使能,只有當HREF產生高電平信號時,在PCLK的配合下將數據寫到fifo中。

幀輸出時序圖:

VSYNC是幀同步信號,當攝像頭采集到一幀數據,會發出幀同步信號,用外部中斷捕獲這個幀中斷信號。

void EXTI4_IRQHandler(void)
{?? ??? ??
?? ?if(EXTI_GetITStatus(EXTI_Line4)==SET)?? ?//是4線的中斷
?? ?{ ? if(OV7670_CS == 0)?
?? ??? ?{? ? ? ?
?? ??? ??? ??? ?if(ov_sta == 0)
?? ??? ??? ??? ?{?? ??? ??? ?
?? ??? ??? ??? ??? ?OV7670_WRST=0;?? ?//復位寫指針?? ??? ? ??? ??? ??
?? ??? ??? ??? ??? ?OV7670_WRST=1;?? ?
?? ??? ??? ??? ??? ?OV7670_WREN=1;?? ?//允許寫入FIFO ?? ??
?? ??? ??? ??? ??? ?ov_sta=1;
?? ??? ??? ??? ?}
?? ??? ??? ??? ?else
?? ??? ??? ??? ?{
?? ??? ??? ??? ??? ?OV7670_WRST=0;?? ?//復位寫指針?? ??? ? ??? ??? ??
?? ??? ??? ??? ??? ?OV7670_WRST=0;?? ?
?? ??? ??? ??? ??? ?OV7670_WREN=1;?? ?//允許寫入FIFO?
?? ??? ??? ??? ?}
?? ??? ??? ?}
?? ?}
?? ?EXTI_ClearITPendingBit(EXTI_Line4); ?//清除EXTI4線路掛起位?? ??? ??? ??? ??? ??? ? ?
}

三.讀取數據并轉換,也是仿照的別人的用的開源庫。

void camera_refresh(void)
{? ?
?? ?int width, height;
?? ?int j,i;
??? ?u16 color=0;
?? ?int col;
?? ?int t;
? ?jpeg_compress_info *cinfo;
?? ?pt_buf = 0;
?? ?if(ov_sta)//有幀中斷更新?
?? ?{
?? ??? ? ?width = 320;//圖像的寬度?
?? ??? ? ?height = 240;//圖像的高度?
?? ??? ? ?cinfo = jpeg_create_compress();
?? ??? ? ?if (!cinfo)?
?? ??? ? ?{
?? ??? ??? ?//printf("error in create cinfo, malloc faild!\n");
?? ??? ? ?}
?? ??? ? ?cinfo->image_width = width;
?? ??? ? ?cinfo->image_height= height;
?? ??? ? ?cinfo->output =(char *)JPG_enc_buf;//fopen("test.jpg", "wb");
?? ??? ? ?jpeg_set_default(cinfo); ?
?? ??? ? ?
?? ??? ? ?jpeg_start_compress(cinfo);
??
?? ??? ?FLASH_SIZE1 = 8192;
?? ??? ?OV7670_RRST=0;?? ??? ??? ??? ?//開始復位讀指針 ?? ??? ?
?? ??? ?OV7670_RCK_L;
?? ??? ?OV7670_RCK_H;
?? ??? ?OV7670_RCK_L;
?? ??? ?OV7670_RRST=1;?? ??? ??? ??? ?//復位讀指針結束?
?? ??? ?OV7670_RCK_H;?? ??? ??? ??? ?
?? ??? ?for(j=0;j<240;j++)
?? ??? ?{?? ?//printf("第%u行",j);
?? ??? ??? ?for(i=319;i>=0;i--)
?? ??? ??? ?{

?     //高字節  數據位接的比較亂 根據實際情況修改
?? ??? ??? ??? ?OV7670_RCK_L;
?? ??? ??? ??? ?color = ((GPIOD->IDR&0xC000)>>14); ? //D14 D15
?? ??? ??? ??? ?color |= ((GPIOD->IDR&0x0003)<<2); ?//D0 D1
?? ??? ??? ??? ?color |= ((GPIOE->IDR&0x0780)>>3); ?//E7 8 9 10
?? ??? ??? ??? ?OV7670_RCK_H; ?? ??? ??? ??? ?
?? ??? ??? ??? ?color<<=8; ?
?? ??? ??? ??? ?OV7670_RCK_L;
?? ??? ??? ??? ?//低字節
?? ??? ??? ??? ?color |= ((GPIOD->IDR&0xC000)>>14); ? //D14 D15
?? ??? ??? ??? ?color |= ((GPIOD->IDR&0x0003)<<2); ?//D0 D1
?? ??? ??? ??? ?color |= ((GPIOE->IDR&0x0780)>>3); ?//E7 8 9 10?? ??? ??? ??? ?
?? ??? ??? ??? ?OV7670_RCK_H; ?? ??? ??? ??? ??? ??? ??? ??? ?
?? ??? ??? ??? ?R = (color>>8)&0xF8;
?? ??? ??? ??? ?G = (color>>3)&0xFC;
?? ??? ??? ??? ?B = (color<<3)&0xF8;
?? ??? ??? ??? ?
?? ??? ??? ??? ?buffer[i*3+0] = R;//jpeg格式順序RGB 如果是bmp格式寫成BGR
?? ??? ??? ??? ?buffer[i*3+1] = G;
?? ??? ??? ??? ?buffer[i*3+2] = B;
?? ??? ??? ?}?? ??? ??? ?
?? ??? ??? ?jpeg_write_scanline(cinfo, buffer);//一行一行的壓縮
?? ??? ?}?
?? ??? ?jpeg_finish_compress(cinfo); ?
?? ??? ?jpeg_destory_compress(cinfo);
?? ??? ?//OV7670_CS=1;
??? ??? ?ov_sta=0;?? ??? ?//清零幀中斷標記
?? ??? ?//需要多少擦多少
? ? ? ? for(i = 0;i<=(pt_buf/4096);i++)
? ? ? ? {
? ? ? ? ? ? W25QXX_Erase_Sector( 8192/4096+i );
? ? ? ? }?? ???
?? ??? ?for(t = 0;t<pt_buf;t++)
?? ??? ?{
?? ??? ? send_data(JPG_enc_buf[t]);//發送數據給上位機? ? ? ? ??
?? ??? ?}? ? ??
? ? ? ? W25QXX_Write_NoCheck((u8*)JPG_enc_buf,FLASH_SIZE1,pt_buf);//寫到flash

?? ?}?
}
??

突然發現沒加源碼地址,補上:https://download.csdn.net/download/forwardjia/10633160

總結

以上是生活随笔為你收集整理的stm32驱动ov7670 数据转BMP格式再转JPEG存储的全部內容,希望文章能夠幫你解決所遇到的問題。

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