首先配置RCC時鐘,使用外部晶振
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiAzNfRHLGZkRGZkRfJ3bs92YsYTMfVmepNHL1sGRNlXTU90dRpHW4Z0MMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnL1UjMwUTMwYTM3AzNwEjMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
然後配置時鐘樹,我的是stm32f429 最高支援180MHZ,我使用的是TIM5,TIM5挂載在APB1總線上定時器頻率為90MHZ
啟用内部時鐘,選擇通道輸出PWM
通道模式分别是:
輸入捕獲模式
輸出比較不輸出模式
輸出比較模式
PWM不輸出模式
PWM輸出模式
還有最下面的 Forced Output ,強制輸出模式
分頻配置
899+1分頻,可根據需要修改
因為我的TIM5在APB1總線上,對應頻率是90MHZ,那麼分頻後就是90MHZ/900=100KHZ;
模式可選向上/下計數,計數的頻率就是PSC分頻後的頻率,
向上計數是從0到設定的數,我這是99999,
向下計數是從設定的是減到0
我這裡是100KZH,
不使用内部時鐘分組
最後啟用自動重載
PWM輸出頻率=總線時鐘/(分頻因子+1)/(計數值+1)
Trigger Output (TRGO) Parameters
觸發輸出,這個我們不使用
PWM 通道配置
PWM模式,在同一計數方式下PWM1和PWM2輸出波形互補
Pulse 空占比 先預設0
fast mode 不使用
CH Polanty 通道預設電平,可根據實際情況選擇,
最後可選中斷使能,也可不選
使用這個啟用PWM 輸出
使用這個啟用PWM 中斷輸出
HAL_StatusTypeDef HAL_TIM_PWM_Start_IT(TIM_HandleTypeDef *htim, uint32_t Channel)
可使用這個改變空占比
空占比=COMPARE/(計數值+1)
關于中斷
·
在中斷處理函數中PWM的回調函數:HAL_TIM_PWM_PulseFinishedCallback(htim);
會在一個PWM周期中執行4次
這4次會在執行分别在:
PWM 上升沿時
PWM 高電平一半時
PWM 下降沿時
PWM 低電平一半時
這4次均為CC1-CC4中斷标志觸發