你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【经验分享】STM32-STM32H7时钟配置问题

[复制链接]
STMCU小助手 发布时间:2021-12-22 13:46
STM32H7时钟配置问题
设备:stm32h735VGxxx

问题:STM32时钟配置不正确,一直没法启动。

解决:原因是配置时钟的一些参数超出的范围,所以配置导致不成功。

下面是H735的时钟的一些解释,其中 Fvco 是有范围的,这边从文档上面查到,FVCO的最大配置值为836M,所以配置的时候一定要注意。
并且plln, pllm,pllp,pllq,这些都是有范围限制的,如果配置错误,那么芯片将不会正常运行

  1. /*
  2. *  时钟设置函数
  3. *  Fvco: VCO 频率
  4. *  Fsys: 系统时钟频率,也是 PLL1 的 p 分频输出时钟频率
  5. *  Fq: PLL1 的 q 分频输出时钟频率
  6. *  Fs: PLL 输入时钟频率,可以是 HSI,CSI,HSE 等.
  7. *  Fvco = Fs *  (plln/pllm) = (Fs/DIVM)*DIVN;
  8. *  Fsys = Fvco/pllp = Fs * (plln/(pllm *  pllp));
  9. *  Fq = Fvco/pllq = Fs * (plln/(pllm *  pllq));
  10. *
  11. *
  12. *  plln: PLL1 倍频系数(PLL 倍频),取值范围:4~512.
  13. *  pllm: PLL1 预分频系数(进 PLL 之前的分频),取值范围:2~56.
  14. *  pllp: PLL1 的 p 分频系数(PLL 之后的分频),分频后作为系统时钟,取值范围:2~128
  15. *  pllq: PLL1 的 q 分频系数(PLL 之后的分频),取值范围:1~128.
  16. *  CPU 频率(rcc_c_ck) = sys_d1cpre_ck = 400Mhz
  17. *  rcc_aclk = rcc_hclk3 = 200Mhz
  18. *  AHB1/2/3/4(rcc_hclk1/2/3/4) = 200Mhz
  19. *  APB1/2/3/4(rcc_pclk1/2/3/4) = 100Mhz
  20. *  FMC 时钟频率  =pll2_r_ck=((25/25) * 512/2) = 256Mhz
  21. *
  22. *  Example:
  23. *      外部晶振为 25M 的时候,推荐值:plln = 160, pllm = 5, pllp = 2, pllq = 4.
  24. *      得到:Fvco = 25 * (160/5) = 800Mhz
  25. *      Fsys = 800/2 = 400Mhz
  26. *      Fq = 800/4 = 200Mhz
  27. */

  28. #define PLL_N   160
  29. #define PLL_M   5
  30. #define PLL_P   2
  31. #define PLL_Q   4

  32. // 时钟设置函数
  33. static void SystemClock_Config(void)
  34. {
  35.   RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
  36.   RCC_OscInitTypeDef RCC_OscInitStruct = {0};
  37.   HAL_StatusTypeDef ret = HAL_OK;

  38.   /*!< Supply configuration update enable */
  39.   HAL_PWREx_ConfigSupply(PWR_DIRECT_SMPS_SUPPLY);

  40.   /* The voltage scaling allows optimizing the power consumption when the device is
  41.      clocked below the maximum system frequency, to update the voltage scaling value
  42.      regarding system frequency refer to product datasheet.  */
  43.   __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE0);

  44.   while(!__HAL_PWR_GET_FLAG(PWR_FLAG_VOSRDY)) {}

  45.   /* Enable HSE Oscillator and activate PLL with HSE as source */
  46.   RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
  47.   RCC_OscInitStruct.HSEState = RCC_HSE_ON;
  48.   RCC_OscInitStruct.HSIState = RCC_HSI_OFF;
  49.   RCC_OscInitStruct.CSIState = RCC_CSI_OFF;
  50.   RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
  51.   RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;

  52.   RCC_OscInitStruct.PLL.PLLM = PLL_M;
  53.   RCC_OscInitStruct.PLL.PLLN = PLL_N;
  54.   RCC_OscInitStruct.PLL.PLLFRACN = 0;
  55.   RCC_OscInitStruct.PLL.PLLP = PLL_P;
  56.   RCC_OscInitStruct.PLL.PLLR = 2;
  57.   RCC_OscInitStruct.PLL.PLLQ = PLL_Q;

  58.   RCC_OscInitStruct.PLL.PLLVCOSEL = RCC_PLL1VCOWIDE;
  59.   RCC_OscInitStruct.PLL.PLLRGE = RCC_PLL1VCIRANGE_2;
  60.   ret = HAL_RCC_OscConfig(&RCC_OscInitStruct);
  61.   if(ret != HAL_OK)
  62.   {
  63.     while(1) {};
  64.   }

  65. /* Select PLL as system clock source and configure  bus clocks dividers */
  66.   RCC_ClkInitStruct.ClockType = (RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_D1PCLK1 | RCC_CLOCKTYPE_PCLK1 | \
  67.                                  RCC_CLOCKTYPE_PCLK2  | RCC_CLOCKTYPE_D3PCLK1);

  68.   RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
  69.   RCC_ClkInitStruct.SYSCLKDivider = RCC_SYSCLK_DIV1;
  70.   RCC_ClkInitStruct.AHBCLKDivider = RCC_HCLK_DIV2;
  71.   RCC_ClkInitStruct.APB3CLKDivider = RCC_APB3_DIV2;
  72.   RCC_ClkInitStruct.APB1CLKDivider = RCC_APB1_DIV2;
  73.   RCC_ClkInitStruct.APB2CLKDivider = RCC_APB2_DIV2;
  74.   RCC_ClkInitStruct.APB4CLKDivider = RCC_APB4_DIV2;
  75.   ret = HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_3);
  76.   if(ret != HAL_OK)
  77.   {
  78.     while(1) {};
  79.   }

  80. }
复制代码


收藏 评论0 发布时间:2021-12-22 13:46

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版