在USB实验的代码上直接修改后烧写到开发板上,用USB读写SD卡都没有问题。移植到我自己的工程中之后出现了以下几个问题:
1.USB_Init这个函数过不去,一路跟踪之后发现问题出在PowerOn函数里我试着给延时没有用,如果放一个printf()语句在这里居然就能过去了,不管是什么样的内容的printf语句都可以,请问这是为什么?
这是PowerOn的内容:
RESULT PowerOn(void)
{
u16 wRegVal;
USB_Cable_Config(ENABLE);
wRegVal = CNTR_FRES;
_SetCNTR(wRegVal);
wInterrupt_Mask = 0;
_SetCNTR(wInterrupt_Mask);
printf(""); //必须在这里加其他地方不行
_SetISTR(0);
wInterrupt_Mask = CNTR_RESETM | CNTR_SUSPM | CNTR_WKUPM;
_SetCNTR(wInterrupt_Mask);
return USB_SUCCESS;
}
这是我的usart
void USART_GPIO_Configuration(void)
{
GPIO_InitTypeDef GPIO_InitStruct;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_9;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStruct);
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_10;
GPIO_Init(GPIOA, &GPIO_InitStruct);
}
void USART_Configuration(void)
{
USART_InitTypeDef USART_InitStruct;
USART_InitStruct.USART_BaudRate = 115200;
USART_InitStruct.USART_StopBits = USART_StopBits_1;
USART_InitStruct.USART_WordLength = USART_WordLength_8b;
USART_InitStruct.USART_Parity = USART_Parity_No;
USART_InitStruct.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
USART_InitStruct.USART_Mode = USART_Mode_Tx | USART_Mode_Rx; //使能接收和发送
USART_Init(USART1, &USART_InitStruct);
USART_Cmd(USART1, ENABLE);//使能串口1
USART_GPIO_Configuration();
}
2.USB在PC上显示的是无法识别的设备,因为我使用了systick定时器在定时器中加了一个闪烁LED灯来显示定时器正常工作,而我的开发板上对应的USB引脚有三个:DP,DM和RDY,分别为PA12,PA11,PA8,光设置11和12还不行必须要设置8脚,在USB_Cable_Config中也要用8脚,改实验代码的时候就是使能8脚后才成功读写的。但是现在的问题是一旦我使能8脚我的系统时钟好像基础问题了,前面提到的systick定时器中的闪烁灯就常亮,不再闪烁,而USB设备也显示无法识别,一屏蔽8脚的设置之后,systick就工作正常,我的其他模块也工作正常,但是就连无法识别的USB设备都没有了,请教该怎么解决
传不上来本地图片
|