打印

请教香主:STM32的USB启动时序

[复制链接]
2807|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
c8220|  楼主 | 2010-8-15 18:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 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;
}
沙发
c8220|  楼主 | 2010-8-15 18:06 | 只看该作者
郁闷,我的积分只有10说

使用特权

评论回复
板凳
香水城| | 2010-8-15 18:08 | 只看该作者
参考手册的哪个部分要求需要等待一定时间?哪一页?哪一段?

使用特权

评论回复
地板
c8220|  楼主 | 2010-8-15 18:11 | 只看该作者
本帖最后由 c8220 于 2010-8-15 18:13 编辑

STM32F10xxx参考手册(RM008)的20.4.2节(第369页) 系统复位和上电复位
我使用的文档是:STM32F10xxx_RM0008_CH_Rev7V3.pdf

使用特权

评论回复
5
香水城| | 2010-8-15 21:44 | 只看该作者
谢谢,我看到了。

说实话,还真没有注意过这点;个人认为,如果你不放心,可以根据自己时钟加上一个满足规格的延时。

使用特权

评论回复
6
c8220|  楼主 | 2010-8-16 09:28 | 只看该作者
好,谢谢了!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

5

帖子

0

粉丝