你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32F030锁相环配置与读取不一致

[复制链接]
donsbin 提问时间:2017-8-21 21:30 /
本帖最后由 donsbin 于 2017-8-21 21:36 编辑

外挂8M的晶振,锁相环通过HSE一分频然后倍频。
通过RCC_GetClocksFreq(&gRCC_Clocks);接口读取时钟信息。
论坛下的DEMO

通过IAR编译DEBUG读取数据如下,主频变成了13.5M的了
QQ截图20170821212813.png


然后我又用MDK DEBUG了下,16M。正常了
QQ截图20170821212952.png
  1. static RCC_ClocksTypeDef gRCC_Clocks;
  2. void  BSP_Init (void)
  3. {
  4.     //BSP_IntInit();

  5.     RCC_DeInit();
  6.     RCC_HSEConfig(RCC_HSE_ON);                                  /* HSE = 4MHz --> 32 MHz range                          */
  7.     RCC_WaitForHSEStartUp();

  8.     RCC_HCLKConfig(RCC_SYSCLK_Div1);                            /* HCLK  = AHBCLK  = PLL / AHBPRES(1) =  48MHz.(max)    */
  9.     RCC_PCLKConfig(RCC_HCLK_Div1);

  10.     RCC_PLLConfig(RCC_PLLSource_PREDIV1,                        /* PCLK = PLL clock must be set from 16MHz --> 48MHz    */
  11.                   (RCC_CFGR_PLLXTPRE_PREDIV1 | RCC_CFGR_PLLMULL2));


  12.     RCC_PLLCmd(ENABLE);

  13.     while (RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET) {       /* Wait for PLL to lock.                                */
  14.         /* wait */;
  15.     }

  16.     FLASH_SetLatency(FLASH_Latency_1);                          /* 1 Flash wait states                                  */
  17.     FLASH_PrefetchBufferCmd(ENABLE);

  18.     RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);                  /* HCLK = SYSCLK = PLL                                  */
  19.     while (RCC_GetSYSCLKSource() != RCC_CFGR_SWS_PLL) {         /* Check for clock source                               */
  20.         ;
  21.     }

  22.                
  23.                  RCC_GetClocksFreq(&gRCC_Clocks);
  24.                
  25.     BSP_LED_Init();                                             /* Init LEDs.                                           */

  26. }
复制代码

是不是我IDE配置问题??


收藏 评论3 发布时间:2017-8-21 21:30

举报

3个回答
@乔木 回答时间:2017-8-21 22:45:19
这好像这不是标准库,也不是HAL库啊,眼生。
donsbin 回答时间:2017-8-22 08:37:29
  1.    
  2.     /*
  3.     *           - 0x00: HSI used as system clock
  4.     *           - 0x04: HSE used as system clock
  5.     *           - 0x08: PLL used as system clock
  6.     *           - 0x0C: HSI48 used as system clock, applicable only for STM32F072 devices */
  7.     if(((uint8_t)(RCC->CFGR & RCC_CFGR_SWS)) == 0x08)
  8.     {
  9.         return ;
  10.     }

  11.     /* Enable Prefetch Buffer and set Flash Latency */
  12.     FLASH->ACR = FLASH_ACR_PRFTBE | FLASH_ACR_LATENCY;

  13.     /* HCLK = SYSCLK */
  14.     RCC->CFGR |= (uint32_t)RCC_CFGR_HPRE_DIV1;

  15.     /* PCLK = HCLK */
  16.     RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE_DIV1;

  17.     /* PLL configuration */
  18.     RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_PLLSRC | RCC_CFGR_PLLXTPRE | RCC_CFGR_PLLMULL));
  19.     RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_PREDIV1 | RCC_CFGR_PLLXTPRE_PREDIV1 | RCC_CFGR_PLLMUL2);

  20.     /* Enable PLL */
  21.     RCC->CR |= RCC_CR_PLLON;


  22.     /* Wait till PLL is ready */
  23.     while((RCC->CR & RCC_CR_PLLRDY) == 0)
  24.     {
  25.     }

  26.     /* Select PLL as system clock source */
  27.     RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW));
  28.     RCC->CFGR |= (uint32_t)RCC_CFGR_SW_PLL;

  29.     /* Wait till PLL is used as system clock source */
  30.     while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS) != (uint32_t)RCC_CFGR_SWS_PLL)
  31.     {
  32.     }
复制代码
donsbin 回答时间:2017-8-22 08:38:18
标准库也试过了,一模一样
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版