sys.c 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. #include "sys.h"
  2. //////////////////////////////////////////////////////////////////////////////////
  3. //本程序只供内部使用,未经作者许可,不得用于其它任何用途
  4. //STM32开发板
  5. //系统中断分组设置化
  6. //修改日期:2012/9/10
  7. //版本:V1.4
  8. //Copyright(C) 鲁泰电气 2009-2019
  9. //All rights reserved
  10. //********************************************************************************
  11. //时钟系统配置函数
  12. //PLL:选择的倍频数,RCC_PLL_MUL2~RCC_PLL_MUL16
  13. //返回值:0,成功;1,失败
  14. void Stm32_Clock_Init(u32 PLL)
  15. {
  16. HAL_StatusTypeDef ret = HAL_OK;
  17. RCC_OscInitTypeDef RCC_OscInitStructure;
  18. RCC_ClkInitTypeDef RCC_ClkInitStructure;
  19. RCC_OscInitStructure.OscillatorType=RCC_OSCILLATORTYPE_HSE; //时钟源为HSE 8Mhz
  20. RCC_OscInitStructure.HSEState=RCC_HSE_ON; //打开HSE
  21. RCC_OscInitStructure.HSEPredivValue=RCC_HSE_PREDIV_DIV1; //HSE预分频
  22. RCC_OscInitStructure.PLL.PLLState=RCC_PLL_ON; //打开PLL
  23. RCC_OscInitStructure.PLL.PLLSource=RCC_PLLSOURCE_HSE; //PLL时钟源选择HSE 8Mhz
  24. RCC_OscInitStructure.PLL.PLLMUL=PLL; //主PLL倍频因子 9倍频*8Mhz=72Mhz
  25. ret=HAL_RCC_OscConfig(&RCC_OscInitStructure);//初始化
  26. if(ret!=HAL_OK) while(1);
  27. //选中PLL作为系统时钟源并且配置HCLK,PCLK1和PCLK2
  28. RCC_ClkInitStructure.ClockType=(RCC_CLOCKTYPE_SYSCLK|RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2);
  29. RCC_ClkInitStructure.SYSCLKSource=RCC_SYSCLKSOURCE_PLLCLK; //设置系统时钟时钟源为PLL
  30. RCC_ClkInitStructure.AHBCLKDivider=RCC_SYSCLK_DIV1; //AHB分频系数为1
  31. RCC_ClkInitStructure.APB1CLKDivider=RCC_HCLK_DIV2; //APB1分频系数为2
  32. RCC_ClkInitStructure.APB2CLKDivider=RCC_HCLK_DIV1; //APB2分频系数为1
  33. ret=HAL_RCC_ClockConfig(&RCC_ClkInitStructure,FLASH_LATENCY_2); //同时设置FLASH延时周期为2WS,也就是3个CPU周期。
  34. if(ret!=HAL_OK) while(1);
  35. }