极海半导体-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*/