本帖最后由 新洲羅遠 于 2020-7-4 20:32 編輯
上次的F103驅動OV7670究竟沒有實用價值,我又買了一塊STM32F407開發小板,
驅動了無FIFO無時鐘ov7670,320*240每秒28幀(應該還可以快點)。
感覺到這個方案比用有FIFO的劃算,STM32F407開發小板+ov7670=60元左右。
一、407帶攝像頭接口,取攝像頭數據由片內硬件操作,超爽。
二、我用示波器看PA8輸出時鐘,幅度很小,這不是程序問題,是示波器頻率不夠,
調試時候不要懷疑這個信號。我在這里白白糾結了幾天。
三、攝像頭相關的口線比較多,一根口線多處設置,還有硬件連接的問題,容易出錯。
調式時候可以一步一步來,先調SCCB,把攝像頭初始化搞OK,再調直接讀取圖像數據,
這樣,端口和線路連接都沒有問題了,就可以進入第三步,上DCMI和DMA。
//ov7670_GPIO2_Init(); //老的端口輸入設置
//camera_refresh(); //老的取數操作
這兩句就是直接取數據,不用DCMI和DMA。
int main(void)
{
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//設置系統中斷優先級分組2
delay_init(168); //初始化延時函數
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計數,1秒鐘中斷一次 //打印幀率
// TIM1_PWM_Init();
// usmart_dev.init(84); //初始化USMART
POINT_COLOR=RED;//設置字體為紅色
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設置輸出窗口
//OV7670_Color_Saturation(4);//顏色飽和度
//ov7670_GPIO2_Init(); //老的端口輸入設置
//camera_refresh(); //老的取數操作
My_DCMI_Init(); //DCMI配置
DCMI_DMA_Init((u32)&LCD->LCD_RAM, 10, DMA_MemoryDataSize_HalfWord, DMA_MemoryInc_Disable);//DCMI DMA配置
DCMI_Start(); //啟動傳輸
while(1)
{
}
}
例程來源于正點原子,特此感謝!
|