STM32 UVC学习笔记3

本文是STM32 UVC学习笔记的第三部分,作者在Windows 7环境下,使用MDK5.18和STM32Cube库开发UVC设备。遇到的问题是传输图像时一半数据包出现错误导致黑屏。通过对USB传输过程的分析,发现可能与STM32的双缓冲机制有关。在深入检查STM32F1xx_LL_USB的源码后,发现在指定缓冲区数据长度时存在错误。修复这个问题后,完成了STM32 USB传输MJPEG的初步工作。作者鼓励读者进一步研究MJPEG编码和其他UVC负载格式,以及利用UVC协议的更多特性。
摘要由CSDN通过智能技术生成

主机环境:Windows 7 SP1

开发环境:MDK5.18

目标板:STM32F103C8T6

开发库:STM32F1Cube库和STM32_USB_Device_Library

继续昨天的学习笔记,之前提到从USBTrace软件中抓取的数据跟图像原始数据做对比是没有丢失数据的,只是在传输过程中有一半的数据包出现了错误,由此导致我们在PC上一直无法获取到正常的图像,从而一直显示黑屏,这个原因也找了好久,而且心浮气躁,调试一会儿就去干别的事了,对于调试来说分析出问题点才能更好的去解决问题,大家可以思考一下为什么是有一半的数据包出错,而不是个别数据包错误,也不是三分之一,四分之一出错等,联想到STM32中同步传输是使能了双缓冲特性,只有这一特性是跟我们的错误点二分之一相关的,因此,很有可能是双缓冲这里出现了问题,现在问题就来了,关于STM32 的同步传输的双缓冲传输特性,在上层应用中是没有跟其相关的,我们的传输函数只使用了USBD_LL_Transmit()函数,因此就从该函数查起,最后进入了stm32f1xx_ll_usb.c文件中的USB_EPStartXfer()函数,在这个函数中我们把数据写入PMA中,如下:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值