<pre name="code" class="plain">void TIM3_PWM_Init(u16 arr,u16 psc)
{
//1 开启TIM3时钟 配置PB5为复用输出
RCC->APB1ENR|=1<<1; //TIM3时钟使能
RCC->APB2ENR|=1<<3; //使能PORTB时钟
GPIOB->CRL&=0xff0fffff;
//2 设置TIM3_CH2重映射到PB5
GPIOB->CRL|=0x00b00000; //复用功能
RCC->APB2ENR|=1<<0; //开启辅助时钟
AFIO->MAPR&=0xfffff3ff; //清除MAPR的[11:10]
AFIO->MAPR|=1<<11; //部分重映像,TIM3_CH2->PB5
//3 设置TIM3的ARR和PSC
TIM3->ARR=arr;
TIM3->PSC=psc;
//4 设置TIM3_CH2的PWM模式
TIM3->CCMR1|=7<<12; //CH2 PWM2模式
TIM3->CCMR1|=1<<4; //CH2 预装载使能
//5 使能TIM3_CH2输出 使能TIM3
TIM3->CCER|=1<<4; //OC2输出使能
TIM3->CR1=0x0080; //ARPE 使能
TIM3->CR1|=0x01; //使能定时器
//6 修改TIM3_CCR2来控制占空比
}
控制PWM的三个寄存器:捕获/比较模式寄存器(TIMx_CCMR1/2)、捕获比较使能寄存器(TIMx_CCER)、捕获比较寄存器(TIMx_CCR1~4)。
TIMx_CCMR1中OCxM为模式设置位,由三位组成,可以配置7种模式,PWM模式必须设置位110/111。这两种PWM模式的区别就是输出电平的极性是反的。
TIMx_CCER控制着各个输入输出通道的开关。
TIMx_CCR1~4,对应着4个输通道CH1~CH4.
具体关于寄存器的内容,参考《STM32参考手册》。
STM32的重映射控制是由复用重映射和调试IO配置寄存器(AFIO_MAPR)控制的。
配置步骤:
1 开启TIM3时钟 配置PB5为复用输出
2 设置TIM3_CH2重映射到PB5
3 设置TIM3的ARR和PSC
4 设置TIM3_CH2的PWM模式
5 使能TIM3_CH2输出 使能TIM3
6 修改TIM3_CCR2来控制占空比
参考文献《原子教你玩STM32(寄存器版)》
参考程序:https://github.com/2012wowo/STM32-PWM/upload
更多精彩内容,欢迎关注【跟单片机谈恋爱】