stm32驅動 ov7670發送到串口上位機顯示圖像

所需硬件:

       1.stm32 103ZET6核心板,沒有lcd(調試攝像頭一定要買一個lcd,太方便了,都是淚);

       2.OV7670帶FIFO淘寶一搜一大把最常見的那種;

驅動代碼:參考正點原子官方例程 實驗35攝像頭實驗;也可以使用淘寶賣家提供的例程,ov7670寄存器配置有點麻煩,也懶得研究,剛開始調試的時候不出圖像,換了幾個版本的寄存器配置最後還是換回去用了正點原子的,畢竟大廠還是有保障的;沒有lcd的話會調試到你懷疑人生,不知道是上位機寫的不好用還是驅動沒寫好,所以最好還是買一塊lcd進行調試;

初始化攝像頭的時候如果錯誤,紅燈會亮起一直初始化完成,也可以接串口看返回的錯誤代碼;當發送圖片給的時候綠燈會亮起,表示正在發送,發送完成綠燈滅;

我是直接把要發送到屏幕的數據直接發送到上位機,上位機有協議的要加上協議,數據頭和尾巴;還有要區分32庫函數printf和USART_SendData()的區別,區分發送的數據是字符還是十六進制原始數據,數據長度要計算清楚;我才採集的是320*240 RGB565的圖像,得到的是16位數據,串口一次只能發送8位,所以分成兩個字節發送,也就是發送的圖像數據量是320*240*2,一定要區分發送字節的高位低位,很重要很重要很重要,上位機RGB565轉RGB888要用得到,直接決定顯示的成敗;

但是用printf發送,如果用我這種方式發送,發送的是字符,prinft("%04X", color);如果color=0xFEA5,串口收到的是'F' 'E' 'A' '5',在上位機上還有一步轉化操作,所以發送的數據量就是320*240*2*2(至於我爲什麼這麼寫,完全是爲了兼容我的上位機,上位機是參考的別人代碼,懶得大改了,c#不是很熟練,就在MCU上動手腳了),這個地方也會有一個問題,printf()發送速度會比USART_SendData()速度慢,可能會導致上位機顯示的圖像有線條。線條問題最後是通過提高波特率解決的,用的200000;

void camera_refresh1(void)//更新LCD顯示
{
	u32 w,h;
 	u16 color;
	if(ov_sta)//有幀中斷更新?
	{		
		OV7670_RRST=0;				//開始復位讀指針 
		OV7670_RCK_L;
		OV7670_RCK_H;
		OV7670_RCK_L;
		OV7670_RRST=1;				//復位讀指針結束 
		OV7670_RCK_H;	
		printf("data:\n");	
		for(w=0;w<240;w++)//數據開始(從上往下,從左往右)
		//width:輸出圖像寬度,<=240
		//height:輸出圖像高度,<=320
		{
			printf("L");//列有效
			for(h=0;h < 320;h++)//一列
			{
				OV7670_RCK_L;
				color=GPIOF->IDR&0XFF;	//讀數據
				OV7670_RCK_H; 
				color<<=8; 
				OV7670_RCK_L;
				color|=GPIOF->IDR&0XFF;	//讀數據
				OV7670_RCK_H;
				printf("%04X", color);// printf發送的是字符串
				//delay_us(50);
			}
			printf("\n");
		}
 		ov_sta=0;					//清零幀中斷標記
		ov_frame++; 
	} 
}

上位機開發語言:C#,參考連接https://blog.csdn.net/zyxhangiian123456789/article/details/79163959,加了圖像採集和測試按鈕,改進了保存圖片的方式;

測試按鈕是測試上位機和單片機死否通信正常,點擊此按鈕會給單片機發送一組指令,讓單片機綠燈閃爍兩次,代表通信正常;

採集按鈕是發送指令讓單片機拍照上傳,點擊後綠燈亮起,代表正在發送數據,綠燈滅後代表數據發送完畢,如果上位機沒有顯示圖像則代表發送失敗;

保存按鈕改進了原作者只能覆蓋保存的功能,點擊保存會連續保存不會覆蓋上一張保存的照片;

數據發送高位地位和原作者有區別;

 

有些修改的地方:

 

 

上位機github地址:https://github.com/WW-0/OV7670-PC/upload/master

32+上位機代碼下載:https://download.csdn.net/download/qq_34824576/12407112

上位機參考連接:https://blog.csdn.net/zyxhangiian123456789/article/details/79163959 

                             https://github.com/jack13163/OV7670

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章