本篇文章完成从ov5640采集数据,到MCU LCD上显示,再用USB UVC传输实现在PC上显示实时视频,给大家提供一个思路。
具体就是实现从ov5640,通过STM32F767的DCMI接口读取ov5640 RGB565格式数据,然后将数据转成YUV422的yuv2格式,通过USB UVC传输数据到PC。过程并不复杂,主要在代码调试。
效果如下面视频所示。
从上图可以看到,从摄像头实时采集视频数据显示到LCD,再通过USB传到PC,视频效果与LCD上一样,分辨率是160x120。下面具体说下步骤。
1、从OV5640采集数据
从ov5640上采集数据格式RGB565并显示到LCD上,这些例子很多。采集视频的效果我用的格式是RGB565,分辨率最高800x480,最小160x120,都可以的,是一行一行数据采集的。我放在SDRAM中,在分辨率比较大时,视频有点卡扽。
2、视频数据转换
USB UVC传输里用的是yuv2,其实就是YUV422采样的packet方式,如下图所示。
3、usb uvc传输数据
用的是全速传输,协议是USB uvc,这里不细究细节,主要是uvc的配置描述符及发送端点及怎么传输一帧视频。如果USB硬件,驱动及配置描述符正确。下载程序,插上USB线,上电,那么会在PC上生成设备,效果如下
名字是我设备描述符中起的,到这一步,说明usb的配置描述符正确,最后就是传输了,uvc协议会从一帧数据流中读取数据发送出去,PC就可以看到数据。