STM32學習筆記之——PWM篇
- 1.PWM是什么?
- 占空比
- 2.stm32中pwm的例程,即呼吸燈程式,
- STM32CubeIDE配置
- 代碼
1.PWM是什么?
PWM——脈沖寬度調制,它是把每一脈沖寬度均相等的脈沖列作為PWM波形,通過改變脈沖列的周期可以調頻,改變脈沖的寬度或占空比可以調壓,采用適當控制方法即可使電壓與頻率協調變化,可以通過調整PWM的周期、PWM的占空比而達到控制充電電流的目的,
占空比
占空比是一個脈沖周期內,高電平的時間與整個周期的時間的比例,
2.stm32中pwm的例程,即呼吸燈程式,
本例程基于stm32f103rct6開發,所用的是STM32CubeIDE開發環境
STM32CubeIDE配置
第一步,打開RCC,設定高速時鐘源為外部晶振;

第二步,配置主頻,stm32f103的最高頻率為72MHZ,所以此處設成72MHZ即可;

第三步,打開TIM基本定時器,設定為內部時鐘(本例程所對應的LED燈引腳為PC7,所以我們需要將PC7設為PWM輸出),其中PSC為預分頻值,ARR為計數值,
此時需要通過改變PSC跟ARR的值來獲得PWM的頻率
就本例程而言,我們需要一個1000HZ的PWM頻率,計算方法如下:
F(PWM頻率) = 72MHz / ( (ARR + 1) * (PSC + 1) )
即主頻為72MHz,所以72MHz / 1000Hz = 72 000 000Hz / 1000Hz,所以我們只要將(ARR+1) * (PSC+1)的值等于72 000即可;

第四步,由于LED燈低電平有效,因此我們需要在CH Polarity中設為LOW,

代碼

此處附上可復制代碼片
/* USER CODE BEGIN 2 */
uint16_t PWM = 0;
HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_2);
/* USER CODE END 2 */
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
while(PWM<1000)
{
PWM++;
TIM3->CCR2 = PWM;
HAL_Delay(1);
}
while(PWM>0)
{
PWM--;
TIM3->CCR2 = PWM;
HAL_Delay(1);
}
HAL_Delay(100);
}
/* USER CODE END 3 */
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/57474.html
標籤:其他
