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

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

  • 11
    点赞
  • 68
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 10
    评论
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

StormsWzx

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值