stm32定时器与pwm波

news2024/11/18 10:25:39

文章目录

  • 4 TIM
    • 4.1 SysTick系统定时器
    • 4.2 TIM定时器中断与微秒级延时
    • 4.3 TIM使用PWM波
      • 4.3.1 PWM介绍
      • 4.3.2 无源蜂鸣器实现
    • 4.4 TIM ,PWM常用函数

4 TIM

4.1 SysTick系统定时器

​ Systick系统滴答,(同时他有属于自己的中断,可以利用它来做看门狗):一般是一个24位的向下递减的计数器,一个时钟周期减1,减少到0时,触发中断。大小是从0~2的24次方-1。它的作用是用来做分时调动,维持os系统心跳,确定时间等,甚至有自己的中断SysTick_Hander,因为它的上限是24位的,所以对应的时钟的频率最高是16Mhz,主频如果超过它了,那就无法实现秒级延迟了,但是可以实现毫秒级延迟。Systick的赋值我们一般取HCLK时钟。所有时钟的来源最终都来源于内部RC震荡电路或者外部晶振。SysTick也不例外。

TIM计时器模型:

在这里插入图片描述

  1. 是RCC给该计时器的时钟源,通过时钟树配置。
  2. PSC预分频器,会将时钟源频率分成n+1份(因为是从0开始的),所以假如需要分成80份,那么要写80-1。
  3. CK_CNT:这个寄存器中存放着当前计数的值。
  4. ARR:即自动重装载计数器。

**TIM寄存器:**一般有四种寄存器

  1. 控制状态寄存器(CTRL):

    位段名称可读写类型复位值描述
    16COUNTFLAGR0主要是用来防止多读和误读。如果在上次读取本寄存器后,SysTick已经数到了0,则该位置设置为1,如果读取该位,该位将自动清零。
    2CLKSOURCER/W0时钟源的选择寄存器: 0=外部时钟源 (STCLK) 1=内部时钟源 (FCLK)
    1TICKINTR/W0即是否产生异常请求: 1=倒数到0时产生SysTick异常请求 0=数到0时无动作。
    0ENABLER/W0使能位,即SysTick定时器是否使能。
  2. 装载和重装载寄存器

    位段名称可读写类型复位值描述
    23:0RELOADR/W0当倒数至0时,将被重装载的值
    影子寄存器LOADR/W-RELOAD被重装载的值就在这里存储
  3. 当前数字寄存器(VAL):

    位段名称可读写类型复位值描述
    23:0CURRENTR/Wc0读取时返回当前倒计时的值,读取没有问题,但当写它则使之清零,同时还会清除在Systick控制及状态寄存器中的COUNTFLAG标志
  4. 校准数值寄存器(CALIB)

    位段名称可读写类型复位值描述
    31NOREFR-1=没有外部参考时钟(即不可用) 0=外部参考时钟可用
    30SKEWR-1=校准值不是准确的10ms 0=校准值准确的10ms
    23:0TENMSR/W00=无法使用校准功能 >0倒计数的格数

4.2 TIM定时器中断与微秒级延时

  • 通用定时器:只有定时功能,一般16位(0~65535)。
  • 高级定时器:除了定时功能,还有PWM功能。以及DAC为DMA提供时钟的功能。

计数器模式:有如上三种模式,使用定时器时有一些常用的参数如下:

  • PSC:分频器。
  • ARR:自动装载值,到这个值就触发自动重装载,即恢复到初始值。
  • 当前的值存放在CURRENT寄存器中。

微秒级延时实现:

​ 实现原理:例如80Mhz的工作频率,意味着1s中跳动了80M次,我们先使用分频器将定时器的工作频率分为80份,也就是1Mhz,那么对应的1hz就是1us。接下来我们基于这个原理来是实现它。

在这里插入图片描述

