【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个波
    待完成...

<<:  【Day20】:Servo控制-By PWM输出

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

Day 11 AWS云端实作起手式第一弹 开始拼拼图吧

走了1/3天的服务介绍,现在让我们尝试把各项服务串起来看看吧! 接下来几天,我们会透过AWS云端服务...

ASP.NET MVC 从入门到放弃(Day9) -C# nwe 建构子 static 介绍

接着来讲讲new 建构值部分.... public class Yaowen { public Ya...

Day 33 打包-ios (部分)

昨天说的是 Android 今天我们来聊聊如何打包 ios, 但因为没有开发帐号,所以就只说 rea...

虾皮串接实作笔记-Create App 建立串接帐号

前言 目标:串接虾皮订单、标签资讯,目前串接虾皮 OpenAPI 2.0 版本(串接手册) 前面已经...

让按钮来个酷动态!操纵DOM事件:JavaScript篇 (二)

上一篇整理了 JavaScript 操纵网页元件事件的基本流程: 指定网页元件,可用 getElem...