一、准备工作

有关CUBEMX的初始化配置,参见我的另一篇blog:【STM32+HAL】CUBEMX初始化配置

二、所用工具


1、芯片: STM32F407ZGT6

2、IDE: MDK-Keil软件

3、库文件:STM32F4xxHAL库

三、实现功能

通过OV2640捕获图像并实时显示在LCD屏上

四、HAL库配置

1、LCD屏幕显示配置

详见【STM32+HAL】LCD显示及触摸初始化配置

只需配置为显示模式即可

2、DCMI配置

引脚配置为超高速模式。

时钟信号时上升沿,行同步和场同步选择低电平,选择全帧捕获,由于此次没有用到JPEG模式所以这里是禁用状态。

 DMA配置 选择Circular,FIFO选择Full,外设数据宽度选择word,突发大小选择single,内存地址自增使能,数据宽度选择HalfWord,突发大小选择single。

3、GPIO配置

OV2640的其他引脚全部配置为上拉,高速模式,并进行命名。

引脚可自选。

 

4、DMA配置

至此,CUBEMX配置完毕。

五、Keil填写代码

1、将厂家提供的lcd,ov2640文件导入

注:源代码非HAL库,需修改部分引脚、替换延时函数等。

HAL库的微秒级延时函数详见【STM32+HAL】微秒级延时函数汇总

2、LCD、OV2640初始化
	/* LCD初始化 */
	LCD_Init();
	LCD_Clear(WHITE);
	HAL_Delay(100);
	
	/* OV2640初始化 */
	OV2640_Init();
	HAL_Delay(200);
	OV2640_OutSize_Set(lcddev.width,lcddev.height); 
	OV2640_ImageSize_Set(1600,1200);				//分辨率设为UXGA
	OV2640_Auto_Exposure(1);						//曝光模式设为1
	OV2640_Light_Mode(0);							//白平衡设为自动

3、摄像头读取显示
	/* 摄像头读取显示 */
	LCD_SetCursor(0,0);  
	LCD_WriteRAM_Prepare();
	HAL_DCMI_Start_DMA(&hdcmi, DCMI_MODE_CONTINUOUS, (uint32_t)&(LCD->LCD_RAM), 1);

六、巨人之肩

OV2640+stm32F407HAL库+st7735(128*160)

七、源码提供

【STM32+HAL】OV2640实现LCD显示图像

八、结语

本人能力有限,代码未必是最优解,若有可改进之处望在评论区留言,采纳有赏~

后续会加入无线图传功能,敬请期待~

如有小伙伴想交流学习心得,欢迎加入群聊751950234,群内不定期更新代码,以及提供本人博客所有源码

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