|
本帖最后由 新洲羅遠(yuǎn) 于 2020-7-4 20:32 編輯
上次的F103驅(qū)動(dòng)OV7670究竟沒(méi)有實(shí)用價(jià)值,我又買了一塊STM32F407開(kāi)發(fā)小板,
驅(qū)動(dòng)了無(wú)FIFO無(wú)時(shí)鐘ov7670,320*240每秒28幀(應(yīng)該還可以快點(diǎn))。
感覺(jué)到這個(gè)方案比用有FIFO的劃算,STM32F407開(kāi)發(fā)小板+ov7670=60元左右。
一、407帶攝像頭接口,取攝像頭數(shù)據(jù)由片內(nèi)硬件操作,超爽。
二、我用示波器看PA8輸出時(shí)鐘,幅度很小,這不是程序問(wèn)題,是示波器頻率不夠,
調(diào)試時(shí)候不要懷疑這個(gè)信號(hào)。我在這里白白糾結(jié)了幾天。
三、攝像頭相關(guān)的口線比較多,一根口線多處設(shè)置,還有硬件連接的問(wèn)題,容易出錯(cuò)。
調(diào)式時(shí)候可以一步一步來(lái),先調(diào)SCCB,把攝像頭初始化搞OK,再調(diào)直接讀取圖像數(shù)據(jù),
這樣,端口和線路連接都沒(méi)有問(wèn)題了,就可以進(jìn)入第三步,上DCMI和DMA。
//ov7670_GPIO2_Init(); //老的端口輸入設(shè)置
//camera_refresh(); //老的取數(shù)操作
這兩句就是直接取數(shù)據(jù),不用DCMI和DMA。
int main(void)
{
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//設(shè)置系統(tǒng)中斷優(yōu)先級(jí)分組2
delay_init(168); //初始化延時(shí)函數(shù)
uart_init(115200); //初始化串口波特率為115200
// usart2_init(42,115200); //初始化串口2波特率為115200
LED_Init(); //初始化LED
LCD_Init(); //LCD初始化
// KEY_Init(); //按鍵初始化
TIM3_Int_Init(10000-1,8400-1);//10Khz計(jì)數(shù),1秒鐘中斷一次 //打印幀率
// TIM1_PWM_Init();
// usmart_dev.init(84); //初始化USMART
POINT_COLOR=RED;//設(shè)置字體為紅色
LCD_ShowString(30,130,240,16,16,"OV7670 Init?");
while(OV7670_Init())//初始化OV7670
{
LCD_ShowString(30,130,240,16,16,"OV7670 ERR");
delay_ms(200);
LCD_Fill(30,130,239,170,WHITE);
delay_ms(200);
}
LCD_ShowString(30,130,200,16,16,"OV7670 OK ");
delay_ms(1500);
OV7670_Window_Set(12,176,240,320);//OV7670設(shè)置輸出窗口
//OV7670_Color_Saturation(4);//顏色飽和度
//ov7670_GPIO2_Init(); //老的端口輸入設(shè)置
//camera_refresh(); //老的取數(shù)操作
My_DCMI_Init(); //DCMI配置
DCMI_DMA_Init((u32)&LCD->LCD_RAM, 10, DMA_MemoryDataSize_HalfWord, DMA_MemoryInc_Disable);//DCMI DMA配置
DCMI_Start(); //啟動(dòng)傳輸
while(1)
{
}
}
例程來(lái)源于正點(diǎn)原子,特此感謝!
|
|