打印
[STM32F1]

STM32 USB自定义设备的问题

[复制链接]
719|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
JY-DX-JY|  楼主 | 2015-7-16 17:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我找到一个STM32 USB自定义设备的例子,可以正常连接。
但是发送数据老是失败。
我发现一个问题,原来程序是使用的内部时钟,烧进程序可以发现设备。
我改为外部时钟,就识别不了。
以下是时钟程序:
/*
ʹÓÃÄÚ²¿Ê±ÖÓ
*/
void RCC_HSI_Configuration(void)
{
//½«ÍâÉè RCC¼Ä´æÆ÷ÖØÉèΪȱʡֵ
RCC_DeInit();
RCC_HSICmd(ENABLE);
while(RCC_GetFlagStatus(RCC_FLAG_HSIRDY) == RESET)
{

}
if(1)
{
     FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
     FLASH_SetLatency(FLASH_Latency_2);
     RCC_HCLKConfig(RCC_SYSCLK_Div1);
     RCC_PCLK2Config(RCC_HCLK_Div1);
     RCC_PCLK1Config(RCC_HCLK_Div2);
     //ÉèÖà PLL ʱÖÓÔ´¼°±¶ÆµÏµÊý
     RCC_PLLConfig(RCC_PLLSource_HSI_Div2, RCC_PLLMul_12);
     //ʹÄÜ»òÕßʧÄÜ PLL,Õâ¸ö²ÎÊý¿ÉÒÔÈ¡£ºENABLE»òÕßDISABLE
     RCC_PLLCmd(ENABLE);//Èç¹ûPLL±»ÓÃÓÚϵͳʱÖÓ,ÄÇôËü²»Äܱ»Ê§ÄÜ
     //µÈ´ýÖ¸¶¨µÄ RCC ±ê־λÉèÖóɹ¦ µÈ´ýPLL³õʼ»¯³É¹¦
     while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)
     {
     }
     //ÉèÖÃϵͳʱÖÓ£¨SYSCLK£© ÉèÖÃPLLΪϵͳʱÖÓÔ´
     RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
     //µÈ´ýPLL³É¹¦ÓÃ×÷ÓÚϵͳʱÖÓµÄʱÖÓÔ´
     // 0x00£ºHSI ×÷ΪϵͳʱÖÓ
     // 0x04£ºHSE×÷ΪϵͳʱÖÓ
     // 0x08£ºPLL×÷ΪϵͳʱÖÓ
     while(RCC_GetSYSCLKSource() != 0x08)
     {
     }
}
}
void RCC_Configuration(void)
{
    /* SYSCLK, HCLK, PCLK2 and PCLK1 configuration -----------------------------*/   
   ErrorStatus HSEStartUpStatus;  
  /* RCC system reset(for debug purpose) */
RCC_DeInit();
  /* Enable HSE */
RCC_HSEConfig(RCC_HSE_ON);
  /* Wait till HSE is ready */
HSEStartUpStatus = RCC_WaitForHSEStartUp();
if(HSEStartUpStatus == SUCCESS)
{
    /* Enable Prefetch Buffer */
  FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
    /* Flash 2 wait state */
  FLASH_SetLatency(FLASH_Latency_2);

    /* HCLK = SYSCLK */
  RCC_HCLKConfig(RCC_SYSCLK_Div1);
  
    /* PCLK2 = HCLK */
  RCC_PCLK2Config(RCC_HCLK_Div1);
    /* PCLK1 = HCLK/2 */
  RCC_PCLK1Config(RCC_HCLK_Div2);  // 36MZH
    /* On STICE the PLL output clock is fixed to 48 MHz */
  RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_6);
    /* Enable PLL */
  RCC_PLLCmd(ENABLE);
    /* Wait till PLL is ready */
  while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)
  {
  }
    /* Select PLL as system clock source */
  RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
    /* Wait till PLL is used as system clock source */
  while(RCC_GetSYSCLKSource() != 0x08)
  {
  }
}
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP |
                               RCC_APB1Periph_TIM2, ENABLE);
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIO_DISCONNECT |
          RCC_APB2Periph_SPI1 | RCC_APB2Periph_GPIOB, ENABLE);
}
大神看看哪里有问题?谢谢!
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:晴天响霹雳,平地一声雷。

245

主题

3351

帖子

30

粉丝