当前位置: 首页 > news >正文

定时器相关概念

定时器(Timer)核心概念及应用详解


一、定时器的基本概念

定时器是微控制器(MCU)中的硬件模块,用于计时、生成PWM、测量信号频率/脉宽等。核心组成部分:

  1. 计数器(CNT):核心部件,每个时钟周期加/减1。
  2. 预分频器(PSC):降低计数频率,扩展定时范围。
  3. 自动重装载寄存器(ARR):定义计数上限(溢出值)。
  4. 捕获/比较寄存器(CCRx):用于输入捕获或输出比较。
  5. 中断控制器:溢出或匹配时触发中断。

二、定时器的关键模式
1. 基本定时模式
  • 功能:纯计时,到达ARR后触发中断。
  • 应用
    • 系统心跳(如RTOS时基)。
    • 延时函数(非阻塞式)。
2. 输入捕获模式
  • 功能:记录外部信号边沿时的CNT值。
  • 应用
    • 测量频率(如超声波测距)。
    • 测量脉宽(如PWM解码)。
3. 输出比较模式
  • 功能:CNT与CCRx匹配时改变输出电平。
  • 应用
    • 生成PWM(驱动电机、LED调光)。
    • 生成精确脉冲(步进电机控制)。
4. PWM模式
  • 功能:自动输出占空比可调的方波。
  • 配置参数
    • ARR:决定PWM频率(( f_{PWM} = \frac{F_{CLK}}{(PSC+1)(ARR+1)} ))。
    • CCRx:决定占空比(( Duty = \frac{CCR}{ARR+1} ))。
5. 编码器模式
  • 功能:通过正交编码器信号自动增减CNT。
  • 应用:电机位置/速度检测。

三、定时器关键参数计算
1. 定时中断周期计算

[
T_{中断} = \frac{(PSC + 1) \times (ARR + 1)}{F_{CLK}}
]

  • 示例
    ( F_{CLK}=72MHz ), ( PSC=719 ), ( ARR=999 )
    ( T_{中断} = \frac{720 \times 1000}{72 \times 10^6} = 0.01s )(10ms中断一次)。
2. PWM频率与占空比
  • 频率
    ( f_{PWM} = \frac{F_{CLK}}{(PSC+1)(ARR+1)} )
  • 占空比
    ( Duty = \frac{CCR}{ARR+1} \times 100% )

