STM32CubeMx入門教程(4):PWM應用

2023-07-11 16:09:46 來源:嵌入式開發始站

導語“使用STM32CubeMx配置定時器輸出PWM波,生成初始化代碼。”

第一節 系統要求

?硬件


(資料圖)

野火指南者

?軟件

CubeMx & MDK & 邏輯分析儀

本次教程是使用定時器的PWM功能,通過PWM控制來實現LED燈的亮暗變化。

我們通過第一個教程LED,知道LED綠燈是通過PB0引腳控制的。我們在LED項目的基礎上進行配置。

第二節 CubeMx配置

我們使用LED-綠色燈對應的是PB0 引腳,因此使用TIM3的通道3作為PWM波輸出。

(1)定時器的時鐘周期是72MHz,

prescaler:7-1,Period:1000-1, 因此定時器的頻率:

f:72MHz/( prescaler+1)/( Period+1)=10.286KHz。周期T:0.0972S;

(2)占空比=(Pulse/Period);

(3)導通的時間:(Pulse/Period)T=(567/1000)0.0972S

配置好上述之后就可以生成代碼了。

第三節 MDK代碼編寫

我們將生成的項目文件打開,

在main.c文件中申明占空比設置函數,和定義變量。

/* USER CODE BEGIN 0 */void user_pwm_set_value(TIM_HandleTypeDef *htim,uint16_t value,uint32_t Channel);uint16_t pwm_val=0;  // 占空比 0-100 的隨意值。uint16_t period =10;  // period /100 轉化為0-100的占空比,period=1000/* USER CODE END 0 */

在main主函數中打開定時器產生PWM

/* USER CODE BEGIN 2 */  HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_3);  /* USER CODE END 2 */

在主函數的while中添加代碼

// 代碼開始從這兒寫:  while(pwm_val<=< span="" >100){    pwm_val++;    user_pwm_set_value(&htim3,pwm_val,TIM_CHANNEL_3);    HAL_Delay(10);     }    while(pwm_val){       pwm_val--;       user_pwm_set_value(&htim3,pwm_val,TIM_CHANNEL_3);       HAL_Delay(10);         }

在main.c 文件的自定義代碼4 中添加修改占空的函數

/* USER CODE BEGIN 4 */void user_pwm_set_value(TIM_HandleTypeDef *htim,uint16_t value,uint32_t Channel){                  TIM_OC_InitTypeDef sConfigOC;    sConfigOC.OCMode = TIM_OCMODE_PWM1;    sConfigOC.Pulse = 10*value;    sConfigOC.OCPolarity = TIM_OCPOLARITY_LOW;    sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;    HAL_TIM_PWM_ConfigChannel(htim, &sConfigOC, Channel);              HAL_TIM_PWM_Start(htim, Channel);  // 修改后啟動PWM是必須的函數}/* USER CODE END 4 */

編譯程序,下載到開發板中。

第四節 效果演示

有一段視頻顯示效果。

定時器的周期通過邏輯分析儀進行抓取分析如下:

總結:(1) CubeMx的配置很簡單,完成定時器的時鐘源選擇,PWM波的通道選擇,定時周期計算公式配置定時器參數。PWM通道的參數主要有初始化的Pulse,PWM模式。

(2) 在應用程序中需要完成定時器的開啟,HALTIMPWMStart(&htim3, TIMCHANNEL3);PWM占空比的配置HALTIMPWMConfigChannel(htim, &sConfigOC, Channel);

HALTIMPWM_Start(htim, Channel); // 修改后啟動PWM是必須的函數

使用了 TIMOCInitTypeDef結構體進行參數的配置。

(3)通過轉換,將占空比轉為0-100的整數。

標簽:

上一篇:STM32CubeMx入門教程(5):ADC應用
下一篇:最后一頁