這裡所說的客製化PWM指的就是我們可以輸出任何想要的方波波形,例如輸出10個完整的波後停止輸出,或著是輸出10個波的循環,而在一個循環內,每個波的工作週期遞增(0%、10%、20%...)。我們接下來就來實作看看這兩個吧~
void HAL_TIM_PWM_PulseFinishedCallback(TIM_HandleTypeDef *htim) {
}
這個函式一樣在tim.c檔當中以若定義的形式定義過了,我們可以直接複製到main.c檔當中重新定義。
完整的程式如下:
/* USER CODE BEGIN 4 */
int pulse = 5;
int count = 0;
void HAL_TIM_PWM_PulseFinishedCallback(TIM_HandleTypeDef *htim) {
if (++count == pulse) {
count = 0;
HAL_TIM_PWM_Stop_IT(&htim2, TIM_CHANNEL_1);
}
}
/* USER CODE END 4 */
在main當中啟動PWM輸出
HAL_TIM_PWM_Start_IT(&htim2, TIM_CHANNEL_1);
while (1) {
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
這是一個經過巧妙設計的中斷函式,這裡個count要用前置++才可以喔!我們只要更改pulse的值就可以改變輸出波的數量。
這裡的HAL_TIM_PWM_Stop_IT()可以停止PWM的輸出
同樣的,我們一開始要啟用這個函式但是由於我們是啟用中斷版本的PWM輸出,函式為以下這個
HAL_TIM_PWM_Start_IT(TIM_HandleTypeDef *htim, uint32_t Channel)