1. TIM 是什么?
- TIM = Timer 定时器外设
- STM32 内部有很多定时器,比如 TIM1、TIM2、TIM3 …
- 它们本质上是一个 计数器 + 控制逻辑,可以按设定的时钟源和分频值计数。
TIM 的主要作用:
-
定时中断
- 比如每 1ms 触发一次中断,用于任务调度、按键扫描。
- (类似操作系统的“时钟节拍”)。
-
输出 PWM
- 用于电机调速、LED 灯调光。
-
输入捕获
- 捕获外部信号的高电平/低电平时间,用来测量频率/占空比(如超声波测距)。
-
编码器接口
- 可以直接读取旋转编码器的脉冲,实现转角/速度测量。
2. TIM1 是什么?
-
STM32 有多个定时器,其中:
- TIM1 和 TIM8 → 高级定时器(支持互补 PWM、死区控制,常用于电机控制)。
- TIM2 ~ TIM5 → 通用定时器。
- TIM6、TIM7 → 基本定时器(只有中断功能,没有通道)。
👉 所以 TIM1 是一个高级定时器,功能最强大。
3. Channel(通道)是什么?
- 定时器往往有多个 通道(Channel),每个通道可以独立配置模式。
- 例如 TIM1 有 4 个通道:Channel 1、2、3、4。
通道的作用:
-
PWM 输出模式
- 一个定时器可以同时输出多个 PWM 信号(比如四路 LED 调光)。
- TIM1_CH1 可以输出 PWM1,TIM1_CH2 可以输出 PWM2 …
-
输入捕获模式
- 不同通道可以接不同的输入信号,测量多个外部脉冲。
-
比较输出模式
- 定时器计数到某个值时,让通道输出一个翻转脉冲。
4. 举个例子(PWM)
假设我们用 TIM1 的 Channel 1 产生一个 1kHz 的 PWM,50% 占空比。
- TIM1 作为计数器,决定 PWM 的频率。
- Channel 1 决定这个通道的 占空比 和输出波形。
- 引脚:在 STM32 芯片里,
TIM1_CH1对应某个 GPIO(如 PA8)。配置成复用功能后,就能在该引脚输出 PWM 波形。
代码示例(HAL 库):
// 配置 TIM1
htim1.Instance = TIM1;
htim1.Init.Prescaler = 72-1; // 分频,1 MHz 计数
htim1.Init.Period = 1000-1; // 自动重装载,1 kHz PWM
HAL_TIM_PWM_Init(&htim1);
// 配置 Channel 1
sConfigOC.OCMode = TIM_OCMODE_PWM1;
sConfigOC.Pulse = 500; // 占空比 = 500/1000 = 50%
sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_1);
// 启动 PWM
HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1);
👉 PA8 引脚就会输出 1kHz、50% 占空比的 PWM 波形。
5. 总结
- TIM:定时器外设,用来计数,可以做定时中断、PWM、捕获等。
- TIM1:STM32 的高级定时器,功能最强,常用于电机控制。
- Channel(通道):定时器的“子通道”,可以独立输出 PWM 或做输入捕获。
- TIM1_CH1:就是 TIM1 的第一个通道,可以单独配置(比如输出 PWM 到某个引脚)。
501

被折叠的 条评论
为什么被折叠?



