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

STM32L432KC时钟问题请教(初学1)

[复制链接]
beebird 提问时间:2016-8-15 19:36 /
本帖最后由 beebird 于 2016-8-15 19:39 编辑

    目前就学习了GPIO_IOToggle一个例程,今天看程序的时钟部分。
  /* Configure the system clock to 80 MHz */
  SystemClock_Config();
    这里是对系统及各个总线时钟进行配置,貌似以前的库函数里好像是一个SystemInit()函数,这里是因为库函数版本不同修改了么?上面一条语句把系统的时钟设置为80M。我的问题就是这个80M的时钟是怎么来的?
    程序里选用MSI作为时钟源,MSI可以提供多个时钟基准。RCC_OscInitStruct.MSIClockRange = RCC_MSIRANGE_6;语句选择了4M的时钟频率。下面对锁相环对该时钟频率进行了20倍频,应该怎么看下面的代码?手册上没找到说明。
  1. RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_MSI;
  2.   RCC_OscInitStruct.PLL.PLLM = 1;
  3.   RCC_OscInitStruct.PLL.PLLN = 40;
  4.   RCC_OscInitStruct.PLL.PLLR = 2;
  5.   RCC_OscInitStruct.PLL.PLLP = 7;
  6.   RCC_OscInitStruct.PLL.PLLQ = 4;
复制代码
向大家请教,哪里能找到说明上面的配置保证了20倍频的??时钟配置部分的其他代码。
  1. void SystemClock_Config(void)
  2. {
  3.   RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
  4.   RCC_OscInitTypeDef RCC_OscInitStruct = {0};

  5.   /* MSI is enabled after System reset, activate PLL with MSI as source */
  6.   RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_MSI;
  7.   RCC_OscInitStruct.MSIState = RCC_MSI_ON;
  8.   RCC_OscInitStruct.MSIClockRange = RCC_MSIRANGE_6;
  9.   RCC_OscInitStruct.MSICalibrationValue = RCC_MSICALIBRATION_DEFAULT;
  10.   RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
  11.   RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_MSI;
  12.   RCC_OscInitStruct.PLL.PLLM = 1;
  13.   RCC_OscInitStruct.PLL.PLLN = 40;
  14.   RCC_OscInitStruct.PLL.PLLR = 2;
  15.   RCC_OscInitStruct.PLL.PLLP = 7;
  16.   RCC_OscInitStruct.PLL.PLLQ = 4;
  17.   if(HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
  18.   {
  19.     /* Initialization Error */
  20.     while(1);
  21.   }
  22.   
  23.   /* Select PLL as system clock source and configure the HCLK, PCLK1 and PCLK2
  24.      clocks dividers */
  25.   RCC_ClkInitStruct.ClockType = (RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2);
  26.   RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
  27.   RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
  28.   RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;  
  29.   RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;  
  30.   if(HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_4) != HAL_OK)
  31.   {
  32.     /* Initialization Error */
  33.     while(1);
  34.   }
  35. }
复制代码
001.png
02.png


收藏 评论1 发布时间:2016-8-15 19:36

举报

1个回答
五哥1 回答时间:2018-5-2 12:38:43
这个对初学者是挺难的,建议你用CUBEMX对芯片的时钟做设置,那不同的芯片做测试学习,有了大概的印象,然后找相关的资料再仔细的研究,这样进步会快一些而且扎实些。

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

所属标签

相似问题

官网相关资源

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