查看: 4370|回复: 0

[资料] GD32F105/107的时钟配置 108M【转】

[复制链接]
  • TA的每日心情
    奋斗
    2016-8-15 09:28
  • 签到天数: 222 天

    连续签到: 1 天

    [LV.7]常住居民III

    发表于 2015-5-13 09:51:26 | 显示全部楼层 |阅读模式
    分享到:
    GD32F105/107的时钟配置 108M【转】
    105,107的RCC寄存器中,RCC_CFGR的PLLMUL[4]由Bit27换到了bit29,因为bit27被MCO[3]占了,所以108M的配置有点小的变化。
    另外105,107的HSE一般接的25M晶振,所以配置过程如下:
    1. static void SetSysClockTo108(void)
    2. {
    3.   __IO uint32_t StartUpCounter = 0,HSEStatus = 0;
    4.   __IO uint16_t GigadeviceID = 0;

    5.   /*ID check*/
    6.   if( *( uint8_t *)( 0xE00FFFE8 ) & 0x08 )
    7.   {
    8.        GigadeviceID = ( ( *( uint8_t *)( 0xE00FFFD0 ) & 0x0F ) << 8 ) |
    9.                   ( ( *( uint8_t *)( 0xE00FFFE4 ) & 0xFF ) >> 3  )  |
    10.                   ( ( *( uint8_t *)( 0xE00FFFE8 ) & 0x07 ) << 5 ) + 1 ;
    11.   }
    12.   if(GigadeviceID != 0x7A3)return;
    13.   
    14.   /* SYSCLK, HCLK, PCLK2 and PCLK1 configuration ---------------------------*/   
    15.   /* Enable HSE */   
    16.   RCC->CR |= ((uint32_t)RCC_CR_HSEON);

    17.   /* Wait till HSE is ready and if Time out is reached exit */
    18.   do
    19.   {
    20.     HSEStatus = RCC->CR & RCC_CR_HSERDY;
    21.     StartUpCounter++;  
    22.   } while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT));

    23.   if ((RCC->CR & RCC_CR_HSERDY) != RESET)
    24.   {
    25.     /* HCLK = SYSCLK */
    26.     RCC->CFGR |= (uint32_t)RCC_CFGR_HPRE_DIV1;     
    27.     /* PCLK2 = HCLK */
    28.     RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE2_DIV1;
    29.     /* PCLK1 = HCLK/2 */
    30.     RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE1_DIV2;

    31. #ifdef STM32F10X_CL
    32.     /* Configure PLLs ------------------------------------------------------*/
    33.     /* PLL2 configuration: PLL2CLK = (HSE / 5) * 8 = 40 MHz */
    34.     /* PREDIV1 configuration: PREDIV1CLK = PLL2 / 10 = 4 MHz */
    35.         
    36.     RCC->CFGR2 &= (uint32_t)~(RCC_CFGR2_PREDIV2 | RCC_CFGR2_PLL2MUL |
    37.                               RCC_CFGR2_PREDIV1 | RCC_CFGR2_PREDIV1SRC);
    38.     RCC->CFGR2 |= (uint32_t)(RCC_CFGR2_PREDIV2_DIV5 | RCC_CFGR2_PLL2MUL8 |
    39.                              RCC_CFGR2_PREDIV1SRC_PLL2 | RCC_CFGR2_PREDIV1_DIV10);
    40.   
    41.     /* Enable PLL2 */
    42.     RCC->CR |= RCC_CR_PLL2ON;
    43.     /* Wait till PLL2 is ready */
    44.     while((RCC->CR & RCC_CR_PLL2RDY) == 0)
    45.     {
    46.     }
    47.    
    48.     /* PLL configuration: PLLCLK = PREDIV1 * 27 = 108 MHz */
    49.     RCC->CFGR &= (uint32_t)~( RCC_CFGR_PLLSRC | RCC_CFGR_PLLMULL);
    50.     RCC->CFGR |= (uint32_t)(0x20000000 | RCC_CFGR_PLLSRC_PREDIV1 |
    51.                             RCC_CFGR_PLLMULL12);      
    52. #else
    53.     /*  PLL configuration: PLLCLK = HSE/2* (15+12) = 108 MHz */
    54.     RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_PLLSRC | RCC_CFGR_PLLXTPRE |
    55.                                        RCC_CFGR_PLLMULL));
    56.     RCC->CFGR |= (uint32_t)(0x08000000 | RCC_CFGR_PLLSRC_HSE | RCC_CFGR_PLLXTPRE_HSE_Div2 | RCC_CFGR_PLLMULL12);   
    57.    
    58. #endif
    59.         
    60.     /* Enable PLL */
    61.     RCC->CR |= RCC_CR_PLLON;
    62.     while((RCC->CR & RCC_CR_PLLRDY) == 0){}
    63.    
    64.     /* Select PLL as system clock source */
    65.     RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW));
    66.     RCC->CFGR |= (uint32_t)RCC_CFGR_SW_PLL;   
    67.     while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS) != (uint32_t)0x08){}

    68.   }
    69.   else
    70.   { /* If HSE fails to start-up, the application will have wrong clock
    71.          configuration. User can add here some code to deal with this error */
    72.   }
    73. }
    复制代码
    原帖:http://bbs.21ic.com/icview-634644-1-1.html
    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /5 下一条



    手机版|小黑屋|与非网

    GMT+8, 2024-12-24 07:04 , Processed in 0.101320 second(s), 15 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.