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

   日期:2021-02-20     浏览:402    评论:0    
核心提示:基于STM32CubeIDE的STM32H750 DCMI接口驱动OV2640读取JPEG结合自编上位机实现可以用的数字图传最近的一个小项目方案介绍硬件连接下位机程序部分如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入最近的一个小项目本人最近在设计一个无人机飞控,无人机

基于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);//拍照完成,挂起DCMI
	HAL_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的配置其实十分简单,如果时间充裕的话我也水一篇。

 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服