基于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的配置其实十分简单,如果时间充裕的话我也水一篇。

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

  1. w806开发板驱动ov2640读取jpeg图片1600x1200分辨率,以及花屏原因及解决办法

    主频需要160MHz以上,80MHz主频读取会丢数据,读取过程中要关闭所有中断否则会出现丢数据花屏现象,还有一个重要的地方需要注意,PCLK速度过慢同时照片信息量多时,jpeg文件过大也会花一部分,像 ...

  2. FPGA基于XDMA实现PCIE X4通信方案 提供工程源码和QT上位机程序和技术支持

    目录 1.前言 2.我已有的PCIE方案 3.PCIE理论 4.总体设计思路和方案 5.vivado工程详解 6.驱动安装 7.QT上位机软件 8.上板调试验证 9.福利:工程代码的获取 1.前言 P ...

  3. STM32F407获取OV2640摄像头图像及上位机解码(一维码二维码)

    STM32F407获取OV2640摄像头图像及上位机解码(一维码&二维码) 1. 目的 针对静止拍摄图像场景,实现STM32F407对200万像素OV2640摄像头进行图像捕获,并通过串口将数 ...

  4. .NET Core 跨平台物联网框架 ServerSuperIO.Core,一套设备驱动通吃嵌入式、上位机、云服务...

    一.概述 我们的大数据平台(云)平台的数据接收服务基于ServerSuperIO开发,因为集成的功能比较多,无法实现跨平台,现在跑在Windows下. 但是云端体系化.标准化建设,跨平台是必走的技术路 ...

  5. esp32系列(11):ESP32 IDF平台 mpu6050 DMP 驱动移植及测试上位机开发

    目录 1 DMP 官方库介绍 1.1 DMP与MPL(Motion Processing Libraries)功能 1.2 运行MPL的硬件要求 1.3 Motion Driver 6.12 的架构 ...

  6. 基于MATLAB App Designer的串口RS485 Modbus上位机

    1. 前言 上学那会儿MATLAB还没有App Designer,记得当时开发了一个基于MATLAB的计算器.最近,由于项目需要一个简单的上位机做监控,结合自身实际,拟定了以下三种方案: PyQt5: ...

  7. OV7670 FIFO 30W摄像头介绍(四) --- OV7670上位机验证驱动

    在介绍OV7670之前先附上模块链接:点击购买OV7670摄像头模块 介绍代码前,首先来看之前写的文章: OV7670 FIFO 30W摄像头介绍(一) - 整体介绍/SCCB时序 OV7670 FI ...

  8. 一步一步教你使用AgileEAS.NET基础类库进行应用开发-基础篇-基于接口驱动的数据层...

    系列回顾 在前面的文章中,我用了大量的篇幅对UDA及ORM的使用进行了讲解和演示,我们已经知道并熟悉的使用UDA和ORM构建简单的应用,AgileEAS.NET在应用的纵向结构上建议使用分层结构,提出 ...

  9. 【STM32】基于STM32CubeIDE SPI+DMA驱动WS2812

    [STM32]基于STM32CubeIDE SPI+DMA驱动WS2812 ✨申明:本文章仅发表在CSDN网站,任何其他网见此内容均为盗链和爬取,请多多尊重和支持原创!

  10. STM32H750获取OV2640摄像头图像及上位机解码(一维码二维码)

    STM32H750获取OV2640摄像头图像及上位机解码(一维码&二维码) 1. 目的 针对静止拍摄图像场景,实现STM32H750对200万像素OV2640摄像头进行图像捕获,并通过串口将数 ...

最新文章

  1. salt-api https证书报错解决方法
  2. Linux上安装Nginx
  3. lol战绩查询接口_大聪明,3000元配置一台能畅玩LOL、CF、DNF的腾讯全家桶电脑,该怎么办?——12.10更新...
  4. BAT 批处理脚本教程
  5. 通达信服务器维修点查询,通达信验证服务器数据库修改
  6. python基础总结--- 列表、内置函数(4-5)
  7. 解决: Unable to connect to zookeeper server within timeout: 5000
  8. 小程序 怎么选云服务器,小程序如何选择云服务器
  9. Python+sklearn使用线性回归算法预测儿童身高
  10. unix环境高级编程 pdf_Unix环境编程-详解coredump
  11. java telnet 交换机_华为交换机 telnet 配置(极简版)
  12. SFB 项目经验-29-批量-启用用户-启用企业语音-设置分机号(项目中)
  13. 剑指offer面试题[21]包含min函数的栈
  14. LinkedIn领英官方API接口文档说明:授权代码流程
  15. php 保存文件并换行,php是怎样向文件中写入换行_后端开发
  16. 2022数学建模思路 - 案例
  17. JAVA实现EXCEL公式专题(七)——统计函数
  18. SMCJ系列TVS瞬态抑制二极管型号参数表
  19. Angular安装命令
  20. BLE技术知识点大全

热门文章

  1. 《Microsoft Word》进阶技巧:如何设置文档视图
  2. [分析力学]解题思路 - 最小作用量原理
  3. python-opencv-使图片更清晰的几种方法
  4. vue问题解决 extract:echarts: sill extract echarts@^4.2.0-rc.2 extracted to
  5. php文字添加投影,PS如何制作文字投影效果 巧用4种方法给文字添加长投影效果...
  6. 在线DES加密/解密工具
  7. 关于降低软件开发过程中沟通成本的思考
  8. ZigBee模块无线通信组网结构技术之Mesh拓扑网状
  9. Xcode Message from debugger: Terminated due to memory issue
  10. Python的三大神器,你知道是哪三大吗?史上最详细的入门教程!