【STM32+HAL】OV2640捕获图像显示

news2024/10/25 4:43:36

一、准备工作

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2222958.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Flutter UI组件库(JUI)

Flutter UI组件库 (JUI) 介绍 您是否正在寻找一种方法来简化Flutter开发过程,并创建美观、一致的用户界面?您的搜索到此为止!我们的Flutter UI组件库(JUI)提供了广泛的预构建、可自定义组件,帮助您快速构建…

为什么会配置足够打LOL等网游很卡?12代大小核处理器最典型

卡顿原因及优化建议 大小核调度问题: 调度不当:某些游戏未针对大小核进行优化,可能导致系统将负载分配到效率核(小核),而性能核(大核)未被充分利用。操作系统调度策略:尽…

15.6 JDBC数据库编程6——可滚动和可更新的ResultSet

目录 15.6 引言 15.6.1 可滚动的ResultSet 15.6.1 可更新的ResultSet 15.6 引言 可滚动的ResultSet是指在结果集对象上不但可以向前访问结果集中的记录,还可以向后访问结果集中记录。可更新的ResultSet是指不但可以访问结果集中的记录,还可以更新…

文件操作(1) —— 文件基础知识

目录 1. 为什么使用文件? 2. 文件种类【按功能分】 3. 文件名 4. 数据文件种类【按存储方式细分】 5. 文件的打开和关闭 5.1 流和标准流 5.2 文件指针 5.3 文件的打开和关闭函数 6. 文件缓冲区 1. 为什么使用文件? 如果没有⽂件,我…

Vue笔记-浏览器窗口改变时,重新计算表格高度并设置

当窗口大小改变时,你监听 window 对象的 resize 事件,然后在事件处理程序中重新计算表格的高度。在 Vue 中,可以在组件中通过 created 生命周期钩子来添加事件监听器,然后在组件销毁时移除事件监听器。 如下vue代码: …

Android GPU Inspector分析帧数据快速入门

使用 谷歌官方工具Android GPU Inspector (AGI) 可以对Android 应用进行深入和全面的系统性能分析和帧性能分析 。AGI 是一个非常强大的分析工具,尤其是在需要诊断 GPU 性能问题和优化应用时,可以帮助你精准找到性能瓶颈。本文介绍如何使用该工具对帧数据…

24V转3.3V2A同步降压WT6030

24V转3.3V2A同步降压WT6030 WT6030 是一种高效同步整流降压开关模式转换器,集成内部功率 MOSFET,能在宽输入电源范围内提供较高的输出电流,以下是使用 WT6030 将 24V 降压到 3.3V 输出 2A 电流的相关设计要点: 1. 电路设计 输入电…

零基础Java第九期:一维数组(二)和二维数组

目录 一、数组的练习 1.1. 顺序表查找 1.2. 二分查找 1.3. 冒泡排序 二、二维数组 2.1. 二维数组的性质 2.2. 不规则二维数组 一、数组的练习 1.1. 顺序表查找 题目描述:给定一个数组, 再给定一个元素, 找出该元素在数组中的位置。 利用for循环去遍历数组&am…

听一听语音助手的声音

分享自制树莓派语音助手的博文也有一些日子了,今天咱们来听听语音助手自己的声音。 上图是本次对话的log记录,从图上可以看到,主要的对话耗时是用于录音(默认5秒)和语音识别(平均5秒)这两个组件…

【数据结构】包装类简单认识泛型-Java

包装类 在Java中,由于基本类型不是继承自Object,为了在泛型代码中可以支持基本类型,Java给每个基本类型都给了一个包装类型 基本数据类型和对应的包装类 基本数据类型包装类ByteByteshortShortint Integer longLongfloatFloatdoubleDoublec…

洞察前沿趋势!2024深圳国际金融科技大赛——西丽湖金融科技大学生挑战赛技术公开课指南

在当前信息技术与“互联网”深度融合的背景下,金融行业的转型升级是热门话题,创新与发展成为金融科技主旋律。随着区块链技术、人工智能技术、5G通信技术、大数据技术等前沿科技的飞速发展,它们与金融领域的深度融合,正引领着新型…

模型的部署:服务端与客户端建立连接(Flask)

目录 一、服务端部署(使用Flask) 1.安装Flask 2.加载模型(这里以识别图片的类型模型为例) 3.定义API端点 4.运行Flask应用 二、客户端请求 1.安装HTTP客户端库 2.发送请求 请求成功示例: 监控与日志 总结 在…

物联网消息队列Emqx日志配置及日志追踪以及Centos7上的rc.local开机不执行、git提交的小问题

一、物联网消息队列Emqx日志配置及日志追踪 EMQX支持将日志输出到控制台或者日志文件,或者同时使用两者。使用 Docker 部署 EMQX,默认只能通过 docker logs 命令查看 EMQX 日志。EMQX 的默认日志级别为 warning,默认在单日志文件超过10MB(log…

nginx 隐藏版本号与WEB服务器信息

nginx 隐藏版本号与WEB服务器信息 1.安装相关软件2.下载软件包解压并进入3.修改C文件4.编译配置./configure --prefix/usr/local/nginx5.编译安装make && make install5.1.错误处理15.2.错误处理25.2.编译安装make && make install 6.修改nginx配置文件,http节…

【Vue】Vue3.0(十四)接口,泛型和自定义类型的概念及使用

上篇文章: 【Vue】Vue3.0(十三)中标签属性ref(加在普通标签上、加在组件标签上)、局部样式 🏡作者主页:点击! 🤖Vue专栏:点击! ⏰️创作时间&…

从0开始深度学习(20)——延后初始化和自定义层

一般情况下,模型参数在被创建时就被立即初始化了,但如果使用了延后初始化技术,就能在首次传入数据后,再初始化参数,旨在输入维度未知的情况下,预定义灵活的模型,动态推断各个层的参数大小。 有时…

robosense 激光雷达安装

官方github 1、ROBOSENSE 驱动安装并运行 1、改雷达型号 2、修改网口地址 3、改变点的类型 https://github.com/RoboSense-LiDAR/rslidar_sdk/blob/main/doc/howto/05_how_to_change_point_type.md 2、ROBOSENSE 点云转换成 velodyne git clone https://github.com/HVikto…

Linux 部署 Harbor 镜像仓库详解

文章目录 安装 Docker安装 Harbor访问 Harbor 安装 Docker 本次部署流程使用的是1台阿里云ECS: Ubuntu 22.04,2核4G开放 9999 端口号 首先需要做的是在当前服务器上,安装好 Docker,参考链接如下: https://blog.csdn.n…

算法(四)前缀和

前缀和也是一个重要的算法,一般用来快速求静态数组的某一连续区间内所有数的和,效率很高,但不支持修改操作。分为一维前缀和、二维前缀和。 重要的前言! 不要死记模板,具体题目可能是前缀和、前缀乘积、后缀和、后缀乘…

qt 构建、执行qmake、运行、重新构建、清除

qt右键功能有 构建、执行qmake、运行、重新构建、清除,下面简单介绍一下各个模块的作用。 1. 执行qmake qmake是一个工具, 它根据pro文件生成makefile文件,而makefile文件中则定义编译与连接的规则。pro文件中定义了头文件,源文件…