//如上,将PSC分频率器设置为80-1,由于计时器是16位的,所以滴答范围是0~65535.共65536个滴答,下面我们通过代码来实现。(tim是up模式)
void delay_us(uint16_t us)
{
  if (us>60000)
	{
		return ;
	}
  
	uint16_t				differ=60000-us;
	
	HAL_TIM_Base_Start(&htim6);
	
	__HAL_TIM_SET_COUNTER(&htim6, differ);
	
	while(differ<60000)
	{
		differ = __HAL_TIM_GET_COUNTER(&htim6);
	}
	
	HAL_TIM_Base_Stop(&htim6);
	
	return ;
}

//之后修改tim.h头文件,添加extern void delay_us(uint16_t us);

4.3 TIM使用PWM波

4.3.1 PWM介绍

​ 定时器除了定时以外,还能够产生PWM波。首先我们先来介绍一下PWM波。即脉冲宽度调制Pulse-width modulation)。pwm波可以简单理解为可以调试占空比的方波。占空比(即脉宽时间占整个周期的比例),整个周期就是一个脉冲信号的时间,而脉宽时间就是高电平的时间。PWM波可以用来模拟不同的输出电压。其原理就是通过不同的占空比比例实现D/A转化。

在这里插入图片描述

  • ARR:自动装载值。

  • CRR:决定了占空比,PWM波从CRR处电平反转。

4.3.2 无源蜂鸣器实现

​ 首先我们先明白有源蜂鸣器和无源蜂鸣器的区别,这个“源”指的是震荡源,所以:

  • 有源蜂鸣器内部带震荡源,所以只要一通电(给高电平或低电平)就会叫,即电平触发;
  • 而无源蜂鸣器内部不带震荡源,直流信号无法令其鸣叫,必须用 2K~5K 的方波去驱动它;

​ 无源蜂鸣器配置:

在这里插入图片描述

  1. 配置预分频:TIM2 的输入时钟为 APB1 时钟 80MHz,这个速率对定时器来说实在太快,
    这时需要对它做个预分频:CK_CNT = TIMxCLK/(PSC+1)=80MHz/(80-1+1)=1MHz;
  2. 配置 PWM 时钟:通过 TIM2 定时器的 ARR(自动重装载寄存)的值可以调整 PWM 的输出。
    频率,这里想让蜂鸣器工作在 2.7KHz,则:ARR=1MHz/2700 ~= 370。
  3. 配置占空比: 这里我们设置占空比为 50%,则 Pulse=370/2=185。

PWM波蜂鸣器实现:找到蜂鸣器对应的引脚的TIM的通道,我这里是TIM1的CHANNEL_4

//buzzer.h文件
#ifndef __BUZZER_H__
#define __BUZZER_H__
#include "tim.h"

extern void beep_start(uint8_t times, uint16_t interval);
#endif

//buzzer.c文件
#include "buzzer.h"

void beep_start(uint8_t times, uint16_t interval)
{
	while(times--)
	{
		if (HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_4) != HAL_OK)
		{
			Error_Handler();
		}
		HAL_Delay(interval);
		
		if (HAL_TIM_PWM_Stop(&htim1, TIM_CHANNEL_4) != HAL_OK)
		{
			Error_Handler();
		}	
		HAL_Delay(interval);
	}
}

4.4 TIM ,PWM常用函数

//启动计时器tim1
HAL_TIM_Base_Start(&htim1);

//设置/获取COUNTER寄存器中的值
__HAL_TIM_SET_COUNTER(&htim1, differ);
__HAL_TIM_GET_COUNTER(&htim1);

//停止计时器tim1
HAL_TIM_Base_Stop(&htim1);

//启动PWM波型输出(定时器1的通道4),若成功返回HAL_OK
HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_4)
    
//关闭PWM波形输出(定时器1的通道4),若成功返回HAL_OK
HAL_TIM_PWM_Stop(&htim1, TIM_CHANNEL_4)

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

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

相关文章

OceanMind海睿思成功举办“数据要素×人工智能” 研讨会,荣获上海数交所授牌

近日&#xff0c;由南京东南人工智能产业链供应链创新链党建联盟、上海数据交易所主办&#xff0c;中新赛克承办的“数据要素人工智能”行业应用研讨会在南京成功举办。 本次活动是东南人工智能产业链供应链创新链党建联盟2024年度“人工智能人才服务行动项目”第二期活动。会议…

环境检测聚四氟乙烯微波消解罐 特氟龙反应釜 适用于COD测定

COD消解罐是实验室中用于测定水样中化学需氧量&#xff08;Chemical Oxygen Demand&#xff0c;简称COD&#xff09;的一种专用设备。化学需氧量是衡量水体污染程度的一个重要参数&#xff0c;它表示在一定条件下&#xff0c;水样中的有机物质和部分无机物质被氧化的程度。以下…

linux——小细节(Makefile)(gdb)

一、makefile a.out:main.c func.cgcc main.c func.cclean:rm a.out a.out:main.c func.cgcc $^ -o $clean:rm a.out SRCmain.c func.c OBJa.out CCgcc FLAG -g -lpthread $(OBJ):$(SRC)$(CC) $(SRC) $(FLAG)clean:rm $(OBJ) 二、gdb

玩客云刷Armbian安装docker、alist、OpenWrt、Aria2等教程及所需文件(内容详细)

这篇教程主要是本人在这里面踩的坑比较多&#xff0c;网上的教程很多&#xff0c;感觉都不太详细&#xff0c;分享一下自己的经验。 注意本教程的图片都是后期补的&#xff0c;可能与原文内容不符&#xff0c;仅供参考&#xff0c;图片里面会出现小雅&#xff0c;memos笔记&am…

记录第一次写脚本

使用csh语言&#xff0c;Linux系统操作的 写和执行csh&#xff08;C Shell&#xff09;脚本不需要额外的软件&#xff0c;只需要一个支持csh的终端环境。 1.检查是否安装了C Shell 在终端terminal运行以下命令 which csh 如果返回路径&#xff0c;比如/bin/csh&#xff0c…

昇思25天学习打卡营第17天|GAN图像生成

模型简介 GAN模型的核心在于提出了通过对抗过程来估计生成模型这一全新框架。在这个框架中&#xff0c;将会同时训练两个模型——捕捉数据分布的生成模型G和估计样本是否来自训练数据的判别模型D 。 在训练过程中&#xff0c;生成器会不断尝试通过生成更好的假图像来骗过判别…

怎么在表格后添加文字行行

Ctrl Shift 回车 解决方案 在表格末尾添加一行&#xff08;表格行&#xff09;。 &#xff08;此时光标应该默认在这个新行中&#xff0c;如果没有&#xff0c;自己手动点一下&#xff09; 按 Ctrl Shift 回车 将此行与前面的表格拆分开&#xff0c;中间会出现一个空文本行…

离散傅里叶变换(Discrete Fourier Transform,DFT)

离散傅里叶变换&#xff08;Discrete Fourier Transform&#xff0c;DFT&#xff09;是信号分析中的一种基本方法&#xff0c;它将离散时序信号从时间域变换到频率域&#xff0c;是傅里叶变换在时域和频域都呈现离散的形式。以下是关于离散傅里叶变换的详细介绍&#xff1a; 一…

尽量不写一行if...elseif...写出高质量可持续迭代的项目代码

背景 无论是前端代码还是后端代码&#xff0c;都存在着定位困难&#xff0c;不好抽离&#xff0c;改造困难的问题&#xff0c;造成代码开发越来越慢&#xff0c;此外因为代码耦合较高&#xff0c;总是出现改了一处地方&#xff0c;然后影响其他地方&#xff0c;要么就是要修改…

文本超长省略的几种方式(vue)

第一种&#xff0c;纯css 在给容器设置宽度后&#xff0c;使用css来省略文本超长部分&#xff0c;但是这样就看不到全部的内容 <template><div class"content"><div class"text">{{ text }}</div></div> </template>&…

ubuntu 安装说明

