×
单片机 > 单片机程序设计 > 详情

STM32的USB时钟的配置

发布时间:2020-09-01 发布时间:
|

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


  1. RCC_DeInit();//将外设RCC寄存器重设为缺省值  

  2.   /* Enable HSE */  

  3.   RCC_HSEConfig(RCC_HSE_ON);//设置外部高速晶振(HSE )  

  4.   /* Wait till HSE is ready */  

  5.   HSEStartUpStatus = RCC_WaitForHSEStartUp();//等待HSE 起振,等待外部的时钟起振  

  6.   if (HSEStartUpStatus == SUCCESS)  

  7.   {  

  8.     /* Enable Prefetch Buffer */  

  9.     FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);  //使能或者失能预取指缓存  

  10.     /* Flash 2 wait state */  

  11.     FLASH_SetLatency(FLASH_Latency_2);//设置代码延时值   

  12.    

  13.     /* HCLK = SYSCLK */  

  14.     RCC_HCLKConfig(RCC_SYSCLK_Div1);//设置AHB时钟(HCLK)   

  15.     

  16.     /* PCLK2 = HCLK */  

  17.     RCC_PCLK2Config(RCC_HCLK_Div1);//设置高速AHB时钟(PCLK2) to APB2  

  18.     /* PCLK1 = HCLK/2 */  

  19.  //stm32的时钟比较复杂  

  20.     RCC_PCLK1Config(RCC_HCLK_Div2); //设置高速AHB时钟(PCLK1)to APB1  

  21.       

  22.     /* ADCCLK = PCLK2/8 */  

  23.     RCC_ADCCLKConfig(RCC_PCLK2_Div8); //设置ADC时钟(ADCCLK)    

  24.     /* PLLCLK = 8MHz * 9 = 72 MHz */  

  25.    //设置外部时钟源,且PLL等于外部时钟频率*9  

  26.     RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);  

  27.     //此时PLLCLK =72MHz,这个得知道他的值,因为USB的时钟USBCLK = PLLCLK/1或者PLLCLK/1.5,但得确保USBCLK =48MHz  

  28.     //所以配置USBCLK的时候选择是1.5分频  

  29.     RCC_PLLCmd(ENABLE);//最后才激活PLL,必须最后才激活!  

  30.     /* Wait till PLL is ready */  

  31.     while (RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)  

  32.     {  

  33.     }  

  34.     RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);//配置SYSCLK  

  35.     /* Wait till PLL is used as system clock source */  

  36.     while(RCC_GetSYSCLKSource() != 0x08)  

  37.     {  

  38.     }  

  39.   }  

  40.   else  

  41.   {  

  42.  /* If HSE fails to start-up, the application will have wrong clock configuration. 

  43.        User can add here some code to deal with this error */     

  44.     /* Go to infinite loop */  

  45.     while (1)  

  46.     {  

  47.     }  

  48.   

  49.   }  

  50. void USBclock_Config()  

  51. {  

  52. RCC_USBCLKConfig(RCC_USBCLKSource_PLLCLK_1Div5);//1.5分频  

  53.     

  54.   /* Enable the USB clock */  

  55.   RCC_APB1PeriphClockCmd(RCC_APB1Periph_USB, ENABLE);//此处是激活USB外设,USB属于APB1外设  

  56. }  





『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
单片机数字温度计的课程设计