上篇文章用通用定时器实现了LED灯的闪烁,这次用通用定时器来产生PWM波,使LED呈现呼吸灯的效果。
一、PWM相关知识
脉冲宽度调制(PWM),是英文“Pulse Width Modulation”的缩写,简称脉宽调制。
为了使STM32的TIMx生成PWM输出,除了基本的寄存器设置外,还需要使用三个主要寄存器:捕获/比较模式寄存器(TIMx_CCMR1/2)、捕获/比较使能寄存器(TIMx_CCER)和捕获/比较寄存器(TIMx_CCR1~4)。下面是这些寄存器的简要介绍:
-
捕获/比较模式寄存器(TIMx_CCMR1/2):
- TIMx_CCMR1控制CH1和CH2,TIMx_CCMR2控制CH3和CH4。
- 模式设置位OCxM决定PWM模式,设置为110或111。
-
捕获/比较使能寄存器(TIMx_CCER):
- 控制各输入输出通道的开关。我们使用CC2E位来使能PWM输出。
-
捕获/比较寄存器(TIMx_CCR1~4):
- 这些寄存器的值与CNT的值比较,通过修改这些寄存器的值来控制PWM输出的脉宽。本实验使用TIM3的CH2,所以修改TIM3_CCR2实现PWM输出控制。
由于LED0连接在PB5引脚上,而TIM3_CH2默认连接在PA7上,所以要通过重映射功能将TIM3_CH2映射到PB5。STM32的重映射功能由AFIO_MAPR寄存器控制,需要设置TIM3_REMAP[1:0]为10,实现部分重映射。
二、代码相关
我们使用通用定时器TIM3模块来