本帖最后由 c8220 于 2010-8-15 18:04 编辑
使用芯片:STM32F103
我看参考手册的驱动部分要求需要等待一定时间,但是库代码没加延时(见以下红色部分)。我算了下我的系统不满足这个延时,但USB模块启动无异常,是不是根据自己时钟加上一个满足规格的延时更稳定一点? 谢谢香主指点!
其次,必须配置CNTR寄存器的PDWN位用以开启USB收发器相关的模拟部分,这点需要特别的处理。此位能打开为端点收发器供电的内部参照电压。由于打开内部电压需要一段启动时间(数据手册中的tSTARTUP),在此期间内USB收发器处于不确定状态,所以在设置CNTR寄存器的PDWN后必需等待一段时间之后,才能清除USB模块的复位信号(清除CNTR寄存器上的FRES位),和ISTR寄存器的内容,以便在使能其他任何单元的操作之前清除未处理的假中断标志。
/*******************************************************************************
* Function Name : PowerOn
* Description :
* Input : None.
* Output : None.
* Return : USB_SUCCESS.
*******************************************************************************/
RESULT PowerOn(void)
{
u16 wRegVal;
/*** cable plugged-in ? ***/
/*while(!CablePluggedIn());*/
//USB_Cable_Config(ENABLE);
/*** CNTR_PWDN = 0 ***/
wRegVal = CNTR_FRES;
_SetCNTR(wRegVal);
/*** CNTR_FRES = 0 ***/
wInterrupt_Mask = 0;
_SetCNTR(wInterrupt_Mask);
/*** Clear pending interrupts ***/
_SetISTR(0);
/*** Set interrupt mask ***/
wInterrupt_Mask = CNTR_RESETM | CNTR_SUSPM | CNTR_WKUPM;
_SetCNTR(wInterrupt_Mask);
return USB_SUCCESS;
} |