本帖最后由 Swd21ic 于 2010-3-4 20:54 编辑
使用STM32 USB通信. 固件代码里有一个bDeviceState的变量. 用于表示USB设备(STM32)所处的状态.
typedef enum _DEVICE_STATE
{
UNCONNECTED,
ATTACHED,
POWERED,
SUSPENDED,
ADDRESSED,
CONFIGURED
} DEVICE_STATE;
在程序中编写一个发送函数USB_SendData. 在拷贝数据到PMA之前判断一下是否设备处于CONFIGURED状态..
....
if (bDeviceState == CONFIGURED)
{
//简略表达...反正是要发送数据
while (SendOver == 0); //等待EPx_IN_Callback()置1
UserToPMABufferCopy(buffer_in, ENDP1_TXADDR, 64);
SetEPTxCount(ENDP1, 64);
SetEPTxValid(ENDP1);
}
....
如果将USB断开, bDeviceState仍=CONFIGURED. 这时候程序再调用USB_SendData()函数会,导致等待EPx_IN_Callback()里的变量而锁死.
大家一般是如何处理这个的? 因为设备不是USB总线供电的,所以断开USB后设备依然会发送数据. |