各位同行,前辈,请教一个关于STM32F107 OTG口通信问题。
程序大体框架如下:
1、STM32F107 UART1转485接收来自主机A命令(播放,暂停,模式切换,状态巡检等等),通信波特率9600,主机A发送间隔80ms.UART1采用DMA+中断接收,查询发送。
2、STM32F107 UART2转485接收来自主机B命令(启动,故障传输,状态巡检等等),通信波特率9600,主机B发送间隔100mS,。UART2采用DMA+中断接收,查询发送。
3、STM32F107 TOG口做主机,读取U盘中的数据,STM32F107再通过SPI口将读取到的U盘数据发送至VS1003进行MP3播放。
4、其他程序包括NANDFLASH读写,RTC时钟,均采用顺序执行。
其中, UART1的中断优先级最高,UART2的中断优先级次之,OTG中断优先级最低。
问题现象:
在样机老化过程中发现,长时间(有时是20分钟,有时是1两个小时)播放歌曲的时候,系统会自己停止播放。此时,通信状态也不正常,不能回复主机A和主机B的发送的命令。再插拔U盘也不能恢复。
仿真调试现象:
1、程序会死在disk_read()函数,进一步调试,发现disk_read()函数中调用的USBH_MSC_Read10()函数一直返回忙状态USBH_MSC_BUSY。
请教各位,什么情况下会出现USBH_MSC_Read10()一直返回USBH_MSC_BUSY,一般有哪几种情况。
诚心请教,望各位不吝赐教!拜托! |