STM 32的USB时钟的配置

来源:互联网 发布:淘宝重新注册账号申请 编辑:程序博客网 时间:2024/05/20 06:41

1.首先要配置好系统的时钟如下:

RCC_DeInit();//将外设RCC寄存器重设为缺省值  /* Enable HSE */  RCC_HSEConfig(RCC_HSE_ON);//设置外部高速晶振(HSE )  /* Wait till HSE is ready */  HSEStartUpStatus = RCC_WaitForHSEStartUp();//等待HSE 起振,等待外部的时钟起振  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);//设置AHB时钟(HCLK)       /* PCLK2 = HCLK */    RCC_PCLK2Config(RCC_HCLK_Div1);//设置高速AHB时钟(PCLK2) to APB2    /* PCLK1 = HCLK/2 */ //stm32的时钟比较复杂    RCC_PCLK1Config(RCC_HCLK_Div2); //设置高速AHB时钟(PCLK1)to APB1        /* ADCCLK = PCLK2/8 */    RCC_ADCCLKConfig(RCC_PCLK2_Div8); //设置ADC时钟(ADCCLK)      /* PLLCLK = 8MHz * 9 = 72 MHz */   //设置外部时钟源,且PLL等于外部时钟频率*9    RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);    //此时PLLCLK =72MHz,这个得知道他的值,因为USB的时钟USBCLK = PLLCLK/1或者PLLCLK/1.5,但得确保USBCLK =48MHz    //所以配置USBCLK的时候选择是1.5分频    RCC_PLLCmd(ENABLE);//最后才激活PLL,必须最后才激活!    /* Wait till PLL is ready */    while (RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)    {    }    RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);//配置SYSCLK    /* Wait till PLL is used as system clock source */    while(RCC_GetSYSCLKSource() != 0x08)    {    }  }  else  { /* If HSE fails to start-up, the application will have wrong clock configuration.       User can add here some code to deal with this error */       /* Go to infinite loop */    while (1)    {    }  }void USBclock_Config(){RCC_USBCLKConfig(RCC_USBCLKSource_PLLCLK_1Div5);//1.5分频    /* Enable the USB clock */  RCC_APB1PeriphClockCmd(RCC_APB1Periph_USB, ENABLE);//此处是激活USB外设,USB属于APB1外设}


原创粉丝点击