STM32F4配置内部时钟(HSI)

  • Post author:
  • Post category:其他

STM32F4配置内部时钟

半年多没更新了,今天配置F4的时候内部时钟问题整了2个小时,记录下这个坑。
有些板子由于没有贴外部晶振,所以代码运行起来的时候时钟就会出问题,本来配置的中断是1ms实际跑起来确只有10ms,严重出错了。这种问题解决办法就是配置使用内部时钟HSI
本例程只针对STM32F4,其他单片机并未测试过。
/**

  * @brief  Configures HSI as the System clock source

  **/  

void HSI_SetSysClock()
{
  RCC->CR |= ((uint32_t)RCC_CR_HSION);
 
  while(!(RCC->CR & RCC_CR_HSIRDY));

	RCC->APB1ENR |= RCC_APB1ENR_PWREN;
	PWR->CR |= PWR_CR_VOS;

	RCC->CFGR |= RCC_CFGR_HPRE_DIV1;
	 
	RCC->CFGR |= RCC_CFGR_PPRE2_DIV2;

	RCC->CFGR |= RCC_CFGR_PPRE1_DIV4;

	RCC->PLLCFGR = 16 | (PLL_N << 6) | (((PLL_P >> 1) -1) << 16) |
		(RCC_PLLCFGR_PLLSRC_HSI) | (PLL_Q << 24);

	RCC->CR |= RCC_CR_PLLON;

	while((RCC->CR & RCC_CR_PLLRDY) == 0)
	{
	}

	FLASH->ACR = FLASH_ACR_PRFTEN |FLASH_ACR_ICEN |FLASH_ACR_DCEN |FLASH_ACR_LATENCY_5WS;

	RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW));
	RCC->CFGR |= RCC_CFGR_SW_PLL;

	while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS ) != RCC_CFGR_SWS_PLL);
	{
	}
}

此函数在哪里调用呢
在这个函数static void SetSysClock(void)的
在这里插入图片描述
然后重新运行代码即可


版权声明:本文为u014694105原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。