本人刚刚接触usb,在写一个STM32 USB通信测试程序。设备定义为HID,EP1为输出,EP2为输入。
主函数中
while(1)
{
if (USB_Receive标志寄存器 == TRUE)
{
USB_GetData(DATA,sizeof(DATA));
USB_SendData(DATA,sizeof(DATA));
if(DATA[0]==0x00)
{
GPIO_SetBits(GPIOA , GPIO_Pin_9);
GPIO_SetBits(GPIOA , GPIO_Pin_6);
//delayMS(200);
GPIO_SetBits(GPIOC , GPIO_Pin_5);
//delayMS(300);
GPIO_SetBits(GPIOB , GPIO_Pin_1);
GPIO_SetBits(GPIOC , GPIO_Pin_1);
GPIO_SetBits(GPIOC , GPIO_Pin_2);
//delayMS(10);
GPIO_SetBits(GPIOC , GPIO_Pin_0);
//PortA_VBAT_PSense_EN;
//delayMS(20);
PortA_TestItem_Flag=2;
GPIO_SetBits(GPIOB , GPIO_Pin_12);
}
USB_Receive标志寄存器 = FALSE;
}
}
这样写(把延时函数delayMS都注释掉),通信是正常的,就是主机给设备发送16个字节的数据,设备接收到以后再发送回去。if里面是我的应用里面需要的一些IO口操作。
但是如果把if里面的延时函数加上,那么通信就不正常,只能主机发送数据,设备发送不回来。而且if里面的那些GPIO口,都没有执行。
这个问题很奇怪,逻辑很简单,但是就是一直有问题。
请教各位大侠,多多指点!!! |