贴上主程序的源码,方便大神们指导,uint8_t data2[512]这里定义超过512的话,程序下到STM32里,PC就不识别STM32的USB了
#include "main.h"
#include "usart.h"
#include "usb_lib.h"
#include "hw_config.h"
#include "usbio.h"
extern volatile uint32_t EP1_ReceivedCount;
extern volatile uint32_t EP2_ReceivedCount;
int main(void)
{
uint16_t data[256],index;
uint8_t data2[512],PacketN,PacketM;
uint16_t num = 0;
uint16_t i=0,j=0;
Set_System();//系统时钟初始化
USB_Interrupts_Config();
Set_USBClock();
USB_Init();
for(i=0;i<256;i++)
{
data[i] = i+256;
}
for(i=0,j=0;j<256;j++)
{
data2[i] = (uint8_t)(data[j] & 0x00ff);
data2[i+1] = (uint8_t)((data[j] >> 8)&0x00ff);
i=i+2;
}
PacketN = 8;
PacketM = 0;
index = 0;
while(1)
{
if(EP1_ReceivedCount > 0)
{
for(acketN>0acketN--)
{
while(EP_TX_NAK!=GetEPTxStatus(ENDP1)); //等待硬件置位端点为EP_TX_NAK(这一条语句很重要)
UserToPMABufferCopy(&data2[index],ENDP1_TXADDR,64);
SetEPTxCount(ENDP1, 64);
SetEPTxValid(ENDP1);
index+=64;
}
if(PacketM!=0) //如果不是64的倍数,就要发送剩余的数据
{
while(EP_TX_NAK!=GetEPTxStatus(ENDP1)); //等待硬件置位端点为EP_TX_NAK(这一条语句很重要)
UserToPMABufferCopy(&data2[index],ENDP1_TXADDR,PacketM);
SetEPTxCount(ENDP1, PacketM);
SetEPTxValid(ENDP1);
}
else //如果是64的倍数,则需要再发一0长度的包
{
while(EP_TX_NAK!=GetEPTxStatus(ENDP1)); //等待硬件置位端点为EP_TX_NAK
UserToPMABufferCopy(&data2[index],ENDP1_TXADDR,0);
SetEPTxCount(ENDP1, 0);
SetEPTxValid(ENDP1);
}
index=0;
}
}
}
|