找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1451|回复: 0
收起左侧

STM32时钟树系统浅析

[复制链接]
ID:391723 发表于 2023-8-6 17:50 | 显示全部楼层 |阅读模式
本帖主要是讨论stm32F103系列IC,同类的stm32的时钟树系统与F103系列相差不大,可做参考由于本人能力有限,难免会出现错误,欢迎批评指正!!!

时钟是一颗ic的心脏,为程序执行提供基础步调;可以说,一个单片机的性能强不强,与时钟频率直接挂钩;
下面我们现在简单介绍一下STM32F103系列的时钟树,参考附件截图;

STM32F10xxx参考手册RCC章节中可以看出,时钟树包含两个外部输入时钟,一个外部输出时钟和两个内部振荡时钟;
两个外部输入时钟分别是:HSE,LSE
一个外部输出时钟是:MCO
两个内部振荡时钟分别是:HSI,LSI
还包含了PLL锁相环和预分频器,这些共同组成了整个F103的时钟树系统;

我该如何配置时钟呢?以打开gpio时钟为例:
第一步:等待HSE,LSE,HSI,LSI起振,起振成功之后,配置PLL Source和PLL MUL;
第二步:设置SYSCLK Source,可以默认设置PLL;
第三步:设置AHB总线预分频系数,使其总线频率不超过72MHZ;
第四步:设置APB1和APB2总线预分频系数,使其总线频率不超过最大总线频率72MHZ和36MHZ;
第五步:打开GPIO时钟使能,使其能正常工作;



这样我就配置好了一个时钟,下面是代码示例:
  1. /* enable lse clock*/
  2. hw_rcc_set_lse_enable(true);
  3. hw_rcc_lse_wait_ready();

  4. /* enable lsi clock */
  5. hw_rcc_set_lsi_enable(true);
  6. hw_rcc_lsi_wait_ready();

  7. /* enable hse clock */
  8. hw_rcc_set_hse_enable(true);
  9. hw_rcc_hse_wait_ready();

  10. /* open hsi clock */
  11. hw_rcc_set_hsi_enable(true);
  12. hw_rcc_hsi_wait_ready();

  13. /* configure pll clock source */
  14. rcc_set_pll_multiplication_factor(clock->pll_mul);
  15. rcc_set_pll_source(clock->pll_source);

  16. /* enable pll clock */
  17. hw_rcc_set_pll_enable(true);
  18. hw_rcc_pll_wait_ready();

  19. /* configure anb,apb1,apb2 prescaler */
  20. rcc_set_hpre(clock->ahb_prescaler);
  21. rcc_set_ppre1(clock->apb1_prescaler);
  22. rcc_set_ppre2(clock->apb2_prescaler);

  23. /* set system clock source */
  24. rcc_set_sysclk_source(clock->sysclk_source);

  25. /* enable gpio clock */
  26. hw_rcc_apb2periph_clock_enable(RCC_APB2ENR_IOPAEN, IOPAEN);
  27. hw_rcc_apb2periph_clock_enable(RCC_APB2ENR_IOPBEN, IOPBEN);
  28. hw_rcc_apb2periph_clock_enable(RCC_APB2ENR_IOPCEN, IOPCEN);
  29. hw_rcc_apb2periph_clock_enable(RCC_APB2ENR_IOPDEN, IOPDEN);
  30. hw_rcc_apb2periph_clock_enable(RCC_APB2ENR_IOPEEN, IOPEEN);
  31. hw_rcc_apb2periph_clock_enable(RCC_APB2ENR_IOPFEN, IOPFEN);
  32. hw_rcc_apb2periph_clock_enable(RCC_APB2ENR_IOPGEN, IOPGEN);
复制代码

另外在时钟树上,发现cortex系统时钟只有AHB时钟的1/8,也就是说72M的系统时钟下,内核只有9M的速度,与内核相关外设最大时钟频率只有9M。

配置时钟树,需要按照参考手册上的来,不能超过各个总线的最大时钟频率的限制;
可以通过标准库和HAL库已经提供了相关的初始化接口,直接就可以配置到最大的速度;
也可以通过STM32CubeMX这种图形化工具自己来配置各个时钟,直接生成代码;
51hei截图20230806174949.png

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表