定時器PWM波實驗
-
實驗說明
芯片:STM32F103RCT6
實驗內容:使用定時器2的通道1輸出PWM波控制LED燈的亮度。
-
實驗操作
-
1、基礎配置
1)sys中,選好調試方式,例如jtag-4pin。
2)RCC時鐘,晶振選擇。
3)時鐘樹配置。
4)中斷分組配置。
以上步驟可以參考之前的實驗。
2、外設配置—PWM波配置
本次實驗使用的是TIM2的通道1來輸出PWM波。
1) 如下圖打開TIM2功能配置視圖。
2)選擇時鐘,並且選擇通道1的PWM模式。
注意載芯片示意圖上 會看到下圖 PA0 就是TIM2 的通道1 PWM波輸出口。
3)配置PWM波的參數
上圖中需要理解兩個點,
PWM 的頻率 :
PWM模式和極性:
PWM模式1,在向上計數時,一旦TIMx_CNT < TIMx_CCR1(就是上圖中的6,計數比較值)。時通道1爲有效電平,否則爲無效電平;在向下計數時,一旦TIMx_CNT>TIMx_CCR1時通道1爲無效電平(OC1REF=0),否則爲有效電平(OC1REF=1)。
PWM模式2- 在向上計數時,一旦TIMx_CNT < TIMx_CCR1時通道1爲無效電平,否則爲有效電平;在向下計數時,一旦TIMx_CNT > TIMx_CCR1時通道1爲有效電平,否則爲無效電平
輸出比較極性的指的是你在比較匹配之後輸出口輸出的極性。 這個函數就是讓你設置有效極性,也就是設置比較輸出的有效電平。你可以設置爲高電平有效或者低電平有效。如果設置爲高電平有效,那麼當定時器比較匹配之後,輸出口輸出高電平,否則就反一下。
這裏我自己的理解是,如果是PWM模式1,且向上計數,如果極性設置爲低,那麼 TIMx_CNT < TIMx_CCR1 時,輸出低電平,更簡單就是佔空比爲1 – TIMx_CCR1/(ARR+1). 如果極性爲高,佔空比就是TIMx_CCR1/(ARR+1)。
4)、生成代碼
由於這裏不用中斷,所以不用配置中斷優先級。所以寫好工程的名字和路徑後,直接生成代碼即可。
5)在工程中開啓PWM
在完成以上設置之後,我們需要使能 TIM2 並且使能 TIM2_CH1 輸出。在 HAL 庫中,函數 HAL_TIM_PWM_Start 可以用來實現這兩個功能,函數聲明如下:
HAL_StatusTypeDef HAL_TIM_PWM_Start(TIM_HandleTypeDef *htim, uint32_t Channel);
該函數第二個入口參數 Channel 是用來設置要使能的通道號。
6)、修改佔空比
推薦使用寄存器的方式
TIMx->CCRx = NUM; (x爲數字。 NUM 爲一個數字 範圍0 - ARR)
7)、測試
下載程序,然後可以使用萬用表測試PA0口的電壓值,爲0.54~0.55V
(PWM模式1,極性爲高 所以佔空比爲 150/900 * 3.3 爲0.55V。