四、STM32定时器应用实例
1. 定时中断配置(HAL库)
TIM_HandleTypeDef htim2;void TIM2_Init(void) {htim2.Instance = TIM2;htim2.Init.Prescaler = 719;       // PSC=719 → 72MHz/720=100kHzhtim2.Init.CounterMode = TIM_COUNTERMODE_UP;htim2.Init.Period = 999;          // ARR=999 → 1000次计数HAL_TIM_Base_Init(&htim2);HAL_TIM_Base_Start_IT(&htim2);    // 启动中断
}// 中断回调函数
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) {if (htim == &htim2) {// 每10ms执行一次}
}
2. PWM输出配置(驱动LED)
TIM_OC_InitTypeDef sConfigOC;void PWM_Init(void) {// 定时器基础配置(PWM频率=1kHz)htim3.Instance = TIM3;htim3.Init.Prescaler = 71;        // 72MHz/72=1MHzhtim3.Init.Period = 999;          // ARR=999 → 1MHz/1000=1kHzHAL_TIM_PWM_Init(&htim3);// PWM通道配置(占空比50%)sConfigOC.Pulse = 500;            // CCR=500sConfigOC.OCMode = TIM_OCMODE_PWM1;HAL_TIM_PWM_ConfigChannel(&htim3, &sConfigOC, TIM_CHANNEL_1);HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_1);  // 启动PWM
}
3. 输入捕获测频率
uint32_t t1 = 0, t2 = 0;
float freq = 0;void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim) {if (htim->Channel == HAL_TIM_ACTIVE_CHANNEL_1) {t2 = __HAL_TIM_GET_COMPARE(htim, TIM_CHANNEL_1);freq = 1000000.0 / (t2 - t1);  // F_CNT=1MHz → freq=1/(t2-t1) MHzt1 = t2;}
}

五、定时器高级应用技巧
  1. 级联定时器
    • 用主定时器触发从定时器,扩展计时范围(如32位定时器)。
  2. DMA+定时器
    • 定时器触发DMA传输,实现高速ADC采样或DAC输出。
  3. 互补PWM
    • 高级定时器(如TIM1)生成带死区的互补PWM,驱动H桥电路。

六、常见问题
  1. 中断不触发
    • 检查NVIC优先级、中断使能位(UIE/CCxIE)。
  2. PWM无输出
    • 确认GPIO复用模式配置正确(AF模式)。
  3. 输入捕获误差大
    • 增加数字滤波(ICFilter)或降低输入噪声。

七、总结
功能关键配置典型应用
定时中断PSC, ARR, 中断使能系统时基、任务调度
PWM输出PSC, ARR, CCR, PWM模式电机控制、LED调光
输入捕获边沿极性, CCR, 捕获中断频率计、超声波测距
编码器接口编码器模式, ARR电机位置反馈

掌握定时器的配置与计算,可覆盖绝大多数嵌入式实时控制场景!

周期、频率与定时器中断

周期和频率的基本概念

  • 周期(T): 完成一个完整波形或循环所需的时间,单位通常是秒(s)
  • 频率(f): 单位时间内(每秒)发生的周期数,单位是赫兹(Hz)
  • 两者关系: f = 1/T 或 T = 1/f

定时器中断的触发时机

定时器中断通常在以下情况下进入:

  1. 计数器溢出时: 当定时器计数器从最大值回绕到0时触发中断
  2. 比较匹配时: 当计数器值等于预设的比较寄存器值时触发中断
  3. 输入捕获时: 当检测到外部信号边沿时触发中断

如何设置定时器中断频率

  1. 确定所需中断频率(f)
  2. 计算对应的周期(T): T = 1/f
  3. 根据时钟源频率和预分频系数计算计数值:
    • 计数值 = (时钟频率 / 预分频系数) × 期望周期
    • 或对于比较匹配模式: 比较值 = (时钟频率 / (预分频系数 × 中断频率)) - 1

示例

假设:

  • 系统时钟频率 = 16MHz
  • 预分频系数 = 64
  • 期望中断频率 = 1kHz (T=1ms)

计算:
比较值 = (16,000,000 / (64 × 1,000)) - 1 = 249

因此,当计数器达到249时触发中断,即可实现1kHz的中断频率。

实际应用中的考虑

  • 选择适当的预分频系数以避免计数器溢出过快或过慢
  • 考虑处理器的处理能力,中断频率不宜过高
  • 在实时性要求高的应用中,需精确计算中断周期

希望这些信息对您理解周期、频率与定时器中断的关系有所帮助。

计数值 = (时钟频率 / 预分频系数) × 期望周期 的详细解释

这个公式用于计算定时器需要计数的次数(计数值),以达到期望的中断周期(或频率)。下面我们一步步拆解它的含义。


1. 定时器的基本工作原理

定时器的核心是一个计数器,它会在每个时钟周期(或经过预分频后的时钟周期)加1。当计数器达到某个值时(可以是自动重装载值比较匹配值),就会触发中断。

  • 时钟频率(FCLK:定时器的输入时钟频率(如STM32的APB时钟可能是16MHz、72MHz等)。
  • 预分频系数(PSC):用于降低计数速度,使定时器不会过快溢出。
  • 计数值(ARR 或 Compare Value):计数器达到这个值后触发中断(如STM32的ARR寄存器)。

2. 计算定时器的计数频率

定时器的实际计数频率(FTimer)由时钟频率预分频系数决定:
[
F_{Timer} = \frac{F_{CLK}}{PSC + 1}
]

为什么 PSC + 1
预分频器是一个除法器,例如 PSC=0 表示不分频(1分频),PSC=1 表示2分频,依此类推。

因此,定时器的**计数周期(TTimer)**为:
[
T_{Timer} = \frac{1}{F_{Timer}} = \frac{PSC + 1}{F_{CLK}}
]


3. 计算期望的中断周期(TDesired

假设我们希望定时器每隔 TDesired 秒触发一次中断(例如 T = 1ms),那么:

  • 中断周期(TDesired = 计数值 × 定时器的计数周期
    [
    T_{Desired} = (计数值) \times T_{Timer}
    ]
    代入 T<sub>Timer</sub>
    [
    T_{Desired} = (计数值) \times \frac{PSC + 1}{F_{CLK}}
    ]
    解出 计数值
    [
    计数值 = \frac{T_{Desired} \times F_{CLK}}{PSC + 1}
    ]
    这就是公式的来源:
    [
    计数值 = \frac{F_{CLK}}{PSC + 1} \times T_{Desired}
    ]

4. 举例计算

目标:用STM32定时器实现 1ms(1kHz)中断,假设:

  • FCLK = 72MHz(系统时钟)
  • PSC = 71(预分频系数)

计算:

  1. 定时器计数频率
    [
    F_{Timer} = \frac{72MHz}{71 + 1} = \frac{72MHz}{72} = 1MHz
    ]
    → 每 1µs 计数一次。

  2. 期望中断周期
    [
    T_{Desired} = 1ms = 0.001s
    ]

  3. 计算计数值
    [
    计数值 = \frac{0.001 \times 72,000,000}{72} = 1000
    ]
    或者直接用:
    [
    计数值 = F_{Timer} \times T_{Desired} = 1MHz \times 0.001s = 1000
    ]

  4. 配置定时器

    • PSC = 71
    • ARR = 999(因为计数器从0开始,0~999是1000次)

5. 总结

  • 公式
    [
    计数值 = \frac{F_{CLK}}{PSC + 1} \times T_{Desired}
    ]

    [
    计数值 = F_{Timer} \times T_{Desired}
    ]
  • 关键点
    • 预分频系数 PSC 用于调整定时器的计数频率。
    • 计数值 决定中断触发的间隔时间。
    • 如果使用 自动重装载模式(ARR),写入的值为 计数值 - 1(因为从0开始计数)。

这样,定时器就能按照设定的周期触发中断了。

定时器的计数加1的时机取决于它的时钟源和**预分频器(PSC)**的设置。具体来说,定时器在以下情况下会加1:


1. 定时器的时钟来源

定时器的计数时钟可以来自:

  • 内部时钟(CK_INT):通常是APB总线提供的时钟(如STM32的APB1/APB2)。
  • 外部时钟(ETR、TI1/TI2等):来自外部引脚输入的脉冲信号。
  • 内部触发(ITRx):其他定时器的输出作为时钟源(级联模式)。

最常见的情况:使用内部时钟(CK_INT),即系统时钟经过预分频后的信号。


2. 计数加1的时机

定时器的计数器(CNT)在每个有效的时钟边沿加1:

  • 如果使用内部时钟(CK_INT),则:
    • 先经过预分频器(PSC)分频,得到 CK_CNT = CK_PSC / (PSC + 1)
    • 然后,定时器在 CK_CNT 的**每个上升沿(或下降沿,取决于配置)**让 CNT 加1。

计算公式

定时器的实际计数频率:
[
F_{CNT} = \frac{F_{CLK}}{PSC + 1}
]

  • F_{CLK}:定时器的输入时钟(如72MHz)。
  • PSC:预分频系数(如 PSC=71 → 分频72倍)。
  • F_{CNT}:计数器 CNT 的实际加1频率(如 72MHz / 72 = 1MHz,即每 1µs 加1)。

3. 计数模式的影响

定时器的计数模式也会影响 CNT 的变化方式:

  1. 向上计数(Upcounting)

    • CNT0 开始,每个 CK_CNT 加1,直到 ARR(自动重装载值),然后归零并触发中断。
    • 加1时机:每个 CK_CNT 上升沿。
  2. 向下计数(Downcounting)

    • CNTARR 开始,每个 CK_CNT 减1,直到 0,然后重新加载 ARR 并触发中断。
    • 减1时机:每个 CK_CNT 上升沿。
  3. 中央对齐模式(Up/Down)

    • CNT 先向上计数到 ARR,再向下计数到 0,循环往复。
    • 加1/减1时机:每个 CK_CNT 上升沿。

4. 示例分析

假设

  • F_{CLK} = 72MHz(定时器时钟源)。
  • PSC = 71(预分频值)。
  • ARR = 999(自动重装载值)。

计算

  1. 计数频率
    [
    F_{CNT} = \frac{72MHz}{71 + 1} = 1MHz
    ]
    → 每 1µs CNT 加1。

  2. 中断周期

    • CNT0 计数到 999(共1000次),然后触发中断。
    • 中断周期:
      [
      T_{中断} = 1000 \times 1µs = 1ms
      ]

5. 关键结论

  • 定时器 CNT 加1的时机
    • 预分频后的时钟(CK_CNT)的每个上升沿(默认情况)。
    • 如果使用外部时钟,则在外部脉冲的有效边沿加1。
  • 影响加1速度的因素
    • 时钟源频率(FCLK:越高,计数越快。
    • 预分频系数(PSC):越大,计数越慢。
    • 计数模式:向上/向下/中央对齐模式影响 CNT 变化方向,但不影响加1的时机。

6. 实际应用

在STM32中,配置定时器中断的典型步骤:

  1. 选择时钟源(通常用内部时钟 CK_INT)。
  2. 设置 PSC 调整计数频率。
  3. 设置 ARR 决定中断周期。
  4. 使能更新中断(UIE)。
  5. 启动定时器(CEN=1)。

代码示例(STM32 HAL库)

TIM_HandleTypeDef htim1;void TIM1_Init(void) {htim1.Instance = TIM1;htim1.Init.Prescaler = 71;      // PSC = 71 → 72分频htim1.Init.CounterMode = TIM_COUNTERMODE_UP;htim1.Init.Period = 999;        // ARR = 999 → 1000次计数htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;HAL_TIM_Base_Init(&htim1);HAL_TIM_Base_Start_IT(&htim1);   // 启动定时器并启用中断
}// 定时器中断回调函数
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) {if (htim == &htim1) {// 每1ms进入一次中断}
}

总结

关键点说明
计数加1的时机CK_CNT(预分频后的时钟)的每个上升沿
影响加1速度的因素时钟源频率 F_{CLK}、预分频 PSC
中断周期计算T_{中断} = (ARR + 1) \times \frac{PSC + 1}{F_{CLK}}

这样,定时器就能按照设定的频率准确计数并触发中断了。

捕获频率时进入中断的时机(Input Capture Interrupt)

在定时器的输入捕获模式下,中断触发的时机与外部信号的边沿和定时器的配置密切相关。以下是详细分析:


1. 输入捕获的基本原理

输入捕获功能用于测量外部信号的频率、脉宽或边沿时间,其核心机制是:

  • 当检测到指定的边沿(上升沿/下降沿)时,定时器会立即记录当前计数器值(CNT),并存入捕获/比较寄存器(CCRx)
  • 如果使能了捕获中断,则会触发中断,用户可以在中断里读取 CCRx 计算信号特征(如周期、占空比)。

2. 中断触发的具体时机

输入捕获中断在以下情况触发:

(1)边沿触发条件满足时

  • 上升沿捕获:当外部信号从低电平(0)跳变到高电平(1)时触发。
  • 下降沿捕获:当外部信号从高电平(1)跳变到低电平(0)时触发。
  • 双边沿捕获(如STM32的 TI1F_ED 模式):任一边沿(上升或下降)均触发。

(2)捕获事件发生时

  • 当检测到指定边沿时,硬件会:
    1. **立即锁存当前计数器值(CNT)**到 CCRx 寄存器。
    2. 置位中断标志位(如 CC1IF)。
    3. 若中断使能(CCxIE=1),则进入中断服务程序(ISR)。

3. 关键配置参数

(1)边沿极性选择

  • STM32示例:通过 TIMx_CCER 寄存器的 CCxPCCxNP 位选择边沿:
    • CCxP=0:上升沿捕获。
    • CCxP=1:下降沿捕获。
    • 某些型号支持双边沿(如 CCxP=0 + CCxNP=1)。

(2)输入滤波

  • 通过 TIMx_CCMR1ICxF 位可设置数字滤波器(避免噪声误触发):
    • 例如 ICxF=0011 表示连续检测到 8个相同电平才认定为有效边沿。

(3)预分频器(ICPSC)

  • 可对输入信号分频(如每 2/4/8 个边沿触发一次捕获):
    • 通过 TIMx_CCMR1ICxPSC 位配置。

4. 频率测量的实现

方法1:两次捕获计算时间差

  1. 第一次捕获(上升沿):记录 CCRx = t1
  2. 第二次捕获(上升沿):记录 CCRx = t2
  3. 信号周期
    [
    T = (t2 - t1) \times \frac{PSC + 1}{F_{CLK}}
    ]
  4. 频率
    [
    f = \frac{1}{T}
    ]

方法2:捕获+溢出计数(高频信号)

  • 如果信号频率较高(CNT 可能溢出),需统计溢出次数(N)
    [
    T = \left( N \times (ARR + 1) + (t2 - t1) \right) \times \frac{PSC + 1}{F_{CLK}}
    ]

5. 代码示例(STM32 HAL库)

初始化输入捕获

TIM_HandleTypeDef htim3;
TIM_IC_InitTypeDef sConfigIC;void TIM3_IC_Init(void) {htim3.Instance = TIM3;htim3.Init.Prescaler = 71;       // PSC=71 → 72分频(72MHz→1MHz)htim3.Init.CounterMode = TIM_COUNTERMODE_UP;htim3.Init.Period = 0xFFFF;      // ARR=65535(16位最大值)HAL_TIM_IC_Init(&htim3);// 配置输入捕获通道1(PA6)sConfigIC.ICPolarity = TIM_ICPOLARITY_RISING; // 上升沿触发sConfigIC.ICSelection = TIM_ICSELECTION_DIRECTTI;sConfigIC.ICPrescaler = TIM_ICPSC_DIV1;      // 不分频sConfigIC.ICFilter = 0;                      // 无滤波HAL_TIM_IC_ConfigChannel(&htim3, &sConfigIC, TIM_CHANNEL_1);HAL_TIM_IC_Start_IT(&htim3, TIM_CHANNEL_1);  // 启动捕获并启用中断
}

中断处理

uint32_t t1 = 0, t2 = 0;
float frequency = 0;void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim) {if (htim == &htim3 && htim->Channel == HAL_TIM_ACTIVE_CHANNEL_1) {t2 = HAL_TIM_ReadCapturedValue(htim, TIM_CHANNEL_1); // 读取CCR1if (t2 > t1) {uint32_t delta = t2 - t1;frequency = 1000000.0 / delta; // F_CNT=1MHz → T=delta µs}t1 = t2; // 更新上一次捕获值}
}

6. 关键注意事项

  1. 信号抖动问题
    • 高频信号需合理设置输入滤波(ICFilter),避免噪声误触发。
  2. 计数器溢出处理
    • 对于低频信号,CNT 可能溢出,需结合**溢出中断(UIE)**统计完整周期。
  3. 中断优先级
    • 输入捕获中断应设为较高优先级,确保及时响应。

总结

触发条件中断时机
上升沿捕获信号从0→1时,锁存CNT值并触发中断。
下降沿捕获信号从1→0时,锁存CNT值并触发中断。
双边沿捕获任一沿跳变均触发(需硬件支持)。
频率计算f = F_CNT / (t2 - t1)(需处理溢出)。

通过合理配置边沿极性、滤波和中断,可精准捕获外部信号频率!

定时器的定时范围及级联扩展方法


一、单个定时器的定时范围

定时器的最大定时时间由以下因素决定:

  1. 计数器位数(如16位/32位)
  2. 时钟频率(( F_{CLK} ))
  3. 预分频系数(( PSC ))
计算公式

[
T_{max} = \frac{(PSC_{max} + 1) \times (ARR_{max} + 1)}{F_{CLK}}
]

  • ( ARR_{max} ):由计数器位数决定(如16位定时器:( ARR_{max} = 65535 ))。
  • ( PSC_{max} ):通常为16位(( PSC_{max} = 65535 ))。
常见MCU的定时范围示例
MCU定时器类型计数器位数最大定时范围(( F_{CLK}=72MHz ))
16位定时器16位( \frac{65536 \times 65536}{72 \times 10^6} \approx 59.65s )
32位定时器32位( \frac{65536 \times 2^{32}}{72 \times 10^6} \approx 3.9 \times 10^5s )(约4.5天)

二、两个定时器级联的定时范围

通过级联(主定时器触发从定时器),可大幅扩展定时范围。
级联原理

  • 主定时器:周期性溢出,触发从定时器计数。
  • 从定时器:记录主定时器的溢出次数。
1. 硬件级联(如STM32的TIM1+TIM2)
  • 主定时器:配置为普通定时模式,溢出时输出触发信号(TRGO)。
  • 从定时器:配置为从模式(Slave Mode),触发源选择主定时器的TRGO。
2. 最大定时范围计算

[
T_{级联} = T_{主} \times T_{从}
]

  • ( T_{主} ):主定时器的溢出时间。
  • ( T_{从} ):从定时器的最大计时时间。
示例(两个16位定时器级联)
  • 主定时器(TIM2):
    ( PSC=719 ), ( ARR=999 ) → 溢出时间 ( T_{主} = 10ms )。
  • 从定时器(TIM3):
    ( PSC=65535 ), ( ARR=65535 ) → 单次最大计时 ( T_{从} \approx 59.65s )。
  • 总定时范围
    ( T_{级联} = 10ms \times 65536 = 655.36s )(约11分钟)。
3. 软件级联(中断计数)

若硬件不支持级联,可通过中断手动扩展:

  1. 主定时器每溢出一次,中断中让全局变量 overflow_cnt++
  2. 总时间 = ( overflow_cnt \times T_{主} + CNT_{当前} \times T_{时钟} )。

三、如何选择级联方案
场景推荐方案优点
超长定时(小时/天)硬件级联 + 32位定时器无需软件干预,精度高
中等扩展(分钟级)两个16位定时器硬件级联资源占用少
灵活扩展软件计数(中断+全局变量)兼容所有MCU,但需注意中断延迟

四、STM32级联配置示例(硬件级联)
1. 主定时器(TIM2)配置
TIM_HandleTypeDef htim2;void TIM2_Init(void) {htim2.Instance = TIM2;htim2.Init.Prescaler = 719;       // 72MHz/720=100kHzhtim2.Init.CounterMode = TIM_COUNTERMODE_UP;htim2.Init.Period = 999;          // 100kHz/1000=100Hz(10ms)htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE;HAL_TIM_Base_Init(&htim2);// 配置主定时器触发输出(TRGO)TIM_MasterConfigTypeDef sMasterConfig;sMasterConfig.MasterOutputTrigger = TIM_TRGO_UPDATE;sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig);HAL_TIM_Base_Start(&htim2);
}
2. 从定时器(TIM3)配置
TIM_HandleTypeDef htim3;void TIM3_Init(void) {htim3.Instance = TIM3;htim3.Init.Prescaler = 65535;     // 72MHz/65536≈1.1kHzhtim3.Init.CounterMode = TIM_COUNTERMODE_UP;htim3.Init.Period = 65535;        // 最大计数值htim3.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE;HAL_TIM_Base_Init(&htim3);// 配置为从模式,触发源为TIM2的TRGOTIM_SlaveConfigTypeDef sSlaveConfig;sSlaveConfig.SlaveMode = TIM_SLAVEMODE_EXTERNAL1;sSlaveConfig.InputTrigger = TIM_TS_ITR1;  // TIM2→TIM3的硬件触发线路HAL_TIM_SlaveConfigSynchronization(&htim3, &sSlaveConfig);HAL_TIM_Base_Start(&htim3);
}
3. 读取总时间
uint32_t get_total_time_ms(void) {uint32_t master_overflow = __HAL_TIM_GET_COUNTER(&htim2);uint32_t slave_count = __HAL_TIM_GET_COUNTER(&htim3);return (slave_count * 10) + (master_overflow / 100);  // 单位:ms
}

五、关键注意事项
  1. 硬件级联限制
    • 需查阅手册确认定时器间的触发线路(如STM32中TIM2可触发TIM3,但TIM1不能触发TIM2)。
  2. 中断优先级
    • 软件级联时,主定时器中断优先级应高于从定时器。
  3. 计数器对齐
    • 硬件级联需确保主从定时器的时钟同步(如均使用内部时钟)。

六、总结
定时器类型最大定时范围(72MHz时钟)级联后扩展范围
16位定时器59.65s约11分钟(硬件级联)
32位定时器4.5天理论无限(需软件辅助)
双16位级联-可达数小时(中断计数)

通过级联设计,可灵活满足从微秒到数天的定时需求!

相关文章:

  • CSS 浮动(Float)及其应用
  • 2025年、2024年最新版IntelliJ IDEA下载安装过程(含Java环境搭建+Maven下载及配置)
  • Java求职面试揭秘:从Spring到微服务的技术挑战
  • 知识图谱(KG)与大语言模型(LLM)
  • 前端获取用户的公网 IP 地址
  • btc交易所关键需求区 XBIT反弹与上涨潜力分析​​
  • |从零开始的Pyside2界面编程| 环境搭建以及第一个ui界面
  • 6.2.5图的基本操作
  • 深入解析Spring Boot与Kafka集成:构建高性能消息驱动应用
  • 二分算法的介绍简单易懂
  • 玄机-第一章 应急响应-Linux日志分析
  • Visual Studio已更新为17.14+集成deepseek实现高效编程
  • vim - v
  • 互联网大厂Java求职面试:AI与大模型应用集成及云原生挑战
  • 贪心、分治和回溯算法
  • 1.2.2
  • 网络的知识的一些概念
  • Spring Boot 与 RabbitMQ 的深度集成实践(一)
  • Linux中如何通过iptables实现端口访问控制
  • Spark 基础自定义分区器
  • 全国游泳冠军赛:孙杨、潘展乐同进400自决赛,今晚将正面对决
  • 一箭六星,朱雀二号改进型遥二运载火箭发射成功
  • 《歌手》回归,人均技术流,00后整顿职场
  • 马上评|训斥打骂女儿致死,无暴力应是“管教”底线
  • 武大校长:人工智能不存在“过度使用”,武大不会缩减文科
  • 证券日报:降准今日正式落地,年内或还有降准空间