原文來自:http://www.cnblogs.com/sankye/articles/2482912.html
一:配置TIM3的ARR寄存器和PSC寄存器,確定PWM頻率。
這里配置的這兩個定時器確定了PWM的頻率,我的理解是:PWM的周期(頻率)就是ARR寄存器值與PSC寄存器值相乘得來,但不是簡單意義上的相乘,例如要設置PWM的頻率參考上次通用定時器中設置溢出時間的算法,例如輸出100HZ頻率的PWM,首先,確定TIMx的時鍾,除非APB1的時鍾分頻數設置為1,否則通用定時器TIMx的時鍾是APB1時鍾的2倍,這時的TIMx時鍾為72MHz,用這個TIMx時鍾72MHz除以(PSC+1),得到定時器每隔多少秒漲一次,這里給PSC賦7199,計算得定時器每隔0.0001秒漲一次,即此時頻率為10KHz,再把這個值乘以(ARR+1)得出PWM頻率,假如ARR值為0,即0.0001*(0+1),則輸出PWM頻率為10KHz,再假如輸出頻率為100Hz的PWM,則將ARR寄存器設置為99即可。如果想調整PWM占空比精度,則只需降低PSC寄存器的值即可。
二:TIMx_CCRx寄存器,確定PWM的占空比。
TIMx_CCR1—TIMx_CCR4確定定時器的CH1—CH4四路PWM的占空比。直接給該寄存器賦0—65535值即可確定占空比。占空比計算方法:TIMx_CCRx的值除以ARR寄存器的值即為占空比,因為占空比在0—100%之間,所以一般TIMx_CCRx寄存器值不能超過ARR寄存器的值,否則可能會引起PWM的頻率或占空比的准確性。
TIM3 配置: 產生1路PWM信號;
TIM3CLK = 72 MHz, Prescaler = 0(不分頻), TIM3 counter clock = 72 MHz
計算公式:
PWM輸出頻率 = TIM3 counter clock /(ARR + 1)
我們期望設置為100Hz
如果不對TIM3CLK預分頻,那么不可能得到100Hz低頻。
我們設置分頻比(PSC) = 1000, 那么 TIM3 counter clock = 72KHz
TIM_Period = 720 - 1;
頻率下不來。
有關STM32 PWM輸出頻率固定,通過調整CRR捕獲比較寄存器的值,從而調整占空比控制LED燈的亮暗的例子: