主题 | 内容 | 教学目的/扩展视频 |
---|---|---|
TIM定时器重点课程 |
定时器,捕获器,比较器,PWM,单脉冲。高级TIM。定时器中断。 | 了解TIM使用 |
师从洋桃电子,杜洋老师
定时周期计算公式:
T = \frac{(ARR+1) \times (PSC+1)}{F_{CLK}}
功能类型 | 触发机制 | 典型应用场景 | 关键寄存器 |
---|---|---|---|
普通定时 | 计数器溢出触发 | 系统心跳/延时控制 | TIMx_ARR, TIMx_PSC |
输入捕获 | 边沿触发捕获 | 脉冲宽度/频率测量 | TIMx_CCR, TIMx_SR |
输出比较/PWM | 比较匹配触发 | 电机控制/LED调光 | TIMx_CCMR, TIMx_CCER |
graph LR
A[信号输入] --> B{边沿检测}
B -->|上升沿| C[记录T1]
B -->|下降沿| D[记录T2]
D --> E[脉宽=T2-T1]
C -->|周期测量| F[记录T3]
F --> G[频率=1/(T3-T1)]
模式类型 | 波形特点 | 适用场景 |
---|---|---|
边沿对齐 | 固定频率可变占空比 | LED调光 |
中央对齐 | 对称波形减少谐波 | 电机驱动 |
互补输出 | 带死区控制的互补信号 | H桥电路 |
// 定时器初始化示例
TIM_TimeBaseInitTypeDef TIM_InitStruct;
TIM_InitStruct.TIM_Period = 9999; // 1秒周期
TIM_InitStruct.TIM_Prescaler = 7199; // 7200分频
TIM_InitStruct.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM3, &TIM_InitStruct);
// 中断服务函数示例
void TIM3_IRQHandler(void) {
if(TIM_GetITStatus(TIM3, TIM_IT_Update)) {
GPIO_WriteBit(LED_PORT, LED_PIN, !GPIO_ReadOutputDataBit(LED_PORT, LED_PIN));
TIM_ClearITPendingBit(TIM3, TIM_IT_Update);
}
}
优化方向 | 实施方法 | 效果提升 |
---|---|---|
中断效率 | 使用DMA替代中断 | 减少CPU负载 |
精度提升 | 启用重复计数器 | 扩展定时范围 |
功耗控制 | 动态调整预分频值 | 平衡性能与功耗 |
Q1:定时器中断响应不及时?
Q2:PWM输出频率偏差大?
Q3:输入捕获值跳变异常?
寄存器 | 功能描述 | 访问方式 |
---|---|---|
TIMx_CR1 | 控制寄存器1 | 读写 |
TIMx_SMCR | 从模式控制寄存器 | 特殊配置 |
TIMx_DIER | DMA/中断使能寄存器 | 事件控制 |
TIMx_CCMR1/2 | 捕获/比较模式寄存器 | 通道配置 |
[1] 洋桃电子B站课程-STM32入门100步
[2] STM32官方文档手册
[3] STM32F103固件函数库用户手册(中文)
[4] 定时器中断测试程序
[5] 定时器原理与应用.pptx
下期预告:下一期将探讨CRC与芯片ID原理,欢迎持续关注!
点击查阅往期【STM32专栏】文章
版权声明:本文采用[CC BY-NC-SA 4.0]协议,转载请注明来源
实测开发版:洋桃1号开发版(基于STM32F103C8T6)
更新日志:
- v1.0 初始版本(2025-04-08)