在《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寄存器可以改变占空比。