大家好 现在我使用stm32f103x的虚拟串口,发现发送数据到电脑不正常,有时候进不了中断,请问是什么原因造成的?谢谢
一下是代码部分
端点定义
/* EP0 */
/* rx/tx buffer base address */
#define ENDP0_RXADDR (0x60)
#define ENDP0_TXADDR (0xa0)
/* EP1 */
/* tx buffer base address */
#define ENDP1_TXADDR (0xe0)
/* EP2 */
/* Rx buffer base address */
#define ENDP2_TXADDR (0x120)
//端点初始化
void USB_Reset()
{
/* Initialize Endpoint 0 */
SetEPType(ENDP0, EP_CONTROL);
SetEPTxStatus(ENDP0, EP_TX_NAK);
SetEPRxAddr(ENDP0, ENDP0_RXADDR);
SetEPRxCount(ENDP0, 64);
SetEPTxAddr(ENDP0, ENDP0_TXADDR);
Clear_Status_Out(ENDP0);
SetEPRxValid(ENDP0);
// Initialize Endpoint 1
SetEPType(ENDP1, EP_BULK);
SetEPTxAddr(ENDP1, ENDP1_TXADDR);
SetEPTxStatus(ENDP1, EP_TX_NAK);
SetEPRxStatus(ENDP1, EP_RX_DIS);
// Initialize Endpoint 2
SetEPType(ENDP2, EP_INTERRUPT);
SetEPTxAddr(ENDP2, ENDP2_TXADDR);
SetEPRxStatus(ENDP2, EP_RX_DIS);
SetEPTxStatus(ENDP2, EP_TX_NAK);
// Initialize Endpoint 3
SetEPType(ENDP3, EP_BULK);
SetEPRxAddr(ENDP3, ENDP3_RXADDR);
SetEPRxCount(ENDP3, 64);
SetEPRxStatus(ENDP3, EP_RX_VALID);
SetEPTxStatus(ENDP3, EP_TX_DIS);
}
//发送数据
//我发的数据都是小于64个的 没有做大于64个的处理
void usb_send(uint8_t *pindat,uint8_t len)
{
if(bDeviceState != CONFIGURED)
{
UserToPMABufferCopy(pindat, ENDP1_TXADDR,len);
SetEPTxCount(ENDP1,len);
SetEPTxValid(ENDP1);
usb_state = USB_BUSY;
int timout = 0;
while(usb_state == USB_BUSY)
{
if(timout++ > 0xfff)
{
return;
}
}
}
}
//端点1中断
void EP1_IN_Callback(void)
{
if(usb_state == USB_BUSY)
{
usb_state = USB_FREE;
}
}
|