【Day21】:客制化的PWM输出

客制化PWM

这里所说的客制化PWM指的就是我们可以输出任何想要的方波波形,例如输出10个完整的波後停止输出,或着是输出10个波的循环,而在一个循环内,每个波的工作周期递增(0%、10%、20%...)。我们接下来就来实作看看这两个吧~

  1. 输出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)
  1. duty cycle递增的10个波

<<:  【Day22】:旋转编码器—Encoder

>>:  Angular Stock Route Guards (Day31)

【Day 12】使用 Systems Manager 的 Parameter Store 保存变数

tags: 铁人赛 CodeBuild AWS SSM 前言 关於 Developer Tool -...

Ruby--Find the Difference

Find the Difference 题目连结:https://leetcode.com/pro...

[DAY3]建立容器(二)

昨天(DAY2)做的phpmyadmin出现问题登不进去,不过把错误讯息喂google爬了一圈并没有...

[Day 6] SRE - 起身对抗活在警报中的恶魔

警报疲乏 相信大家都听过「放羊的孩子」的伊索寓言故事。 今天我们探讨的问题是当团队中的警报器常常发生...

[想试试看JavaScript ] 事件物件

事件物件 事件物件很常跟事件处理一起配着使用 浏览器会主动收集和事件有关系的资讯,并制造出 Even...