STM32的通用定时器和高级定时器都能产生PWM信号,其中每个高级定时器可以产生7路的PWM(有3对是可以互补的),每个通用定时器都能产生4路PWM,这样算下来,STM32f103系列最多能产生30路PWM。
其实用库函数配置STM32并不难,可以很容易就生成PWM信号,但是如果想要了解深入一些,至少要大概知道某些比较重要的参数是由哪几个寄存器控制,这样其实在项目开发中调试起来也要有头绪一些。
这里就用高级定时器TIM1举例,产生一组互补带死区的PWM信号,如果高级定时器弄清楚了通用定时器更就不在话下了。为了便于总结,我事先写好了一个程序,用KEIL软件进行调试,然后看寄存器的值,这样更直观一些。从这个图上可以看出高级定时器一共有20个寄存器,其中CCMR1_Output和CCMR1_Input是一个寄存器,CCMR2_Output和CCMR2_Input是一个寄存器,这里只是分开表示。
ARR(auto-reload register)自动重装载寄存器,当定时器的时钟开启时这个值就默认为0xFFFF,图里的0x000004AF是程序里配置的,一个PWM脉冲周期为1200(这个1200只是一个计数值,不是实际的时间值)
PSC(prescaler)预分频寄存器,存储的是预分频值,这里分频值为3
PWM的频率为72M/(1200*3)=20KHz
CCMR1(Capture/Comprare