【stm32】hal库学习笔记--定时器输出PWM波

news/2024/5/10 15:12:38

【stm32】hal库学习笔记–定时器输出PWM波

PWM波原理

在这里插入图片描述

输出比较

在这里插入图片描述

输入捕获

在这里插入图片描述

驱动函数

定时器驱动函数

在这里插入图片描述

PWM波驱动函数

在这里插入图片描述
定时器基本不使用DMA方式

定时器中断处理通用函数

HAL_TIM_IRQHandler

实验一:输出固定占空比PWM波

时钟树配置
在这里插入图片描述
PF9 改为tim14CH1
tim14配置
在这里插入图片描述
开启tim14全局中断 更改中断优先级
在这里插入图片描述

  /* USER CODE BEGIN 2 */lcd_init();HAL_TIM_Base_Start_IT(&htim14);HAL_TIM_PWM_Start_IT(&htim14, TIM_CHANNEL_1);/* USER CODE END 2 */

输出可变占空比PWM波

在这里插入图片描述

编写tim.c程序

/* USER CODE BEGIN 0 */
uint8_t pulseChangeDirection = 1;
uint16_t pulseWidth = 50;
/* USER CODE END 0 */
void HAL_TIM_PWM_PulseFinishedCallback(TIM_HandleTypeDef *htim) {if (htim->Instance != TIM14) {return;}if (pulseChangeDirection) {pulseWidth++;if (pulseWidth >= 95) {pulseWidth = 95;pulseChangeDirection = 0;}} else {pulseWidth--;if (pulseWidth <= 5) {pulseWidth = 5;pulseChangeDirection = 1;}}__HAL_TIM_SET_COMPARE(&htim14, TIM_CHANNEL_1, pulseWidth);
}

实验二:输出比较

在这里插入图片描述

定时器配置

在这里插入图片描述

测量PWM波的脉宽和周期

时钟树配置
在这里插入图片描述定时器tim14设置
在这里插入图片描述
在这里插入图片描述
定时器tim9设置
在这里插入图片描述
打开tim9中断

在这里插入图片描述

程序编写

/* USER CODE BEGIN Includes */
#include "lcd.h"
#include "keyled.h"
#include <stdio.h>
/* USER CODE END Includes */
  /* USER CODE BEGIN 2 */lcd_init();lcd_show_str(0, 0,   16, "Demo10_3:PWM Input", RED);lcd_show_str(0, 20,  16, "TIM14 generate PWM on PF9(LED1)", RED);lcd_show_str(0, 40,  16, "TIM9 measure PWM on PE5", RED);lcd_show_str(0, 60,  16, "Please connect PE5 and PF9 by line", RED);lcd_show_str(0, 80,  16, "[1]KeyLeft to decrease pulse width", RED);lcd_show_str(0, 100, 16, "[2]KeyRight to increase pulse width", RED);HAL_TIM_Base_Start(&htim14);HAL_TIM_Base_Start(&htim9);HAL_TIM_IC_Start_IT(&htim9, TIM_CHANNEL_1);HAL_TIM_IC_Start_IT(&htim9, TIM_CHANNEL_2);HAL_TIMEx_PWMN_Start(&htim14, TIM_CHANNEL_1);/* USER CODE END 2 *//* Infinite loop *//* USER CODE BEGIN WHILE */while (1){KEYS curKey = ScanPressedKey(KEY_WAIT_ALWAYS);uint32_t CCR = __HAL_TIM_GET_COMPARE(&htim14, TIM_CHANNEL_1);if (curKey == KEY_LEFT) {__HAL_TIM_SET_COMPARE(&htim14, TIM_CHANNEL_1, CCR - 5);} else if (curKey == KEY_RIGHT) {__HAL_TIM_SET_COMPARE(&htim14, TIM_CHANNEL_1, CCR + 5);}HAL_Delay(300);/* USER CODE END WHILE */
/* USER CODE BEGIN 4 */
void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim) {uint16_t IC1_Width = __HAL_TIM_GET_COMPARE(&htim9, TIM_CHANNEL_1);uint16_t IC2_Pulse = __HAL_TIM_GET_COMPARE(&htim9, TIM_CHANNEL_2);if ((IC1_Width == 0) || (IC2_Pulse == 0)) {return;}char str[40];sprintf(str, "PWM width = %d", IC1_Width);lcd_show_str(0, 120, 16, str, RED);sprintf(str, "Pulse width = %d", IC2_Pulse);lcd_show_str(0, 140, 16, str, RED);}
/* USER CODE END 4 */

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.cpky.cn/p/10458.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

云计算、区块链、大数据之间的关系与特点

云计算、区块链和大数据是当前信息技术领域的热门话题&#xff0c;它们之间有一定的联系和共同点&#xff0c;同时也有不同的特点。 云计算&#xff08;Cloud Computing&#xff09; 是一种基于互联网的计算模式&#xff0c;通过网络提供可按需使用、可扩展和可配置的计算资源…

20240312-2-贪心算法

贪心算法 是每次只考虑当前最优&#xff0c;目标证明每次是考虑当前最优能够达到局部最优&#xff0c;这就是贪心的思想&#xff0c;一般情况下贪心和排序一起出现&#xff0c;都是先根据条件进行排序&#xff0c;之后基于贪心策略得到最优结果。 面试的时候面试官一般不会出贪…

SingleSpa微前端基本使用以及原理

先说说singleSpa的缺点 不够灵活 不能动态加载css文件css不隔离没有js沙箱的机制 ( 没有全局对象 每次切换的应用 都是同一个window ) 但是刚刚接触微前端 可以了解一下微前端的基础使用 qiankun微前端框架已经很成熟 也是基于singleSpa来实现的 点击跳转qiankun的基础使用 大…

MySQL 面试题及答案整理,最新面试题

MySQL中InnoDB和MyISAM存储引擎的区别是什么&#xff1f; InnoDB和MyISAM是MySQL中两种常见的存储引擎&#xff0c;它们的主要区别包括&#xff1a; 1、事务支持&#xff1a; InnoDB支持事务&#xff0c;而MyISAM不支持。 2、行级锁和表级锁&#xff1a; InnoDB提供行级锁&a…

数学建模-模糊性综合评价模型

中医药是中国传统文化的重要组成部分&#xff0c;凝聚了中华民族千百年来智慧的结晶。作为中医的发源地&#xff0c;中国政府一直致力于保护、发展和推广中医药&#xff0c;采取了一系列政策措施[]。目前&#xff0c;中国面临着老龄化日益加剧&#xff0c;老年人群中慢性疾病和…

AI + Science :科学研究新范式

AI 发展七十余年&#xff0c;每一技术性突破都将给人类未来开辟新一种可能性。而它与科学研究的深度融合&#xff0c;则会裂变出无数或无穷种可能性。 正文&#xff1a; 万众瞩目下&#xff0c;今年 10 月&#xff0c;有着诺贝尔奖 “嫡传” 之称的诺贝尔化学奖终于揭晓&#x…