在《STM32F103定时器配置》中我们介绍了PWM
的产生原理,本节介绍介绍如何编码实现PWM
的输出。
一、PWM
相关寄存器
TIMx
如果要产生PWM
,除了我们上一节提到的如下寄存器:
- 控制寄存器(TIMx_CR1);
- DMA/中断使能寄存器(TIMx_DIER);
- 预分频寄存器(TIMx_PSC);
- 从模式控制寄存器(TIMx_SMCR);
- 自动重装载寄存器(TIMx_ARR);
- 状态寄存器(TIMx_SR);
还需要使用到:
- 捕获/比较模式寄存器(
TIMx_CCM1/2
); - 捕获/比较使能寄存器(
TIMx_CCER
); - 捕获/比较寄存器(
TIMx_CCR1~4
); - 刹车和死区寄存器(
TIMx_BDTR
)(只有高级定时器用到)。
1.1 捕获比较模式寄存器(TIMx_CCMR1/2
)
捕获/比较模式寄存器一共有两个:
-
TIMx_CCMR1
:控制通道1和2; -
TIMx_CCMR2
:控制通道3和4;
这里以 TIMx_CCM1
寄存器为例进行介绍:
1.2 捕获/比较使能寄存器(TIMx_CCER
)
TIMx_CCER
寄存器每4位描述一个通道;
其中:
-
CCxE
:输入/捕获x输出使能位,我们需要重点关注; -
CCxP
:输入/捕获x
输出极性。
1.3 捕获/比较寄存器(TIMx_CCR1~4
)
捕获/比较模式寄存器一共有4
个,依次用于描述每一个通道,这里以TIMx_CCR1
为例;
1.4 刹车和死区寄存器(TIMx_BDTR
)
TIMx_BDTR
寄存器需要重点关注位15
主输出使能位;
二、PWM
生成源码
2.1 PWM
初始化步骤
PWM
生成配置流程如下:
(1) TIMx
时钟使能:通过配置RCC_APB1ENR/RCC_APB2ENR
寄存器使能TIMx
时钟;
(2) GPIO
功能复用:配置GPIO
(比如TIM1
通道1
为PA8
)为复用功能推挽输出模式;
(3) 配置TIMx
时基单元;
- 配置
TIMx_ARR
寄存器自动重装载的值; - 配置
TIMx_PSC
频寄存器预分频系数;
(4) 配置PWM
相关寄存器;
- 配置
TIMx_CCMRx
寄存器:捕获/比较模式选择(CCxS
); - 配置
TIMx_CCRx
寄存器; - 配置
TIMx_CCER
寄存器CCxE
,输入捕获使能; - 设置
TIMx_BDTR
寄存器位15
,使能PWM
输出;
(5) 允许TIMx
工作:配置TIMx_CR1
位0
;
(6) 修改TIMx_CCRx
寄存器可以改变占空比。