主机环境: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中,如下: