使用平台:STM32F103R8T6.
USB虚拟串口已经成功,想实现PC机端软件发送数据到 EP3,接收到的数据直接写入FLASH。EP1来实现向PC机发送0XAA,实现流控制。
但是一直有问题。不知道什么原因。
端点配置如下:
usb_prob.c文件:
/* Initialize Endpoint 0 */
SetEPType(ENDP0, EP_CONTROL);
SetEPTxStatus(ENDP0, EP_TX_STALL);
SetEPRxAddr(ENDP0, ENDP0_RXADDR);
SetEPTxAddr(ENDP0, ENDP0_TXADDR);
Clear_Status_Out(ENDP0);
SetEPRxCount(ENDP0, Device_Property.MaxPacketSize);
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, VIRTUAL_COM_PORT_DATA_SIZE);
SetEPRxStatus(ENDP3, EP_RX_VALID);
SetEPTxStatus(ENDP3, EP_TX_DIS);
usb_endp.c文件:
void EP1_IN_Callback()
{
uint8_t pDat[64];
pDat[0] = 0xAA;
UserToPMABufferCopy(pDat, ENDP1_TXADDR, 64);
SetEPTxCount(ENDP1, 64);
}
/*******************************************************************************
* Function Name : EP3_OUT_Callback
* Description :
* Input : None.
* Output : None.
* Return : None.
*******************************************************************************/
void EP3_OUT_Callback(void)
{
/* Get the received data buffer and update the counter */
USB_Rx_Cnt = USB_SIL_Read(EP3_OUT, USB_Rx_Buffer);
FLASH_Unlock();
EE_BufferWrite(WriteAddr,USB_Rx_Cnt,USB_Rx_Buffer);
WriteAddr += USB_Rx_Cnt;
//USBSendDataFlag = 1;
SetEPTxStatus(ENDP1, EP_TX_NAK);
SetEPTxValid(ENDP1);
/* Enable the receive of data on EP3 */
SetEPRxValid(ENDP3);
}
出现PC机端软件读取虚拟串口数据,不能读到0XAA。PC机软件采用C#编写。
|