客製化PWM
这里所说的客製化PWM指的就是我们可以输出任何想要的方波波形,例如输出10个完整的波后停止输出,或着是输出10个波的循环,而在一个循环内,每个波的工作週期递增(0%、10%、20%...)。我们接下来就来实作看看这两个吧~
输出10个波后停止输出丝路:用一个变数来记录现在输出几个波,再利用PWM的中断功能,在一个周期内,波从高电位变低电位的时候进入中断,把变数加一,只要大于我们指定的数就停止输出。
先来介绍PWM中断函式
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)
duty cycle递增的10个波