定时器相关概念
定时器(Timer)核心概念及应用详解
一、定时器的基本概念
定时器是微控制器(MCU)中的硬件模块,用于计时、生成PWM、测量信号频率/脉宽等。核心组成部分:
- 计数器(CNT):核心部件,每个时钟周期加/减1。
- 预分频器(PSC):降低计数频率,扩展定时范围。
- 自动重装载寄存器(ARR):定义计数上限(溢出值)。
- 捕获/比较寄存器(CCRx):用于输入捕获或输出比较。
- 中断控制器:溢出或匹配时触发中断。
二、定时器的关键模式
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;}
}
五、定时器高级应用技巧
- 级联定时器:
- 用主定时器触发从定时器,扩展计时范围(如32位定时器)。
- DMA+定时器:
- 定时器触发DMA传输,实现高速ADC采样或DAC输出。
- 互补PWM:
- 高级定时器(如TIM1)生成带死区的互补PWM,驱动H桥电路。
六、常见问题
- 中断不触发:
- 检查NVIC优先级、中断使能位(UIE/CCxIE)。
- PWM无输出:
- 确认GPIO复用模式配置正确(AF模式)。
- 输入捕获误差大:
- 增加数字滤波(ICFilter)或降低输入噪声。
七、总结
功能 | 关键配置 | 典型应用 |
---|---|---|
定时中断 | PSC, ARR, 中断使能 | 系统时基、任务调度 |
PWM输出 | PSC, ARR, CCR, PWM模式 | 电机控制、LED调光 |
输入捕获 | 边沿极性, CCR, 捕获中断 | 频率计、超声波测距 |
编码器接口 | 编码器模式, ARR | 电机位置反馈 |
掌握定时器的配置与计算,可覆盖绝大多数嵌入式实时控制场景!
周期、频率与定时器中断
周期和频率的基本概念
- 周期(T): 完成一个完整波形或循环所需的时间,单位通常是秒(s)
- 频率(f): 单位时间内(每秒)发生的周期数,单位是赫兹(Hz)
- 两者关系: f = 1/T 或 T = 1/f
定时器中断的触发时机
定时器中断通常在以下情况下进入:
- 计数器溢出时: 当定时器计数器从最大值回绕到0时触发中断
- 比较匹配时: 当计数器值等于预设的比较寄存器值时触发中断
- 输入捕获时: 当检测到外部信号边沿时触发中断
如何设置定时器中断频率
- 确定所需中断频率(f)
- 计算对应的周期(T): T = 1/f
- 根据时钟源频率和预分频系数计算计数值:
- 计数值 = (时钟频率 / 预分频系数) × 期望周期
- 或对于比较匹配模式: 比较值 = (时钟频率 / (预分频系数 × 中断频率)) - 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(预分频系数)
计算:
-
定时器计数频率:
[
F_{Timer} = \frac{72MHz}{71 + 1} = \frac{72MHz}{72} = 1MHz
]
→ 每 1µs 计数一次。 -
期望中断周期:
[
T_{Desired} = 1ms = 0.001s
] -
计算计数值:
[
计数值 = \frac{0.001 \times 72,000,000}{72} = 1000
]
或者直接用:
[
计数值 = F_{Timer} \times T_{Desired} = 1MHz \times 0.001s = 1000
] -
配置定时器:
- 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。
- 先经过预分频器(PSC)分频,得到
计算公式
定时器的实际计数频率:
[
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
的变化方式:
-
向上计数(Upcounting):
CNT
从0
开始,每个CK_CNT
加1,直到ARR
(自动重装载值),然后归零并触发中断。- 加1时机:每个
CK_CNT
上升沿。
-
向下计数(Downcounting):
CNT
从ARR
开始,每个CK_CNT
减1,直到0
,然后重新加载ARR
并触发中断。- 减1时机:每个
CK_CNT
上升沿。
-
中央对齐模式(Up/Down):
CNT
先向上计数到ARR
,再向下计数到0
,循环往复。- 加1/减1时机:每个
CK_CNT
上升沿。
4. 示例分析
假设:
F_{CLK} = 72MHz
(定时器时钟源)。PSC = 71
(预分频值)。ARR = 999
(自动重装载值)。
计算:
-
计数频率:
[
F_{CNT} = \frac{72MHz}{71 + 1} = 1MHz
]
→ 每 1µsCNT
加1。 -
中断周期:
CNT
从0
计数到999
(共1000次),然后触发中断。- 中断周期:
[
T_{中断} = 1000 \times 1µs = 1ms
]
5. 关键结论
- 定时器
CNT
加1的时机:- 在预分频后的时钟(CK_CNT)的每个上升沿(默认情况)。
- 如果使用外部时钟,则在外部脉冲的有效边沿加1。
- 影响加1速度的因素:
- 时钟源频率(FCLK):越高,计数越快。
- 预分频系数(PSC):越大,计数越慢。
- 计数模式:向上/向下/中央对齐模式影响
CNT
变化方向,但不影响加1的时机。
6. 实际应用
在STM32中,配置定时器中断的典型步骤:
- 选择时钟源(通常用内部时钟
CK_INT
)。 - 设置
PSC
调整计数频率。 - 设置
ARR
决定中断周期。 - 使能更新中断(
UIE
)。 - 启动定时器(
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)捕获事件发生时
- 当检测到指定边沿时,硬件会:
- **立即锁存当前计数器值(CNT)**到
CCRx
寄存器。 - 置位中断标志位(如
CC1IF
)。 - 若中断使能(CCxIE=1),则进入中断服务程序(ISR)。
- **立即锁存当前计数器值(CNT)**到
3. 关键配置参数
(1)边沿极性选择
- STM32示例:通过
TIMx_CCER
寄存器的CCxP
和CCxNP
位选择边沿:CCxP=0
:上升沿捕获。CCxP=1
:下降沿捕获。- 某些型号支持双边沿(如
CCxP=0
+CCxNP=1
)。
(2)输入滤波
- 通过
TIMx_CCMR1
的ICxF
位可设置数字滤波器(避免噪声误触发):- 例如
ICxF=0011
表示连续检测到 8个相同电平才认定为有效边沿。
- 例如
(3)预分频器(ICPSC)
- 可对输入信号分频(如每 2/4/8 个边沿触发一次捕获):
- 通过
TIMx_CCMR1
的ICxPSC
位配置。
- 通过
4. 频率测量的实现
方法1:两次捕获计算时间差
- 第一次捕获(上升沿):记录
CCRx = t1
。 - 第二次捕获(上升沿):记录
CCRx = t2
。 - 信号周期:
[
T = (t2 - t1) \times \frac{PSC + 1}{F_{CLK}}
] - 频率:
[
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. 关键注意事项
- 信号抖动问题:
- 高频信号需合理设置输入滤波(ICFilter),避免噪声误触发。
- 计数器溢出处理:
- 对于低频信号,
CNT
可能溢出,需结合**溢出中断(UIE)**统计完整周期。
- 对于低频信号,
- 中断优先级:
- 输入捕获中断应设为较高优先级,确保及时响应。
总结
触发条件 | 中断时机 |
---|---|
上升沿捕获 | 信号从0→1时,锁存CNT值并触发中断。 |
下降沿捕获 | 信号从1→0时,锁存CNT值并触发中断。 |
双边沿捕获 | 任一沿跳变均触发(需硬件支持)。 |
频率计算 | f = F_CNT / (t2 - t1) (需处理溢出)。 |
通过合理配置边沿极性、滤波和中断,可精准捕获外部信号频率!
定时器的定时范围及级联扩展方法
一、单个定时器的定时范围
定时器的最大定时时间由以下因素决定:
- 计数器位数(如16位/32位)
- 时钟频率(( F_{CLK} ))
- 预分频系数(( 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. 软件级联(中断计数)
若硬件不支持级联,可通过中断手动扩展:
- 主定时器每溢出一次,中断中让全局变量
overflow_cnt++
。 - 总时间 = ( 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
}
五、关键注意事项
- 硬件级联限制:
- 需查阅手册确认定时器间的触发线路(如STM32中TIM2可触发TIM3,但TIM1不能触发TIM2)。
- 中断优先级:
- 软件级联时,主定时器中断优先级应高于从定时器。
- 计数器对齐:
- 硬件级联需确保主从定时器的时钟同步(如均使用内部时钟)。
六、总结
定时器类型 | 最大定时范围(72MHz时钟) | 级联后扩展范围 |
---|---|---|
16位定时器 | 59.65s | 约11分钟(硬件级联) |
32位定时器 | 4.5天 | 理论无限(需软件辅助) |
双16位级联 | - | 可达数小时(中断计数) |
通过级联设计,可灵活满足从微秒到数天的定时需求!