最近准备学习Linux&#xff0c;所以下载了最新的ubuntu server版本24.04&#xff0c;将安装步骤记录下来供参考。 1.安装 挂载光驱和iso文件&#xff0c;启动虚拟机。启动后&#xff0c;你会看到 GRUB 菜单上有两个选项&#xff1a; Try or Install Ubuntu Server 和 Test mem…

防水M7/8“航空法兰插座端子

防水M7/8"航空法兰插座广泛应用于传感器与执行器、电机马达、包装与传送系统、户外LED模块、轨道交通、船舶雷达与导航&#xff0c;以及现场总线DeviceNet与NMEA 2000开放型网络系统等应用领域。M7/8"插座作为一种常见的电气连接器件&#xff0c;在传感器领域中扮演着…

快手矩阵系统源码:技术优势解析

在短视频和直播行业迅猛发展的今天&#xff0c;快手凭借其强大的矩阵系统源码&#xff0c;为用户提供了多端管理、多账号管理、素材管理、视频批量上传、AI视频制作和定时发布等一系列高效功能。本文将深入探讨快手矩阵系统源码的多项优势&#xff0c;以及这些功能如何助力内容…

如何改善提示词,让 GPT-4 更高效准确地把视频内容整体转换成文章?

&#xff08;注&#xff1a;本文为小报童精选文章。已订阅小报童或加入知识星球「玉树芝兰」用户请勿重复付费&#xff09; 让我们来讨论一下大语言模型应用中的一个重要原则 ——「欲速则不达」。 作为一个自认为懒惰的人&#xff0c;我一直有一个愿望&#xff1a;完成视频制作…

气象观测站:观测和记录各种气象要素

在广袤无垠的蓝天下&#xff0c;气象观测站如同一个个静默的守护者&#xff0c;默默记录着风云变幻&#xff0c;守护着大地的安宁。 一、气象观测站&#xff1a;守护天空的“千里眼” 气象观测站&#xff0c;顾名思义&#xff0c;就是专门用于观测和记录各种气象要素的站点。它…

UVa1265/LA4848 Tour Belt

UVa1265/LA4848 Tour Belt 题目链接题意分析AC 代码 题目链接 本题是2010年icpc亚洲区域赛大田赛区的F题 题意 给出一个有n个结点m条边的加权无向图G&#xff08;2≤n≤5000&#xff0c;1≤m≤n(n-1)/2&#xff09;&#xff0c;满足如下条件的结点集B&#xff08;2≤|B|≤n&am…

2025深圳国际消费电子展览会

2025深圳国际消费电子展览会 时间&#xff1a;2025年06月25-27日 地点&#xff1a;深圳国际会展中心(新馆) 详询主办方陆先生 I38&#xff08;前三位&#xff09; I82I&#xff08;中间四位&#xff09; 9I72&#xff08;后面四位&#xff09; 展会介绍&#xff1a; 20…

SAP-SD同一物料下单价格确不同

业务说明&#xff1a; 业务部门反馈&#xff0c;同一物料下销售订单时&#xff0c;价格确不同。 那么这个价格是怎么取到的呢&#xff1f; 逻辑说明&#xff1a; 1、首先查看销售订单 可以看到相同物料价格是不同的&#xff0c;条件类型都是ZPR5&#xff0c;但是客户是不同…

【新能源时代!看大模型(LLMs)如何助力汽车自动驾驶!】

文末有福利&#xff01; 引言 本文主要介绍大模型(LLMs)如何助力汽车自动驾驶&#xff0c;简单来说&#xff0c;作者首先带大家了解大模型的工作模式&#xff0c;然后介绍了自动驾驶大模型的3大应用场景&#xff0c;最后指出自动驾驶大模型将会是未来的发展趋势&#xff0c;只…

View->裁剪框View的绘制,手势处理

XML文件 <?xml version"1.0" encoding"utf-8"?> <RelativeLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"match_parent"android:layout_height"match_parent"android…