STM32F407VG使用内部时钟PLL不能超过48M?

2019-07-20 15:20发布

一块STM32F407VG板子,使用外部8M晶振正常,使用407的16M HSI做锁相环的输入,锁相环输出只能最大输出48M,大于48M时调式进不去main()函数。手册中没有见到用HSI总线频率不能超过48M啊,哪位大侠用过HSI,请指点下。谢谢。部分代码如下:
system_stm32f4xx.c中,修改了下面这个函数,使用了HSI。
static void SetSysClock(void)
{
__IO uint32_t StartUpCounter = 0, HSIStatus = 0;


  /* Wait till HSE is ready and if Time out is reached exit */
  do
  {
    HSIStatus = RCC->CR & RCC_CR_HSIRDY;
    StartUpCounter++;
  } while((HSIStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT));

  if ((RCC->CR & RCC_CR_HSIRDY) != RESET)
  {
    HSIStatus = (uint32_t)0x01;//我的代码下面没判断这个HSIStatus的值
  }
  else
  {
    HSIStatus = (uint32_t)0x00;
  }
       

     RCC->APB1ENR |= RCC_APB1ENR_PWREN;
     PWR->CR |= PWR_CR_VOS;//这个不知道干吗用,去掉我的程序也能运行
     RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);//选择系统时钟源为PLL
     RCC_HCLKConfig(RCC_SYSCLK_Div1);//选择HCLK时钟源
     RCC_PCLK1Config(RCC_HCLK_Div4);//选择AHB1总线时钟源
     RCC_PCLK2Config(RCC_HCLK_Div2);

     RCC_PLLConfig(RCC_PLLSource_HSI,8,192,8,8);//主要是这个函数配置,PLLM=8,PLLN=192,PLLP=8,这样算出的PLL输出是16M*192/(8*8)=48M,把PLLP设置成6,4,2的话程序不能运行到main函数中去
     RCC_PLLCmd(ENABLE);
     while(((RCC->CR )& (RCC_CR_PLLRDY)) == 0)
    {                       
    }
                  /* Configure Flash prefetch, Instruction cache, Data cache and wait state */
   FLASH->ACR = FLASH_ACR_ICEN |FLASH_ACR_DCEN |FLASH_ACR_LATENCY_5WS;
                 /* Select the main PLL as system clock source */
    RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW));
    RCC->CFGR |= RCC_CFGR_SW_PLL;

    /* Wait till the main PLL is used as system clock source */
    while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS ) != RCC_CFGR_SWS_PLL);
    {
    }

}




友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。