一、准备工作
有关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,群内不定期更新代码,以及提供本人博客所有源码