
導語“使用STM32CubeMx配置定時器輸出PWM波,生成初始化代碼。”
?硬件
(資料圖)
野火指南者
?軟件
CubeMx & MDK & 邏輯分析儀
本次教程是使用定時器的PWM功能,通過PWM控制來實現LED燈的亮暗變化。
我們通過第一個教程LED,知道LED綠燈是通過PB0引腳控制的。我們在LED項目的基礎上進行配置。
我們使用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
配置好上述之后就可以生成代碼了。
我們將生成的項目文件打開,
在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的整數。
標簽: