|
一:遇到问题
1:usb-cdc协议移植出现 SET_LINE_CODING命令响应返回bufferover错误
2: usb传输速率过快出现单片机死机,程序停止在 while((USBDevIntSt & CDFULL) == 0); /* 等待DEVINTS寄存器的CDFULL位置
3:uip移植出现下载程序运行不起来
解决问题
问题一解决添加红色代码
else if (bEPPflags.bits.control_state == USB_RECEIVE)
{ /* 如果当前为接收状态 if it is receive status */
i = USB_ReadEndpoint(0, EP0_PACKET_SIZE,
ControlData.dataBuffer + ControlData.wCount); /* 从端点 0 读取数据 read from endpoint 0 */
if((ControlData.DeviceRequest.bRequest==SET_LINE_CODING)&&(ControlData.DeviceRequest.bmRequestType==0x21))
{
for(i=0;i<7;i++)
LineCoding[ i] = ControlData.dataBuffer[ i];
single_transmit(0,0 );
}
ControlData.wCount += i;
if( i != EP0_PACKET_SIZE || ControlData.wCount >= ControlData.wLength)
{ /* 完成接收数据 finish receiving data */
bEPPflags.bits.setup_packet = 1; /* 通知contorl_handler()处理SETUP包 inform control_handler() to process SETUP packet */
bEPPflags.bits.control_state = USB_IDLE;
}
}
if((ControlData.DeviceRequest.bRequest==SET_LINE_CODING)&&(ControlData.DeviceRequest.bmRequestType==0x21))
{
bEPPflags.bits.control_state = USB_RECEIVE;
}
else
bEPPflags.bits.control_state = USB_IDLE;
问题二解决:
由于单片机内部总线速率在15Mhz没有及时响应中断出现寄存器数据别覆盖,
//系统时钟
#define Fosc 12000000UL //晶振时钟 【Hz】
#define Fcclk (Fosc * 5) //系统频率,必须为Fosc的整数倍(1~32),且<=60MHZ
#define Fcco (Fcclk * 4) //CCO频率,必须为Fcclk的2、4、8、16倍,范围为156MHz~320MHz
#define Fpclk (Fcclk / 4) * 2 //VPB时钟频率,提升到30Mhz 提到60Mhz rtc 寄存器无法读取?????
#define FUSBclk (Fosc * 4) //48MHz
#define FUSBcco (FUSBclk * 4) //usb CCO频率,必须为FUSBclk的2、4、8、16倍,范围为156MHz~320MHz
问题三解决:
删除程序中调试输出printf调用
  |
|