极海半导体APM32F072 FLASH等待时间的修改
极海半导体-APM32F072 FLASH等待时间的修改
默认启动文件是8MHZ,FLASH等待周期为0,如果更改系统时钟,那可能导致FLASH等待周期过短,无法正常运行.要正常程序运行就需要默认8MHZ启动后,再更改时钟频率,并同步修改FLASH等待周期,同时需要注意STOP模式后会运行默认8MHZ的频率,需要重新调用更改时钟频率的函数.
更改时钟频率程序如下:
/*
复位RCC->启动相应时钟->等待就绪->更改FLASH->
*/

void HSI_SetSysClock(uint32_t pllmul)
{
    __IO uint32_t HSIStartUpStatus = 0;
  // 把RCC外设初始化成复位状态
  RCC_DeInit();
  //使能HSI
    RCC_HSICmd(ENABLE);
  // 等待 HSI 就绪
    HSIStartUpStatus = RCC->CR & RCC_CR_HSIRDY;   
    // 只有 HSI就绪之后则继续往下执行
  if (HSIStartUpStatus == RCC_CR_HSIRDY)
  {
    // 使能FLASH 预存取缓冲区
    FLASH_PrefetchBufferCmd(ENABLE);
    // SYSCLK周期与闪存访问时间的比例设置
    FLASH_SetLatency(FLASH_Latency_2);
    // AHB预分频因子设置为1分频,HCLK = SYSCLK
    RCC_HCLKConfig(RCC_SYSCLK_Div1);   
    // APB2预分频因子设置为1分频,PCLK2 = HCLK
    RCC_PCLKConfig(RCC_HCLK_Div1);
//-----------------设置各种频率主要就是在这里设置
    // 设置PLL时钟来源为HSE,设置PLL倍频因子
        // PLLCLK = 4MHz * pllmul
        RCC_PLLConfig(RCC_PLLSource_HSI_Div2, pllmul);
    // 开启PLL
    RCC_PLLCmd(ENABLE);
    // 等待 PLL稳定
    while (RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)
    {
    }
    // 当PLL稳定之后,把PLL时钟切换为系统时钟SYSCLK
    RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
    // 读取时钟切换状态位,确保PLLCLK被选为系统时钟
    while (RCC_GetSYSCLKSource() != 0x08)
    {
    }
  }
}
/*修改库函数增加FLASH_Latency_2*/