基于STM32CubeIDE的STM32H750 DCMI接口驱动OV2640读取JPEG结合自编上位机实现可以用的数字图传

article/2025/9/20 14:09:09

基于STM32CubeIDE的STM32H750 DCMI接口驱动OV2640读取JPEG结合自编上位机实现可以用的数字图传

  • 最近的一个小项目
  • 方案介绍
  • 硬件连接
  • 下位机程序部分
    • 使用串口助手进行测试
  • 播放视频
  • 写在最后

最近的一个小项目

本人最近在设计一个无人机飞控,无人机还在学校呢,飞控算法无法测试,就打算先把摄像头模组调通再说。期间查找了许多先行者们的资料,尽管资料很给力,但我还是踩了些坑,所以打算些篇博文总结一下调试的过程。

方案介绍

STM32CubeIDE是ST推出的一个基于HAL库的图形化配置驱动的集成开发工具,使用起来非常方便,即使是十分复杂的外设,只要知道各个参数的含义,就可以动动鼠标生成相应的驱动配置代码。H750是ST推出的一款高性价比的芯片,主频高达400MHz,有丰富的外设且价格低廉(我在某宝41买的),这里使用其DCMI接口可以直接与OV2640连接并驱动。

在这里插入图片描述
实物图
在这里插入图片描述
最终效果

硬件连接

在这里插入图片描述在这里插入图片描述
摄像头使用到的引脚OV2640引脚图

其中XCLK可以接外部有源晶振或者配置单片机MCO输出,单片机需要用到的外设就是DCMI、I2C和通讯用的接口了,我这里用的是串口4,以下是具体配置,大家注意千万不要错了。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
配置完成,保存,生成代码就OK啦!

下位机程序部分

下位机我参考的是这篇文章 在FreeRTOS使用DCMI采集JPEG教程 这里我们做一点简单的介绍

