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