SEO教程

SEO教程

Products

当前位置:首页 > SEO教程 >

如何深度理解并实现ARM时钟初始化与GPT定时器的实战部署?

96SEO 2026-02-19 17:46 0


}

在实际工作中经常遇到这个场景,今天系统性地总结一下最佳实践和注意事项。

如何深度理解并实现ARM时钟初始化与GPT定时器的实战部署?

atom-one-dark"

0">一、系统时钟初始化流程(clock.c)

style="margin-left:

1:为什么系统一开始必须初始化时钟?

style="margin-left:

等外设提供时钟源

  • 保证延时、定时、中断时序是“准确的”
  • style="margin-left:

    完全不可信

  • 外设可能根本不工作
  • style="margin-left:

    1)">CCM->CCSR &= ~(1 << 8);  

  • rgba(255,

    1)">CCM->CCSR |= (1 << 2);  

  • style="margin-left:

    0">做了什么?

    style="margin-left:

    0">

    style="margin-left:

    0">含义

    style="margin-left:

    style="margin-left:

    内核时钟源到安全时钟
    避免在改

    PLL

    1)">CCM->CACRR &= ~(7 << 0);  

  • rgba(255,

    1)">CCM->CACRR |= (1 << 0);  

  • style="margin-left:

    0">作用

    • 设置

      ARM

      0">注意点

      • ARM

        核心最终频率

        1)">unsigned

        style="color:

        1)"> t = CCM_ANALOG->PLL_ARM;  

      • rgba(255,

        1)">t &= ~(3 << 14);  

      • rgba(255,

        1)">t |= (1 << 13);  

      • rgba(255,

        1)">

      • rgba(255,

        1)">t &= ~(0x7F << 0);  

      • rgba(255,

        1)">t |= (88 << 0);  

      • rgba(255,

        1)">CCM_ANALOG->PLL_ARM = t;  

    style="margin-left:

    0">做了什么?

    style="margin-left:

    0">位段

    style="margin-left:

    0">含义

    style="margin-left:

    style="margin-left:

    0">目的

    • AHB、IPG、GPT、EPIT、UART

      等外设提供稳定时钟

    • 不同

      0">注意点

      • GPT

        IPG_CLK

      • IPG_CLK

        又来自

        1)">CCM->CBCMR  

      • rgba(255,

        1)">CCM->CBCDR  

      • rgba(255,

        1)">CCM->CSCMR1  

    style="margin-left:

    0">时钟关系链(非常重要)

    style="margin-left:

    经典推荐配置

    style="margin-left:

    1)">clock_cg_init();

    优化建议:

    如果你的项目访问量较大,建议增加缓存机制。

    我们团队在优化后,接口响应时间从800ms降到了50ms,

    效果非常明显。

    具体的缓存策略可以根据业务场景调整。

    style="margin-left:

    0xFFFFFFFF;

    style="margin-left:

    0">注意点

    • 方便调试
    • 实际产品中不推荐(功耗大)

    style="margin-left:

    一个“不断递增的硬件计数器”

    style="margin-left:

    空转频率

  • 和系统主频解耦
  • style="margin-left:

    1)">GPT1->CR |= (1 << 15);  

  • rgba(255,

    1)">((GPT1->CR & (1 << 15)) != 0);  

  • style="margin-left:

    0">作用

    • GPT

      回到硬件初始状态

    • 清除所有历史配置

    style="margin-left:

    0">注意点

    • 必须等待硬件复位完成

    style="margin-left:

    1)">t = GPT1->CR;  

  • rgba(255,

    1)">t &= ~(7 << 26);   

    style="color:

    1)">时钟源

  • rgba(255,

    1)">t &= ~(3 << 18);   

    style="color:

    1)">工作模式

  • rgba(255,

    1)">

  • rgba(255,

    1)">t |= (1 << 9);     

    style="color:

    1)">// Free-run

  • rgba(255,

    1)">t &= ~(7 << 6);  

  • rgba(255,

    1)">t |= (1 << 6);     

    style="color:

    1)">外设时钟

  • rgba(255,

    1)">t &= ~(1 << 1);    

    style="color:

    1)">关闭中断

  • rgba(255,

    1)">GPT1->CR = t;  

  • style="margin-left:

    0">关键配置解释

    style="margin-left:

    0">

    style="margin-left:

    0">作用

    style="margin-left:

    style="margin-left:

    纯计数器模式

    style="margin-left:

    1)">GPT1->PR &= ~(0xFFF << 0);  

  • rgba(255,

    1)">GPT1->PR |= (65 << 0);  

  • style="margin-left:

    0">作用