void StartOV2640()
{__HAL_DCMI_ENABLE_IT(DCMI_hdcmi, DCMI_IT_FRAME);//每次拍照前都要使能帧中断memset((void *)JpegBuffer,0,pictureBufferLength * 4);//把接收BUF清空HAL_DCMI_Start_DMA(DCMI_hdcmi, DCMI_MODE_SNAPSHOT,(uint32_t)JpegBuffer, pictureBufferLength);//启动拍照}void HAL_DCMI_FrameEventCallback(DCMI_HandleTypeDef *hdcmi)
{HAL_DCMI_Suspend(DCMI_hdcmi);//拍照完成,挂起DCMIHAL_DCMI_Stop(DCMI_hdcmi);//拍照完成,停止DMA传输int pictureLength =pictureBufferLength;while(pictureLength > 0)//循环计算出接收的JPEG的大小{if(JpegBuffer[pictureLength-1] != 0x00000000){break;}pictureLength--;}pictureLength*=4;if(mHuart != NULL)HAL_UART_Transmit(mHuart, (uint8_t*)JpegBuffer, pictureLength, 100000);//将jpeg原始数据传出StartOV2640();
}

在jpeg模式下,我们需要通过帧中断来判断照片传输完成,同时注意数据缓冲区大小,根据配置,图像大小一般是2.8KB-100KB不等。主程序只需初始化,然后启动拍照即可。
如果你的I2C读取的OV2640厂商等信息结果一直是0x00,那么有可能是OV2640的复位引脚导致的。STM32CUBE默认将引脚配置成低电平,而OV2640的复位脚又是低有效,这样就会造成SCCB读取结果为00。
代码 初始化部分和寄存器都是借鉴21ic那个博主的,逻辑部分也十分简单。为了方便大家比对检查,这里将代码开放出来。

使用串口助手进行测试

在正式测试之前,可以使用调试器查看单片机是否接收到了JPEG的数据头和数据尾:
数据头
数据尾
在确认收到后我们就可以进一步使用串口助手进行调试了,这里我用的是丁丁串口助手SSCOM,选择hex显示,接收数据到文件,注意在进行这种测试的时候下位机只要进行一次拍照操作即可。这时串口助手慧生成两个文件,我们使用其中的.DAT文件,它将接收到的数据按二进制保存在文件中,我们将其后缀更改成jpg,顺利的话就能看到刚刚拍摄的图像了。

播放视频

我们要做的是图传,肯定是要具备视频传输能力的,这里我用VS写了一个能播放jpeg数据流的上位机,只需按我提供的下位机程序不断地发送jpeg数据就可以使用,通用性较强,同时它还有测速的功能,适合调试大数据流的下位机。这里以1.9元收费的形式开放下载。

下载链接.

写在最后

有了Cube来帮我配置外设,我们就可以以很低的学习成本上手各种外设,比如USB外设。USB通信有速率高误码率极低应用广泛成熟的特点。博主用stm32f103做测试,配置USB Device FS CDC通信,在博主做的串口助手中进行测试,速度如下:在这里插入图片描述
速度还是十分不错的,这套测试系统,某种意义上已经是一个数字视频监视系统了,接下来就剩无线传输的内容了。关于USB CDC的配置其实十分简单,如果时间充裕的话我也水一篇。


http://chatgpt.dhexx.cn/article/dAkg978u.shtml

相关文章

【单片机开发】OV2640在没有DCMI接口的情况下的STM32驱动

文章目录 (一)背景介绍(二)接线(三)软件实现 (一)背景介绍 在之前刚学STM32的时候完成了一个ov7670的驱动 ov7670驱动 已经快要两年过去了,最近抽了一点时间又将之前搞得ov2640的驱动完善了一下 看一下效果吧。 &…

第45章 DCMI—OV2640摄像头—零死角玩转STM32-F429系列

第45章 DCMI—OV2640摄像头 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/firege 本章参考资料:《STM32F4xx参考手册》、《STM32F4xx规格书》、库帮助文档《stm32f4xx_dsp_stdperiph_lib_um.…

stm32cubeMx---DCMI 配置与使用

最近需要使用stm32的DCMI外设,所以经过一段时间研究后,对现有的学习状态进行记录: 1:stm32cube的pinout处进行无脑配置就行了,不进行描述。时钟配置按照自己的需求进行配置。DCMI的DMA配置如下图: 2&#…

通过stm32cubemx配置DCMI驱动ov5640摄像头

打开stm32cubemx选择芯片 选择外部时钟源 选择debug方式 配置dcmi 打开dma 打开dcmi中断 选择合适的io 设置reset、pwdn、scl、sda引脚,注意scl和sda设置为开漏输出,之前参考别人的设置为推挽输出,导致一直没有成功,不知道什么原…

DCMI接口与OV2640原理与配置

OV2640是OmniVision公司生产的一颗1/4寸的CMOS UXGA(1632*1232)图像传感器。该传感器体积小、工作电压低,提供单片UXGA摄像头和影像处理器的所有功能。通过SCCB 总线控制,可以输出整帧、子采样、缩放和取窗口等方式的各种分辨率8/…

STM32H743中的DCMI无法进入行中断和场中断问题

今天在玩MT9V034摄像头时,用到了DCMI接口处理摄像头的数据,出现了一个BUG,怎么都进入不了行中断或者场中断。究其原因,原来是忘记设置其中断优先级了。 void Msp_DCMI_Init(void) {GPIO_InitTypeDef GPIO_InitStruct;__HAL_RCC_DC…

STM32 DCMI OV9655 直接在LCD显示

CUBEMX配置DCMI如下: 生成代码。DCMI初始化代码如下: void HAL_DCMI_MspInit(DCMI_HandleTypeDef* hdcmi) {GPIO_InitTypeDef GPIO_InitStruct {0};if(hdcmi->InstanceDCMI){/* USER CODE BEGIN DCMI_MspInit 0 *//* USER CODE END DCMI_MspInit …

基于STM32F429的DCMI实现OV7725-NF无缓存摄像头的图像采集HAL库

基于STM32F429的OV7725-NF无缓存摄像头的DCMI图像采集 和LTDC显示 0. 首先说明一下时钟配置1. DCMI配置1.1 首先点击DCMI进入配置页面后,要选择Mode1.2 然后要进行GPIO settings1.3 然后是Parameter settings参数设置1.4 DMA settings1.5 需要使用的HAL库函数 3. OV…

stm32-DCMI—OV2640摄像头

第45章 DCMI—OV2640摄像头 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/firege 本章参考资料:《STM32F4xx参考手册》、《STM32F4xx规格书》、库帮助文档《stm32f…

stm32f407的高速并口12位ad——dcmi方式

stm32f407的高速并口12位ad——dcmi方式 关于dcmi 我们可以利用这个摄像头接口,进行一个54M以下的并口ad的数据处理。 这个是dcmi的时序图,时钟使用mco1输出系统时钟四分频也就是42m,我的是ad9926,上升沿触发,那么ad…

STM32H7B0 HAL库中关于DMA的注意事项以及DCMI调试遇到的问题及解决方法

先总结总结问题 问题1:MX_DCMI_Init();放到 MX_DMA_Init();后 问题2:DMA缓存缓存要放到SRAM中__align(32) uint32_t buffer[65535] __attribute((at(0X24040000))); 问题3:IO复用问题,DCMI数据口可以复用到其他IO口&#xff0…

STM32——DCMI接口与OV2640原理与配置

一、OV2640简介 1、什么是OV2640? OV2640是OmniVision公司生产的一颗1/4寸的CMOS UXGA(1632*1232)图像传感器。该传感器体积小、工作电压低,提供单片UXGA摄像头和影像处理器的所有功能。通过SCCB总线控制,可以输出整…

DCMI接口之OV2640摄像头

一、OV2640简介 OV2640是OmniVision公司生产的一颗1/4寸的CMOS UXGA(1632 * 1232)图像传感器。该传感器体积小、工作电压低,提供单片UXGA摄像头和影像处理器的所有功能。通过SCCB 总线控制,可以输出整帧、子采样、缩放和取窗口等…

OV2640 DCMI

OV2640 简介: 1/4寸CMOSUXGA (1632 * 1232)图像传感器。体积小、工作电压低,提供单片UXGA摄像头和影像处理器的所有功能。通过SCCB总线控制,可以输出整帧、子采样、缩放和取窗口等方式的各种分辨率8/10位影像数据。(此处一般选8位&#xff0…

STM32F429之DCMI 数字相机接口

嵌入式系列文章 参考:《STM32F429_DM00031020_ENV19.pdf》 本文目的:翻译STM32F429的PRM,深入理解DCMI接口的工作原理,最后将DCMI工作原理转换成驱动代码。 DCMI:Digital camera interface,数字摄像头接口 …

DCMI接口

目录 DCMI数字摄像头接口 DCMI引脚 摄像头引脚 操作过程与通信方式 硬件连接图 写操作 读操作 图像输出 数据格式 rawRGB YUV RGB JPEG 代码实现过程简述 学习过程的问题 YUV是亮度和色度的格式,为什么UV中取Cb蓝和Cr红作为色度? 提问MIPI、DVP、DCMI是什…

stm32f4的数字摄像头接口(DCMI)使用

DCMI简介 STM32F4的DCMI接口包括如下信号 1,数据据输入(D[0:13]),接摄像头的数据输出。 2,水平同步(行同步)输入(HSYNC),接摄像头的HSYNC/HREF信号&#xff…

Java开发技术

1、基础技术 数据结构与算法 逻辑结构:数据对象中的数据元素之间的逻辑关系 1.集合结构:集合结构中的数据元素除了同属一个集合外,没有其他关系。 2.线性结构:线性结构中的数据元素之间是一对一的关系。 3.树形结构:树…

JAVA 中的代码生成包 CGLIB (Code Generation Library)

JAVA 中的代码生成包 CGLIB (Code Generation Library) CGLIB 是一个功能强大,高性能的代码生成包。它为没有实现接口的类提供代理,为 JDK 的动态代理提供了很好的补充。通常可以使用Java的动态代理创建代理,但当要代…

Java开发实战讲解!java开发CPU最低要求

前言 本人是底层 211 本科,刚毕业,⽆科研经历,但是有些项⽬经历。 在国内监控行业某头部企业做过一段时间的实习。 想着投下字节,可以积累⼀下⾯试经验和为金九银十面招做准备。投了简历之后,过了一段时 间,HR 就打电话跟我约时间, 说明一下,我投的是北京 office。…