stm32定时器与pwm波

文章目录

  • 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.rhkb.cn/news/369116.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

RT-Thread Studio与CubeMX联合编程之rtthread stm32h743的使用(十一)spi设备SFUD驱动的使用

我们要在rtthread studio 开发环境中建立stm32h743xih6芯片的工程。我们使用一块stm32h743及fpga的核心板完成相关实验&#xff0c;核心板如图&#xff1a; 1.建立新工程&#xff0c;选择相应的芯片型号及debug引脚及调试器 2.编译下载&#xff0c;可以看到串口打印正常 3.…

Solo 开发者周刊 (第12期):连接独立开发者,共享开源智慧

这里会整合 Solo 社区每周推广内容、产品模块或活动投稿&#xff0c;每周五发布。在这期周刊中&#xff0c;我们将深入探讨开源软件产品的开发旅程&#xff0c;分享来自一线独立开发者的经验和见解。本杂志开源&#xff0c;欢迎投稿。 产品推荐 1、Soju————一个现代的书签…

完全理解C语言函数

文章目录 1.函数是什么2.C语言中的函数分类2.1 库函数2.1.1 如何使用库函数 2.2自定义函数 3.函数的参数3.1 实际参数&#xff08;实参&#xff09;3.2 形式参数&#xff08;形参&#xff09; 4.函数调用4.1传值调用4.2 传址调用4.3 练习 5.函数的嵌套调用和链式访问5.1 嵌套调…

Django + Vue 实现图片上传功能的全流程配置与详细操作指南

文章目录 前言图片上传步骤1. urls 配置2. settings 配置3. models 配置4. 安装Pillow 前言 在现代Web应用中&#xff0c;图片上传是一个常见且重要的功能。Django作为强大的Python Web框架&#xff0c;结合Vue.js这样的现代前端框架&#xff0c;能够高效地实现这一功能。本文将…

DolphinDB 蝉联 Gartner 中国实时数据管理代表厂商

报&#xff01;DolphinDB 又上榜啦&#xff01;&#xff01;&#xff01; 上月&#xff0c;全球知名信息技术研究公司 Gartner 发布了 Hype Cycle for Data, Analytics and AI in China, 2024 报告&#xff0c;以技术成熟度曲线&#xff08;Hype Cycle&#xff09;和优先级矩阵…

JVM的五大内存区域

JVM的五大内存区域 JVM内存区域最粗略的划分可以分为 堆 和 栈 &#xff0c;当然&#xff0c;按照虚拟机规范&#xff0c;可以划分为以下几个区域&#xff1a; JVM内存分为线程独享区和线程共享区&#xff0c; 其中 方法区 和 堆 是线程共享区&#xff0c; 虚拟机栈, 本地方法…

HTMLCSS(入门)

HTML <html> <head><title>第一个页面</title></head><body>键盘敲烂&#xff0c;工资过万</body> </html> <!DOCTYPE>文档类型声明&#xff0c;告诉浏览器使用哪种HTML版本显示网页 <!DOCTYPE html>当前页面采取…

云桌面运维工程师

一 深信服驻场工程师 1 深信服AC、AF、AD、NGAF、WOC Atrust、WAF项目实施经验者优先考虑。 负责云桌面POC测试 部署和配置&#xff1a;设置云桌面基础设施&#xff0c;包括虚拟化平台、云桌面管理软件和相关组件。确保正确配置网络、存储和安全设置。 用户体验&#xff1…

k8s离线安装安装skywalking9.4

目录 概述资源下载Skywalking功能介绍成果速览实践rbacoapoap-svcuiui-svc 结束 概述 k8s 离线安装安装 skywalking9.4 版本&#xff0c;环境&#xff1a;k8s版本为&#xff1a;1.27.x 、spring boot 2.7.x spring cloud &#xff1a;2021.0.5 、spring.cloud.alibab&#xff1…

滚动表格(vue版本)【已验证可正常运行】

演示图 注&#xff1a;以下代码来自于GPT4o&#xff1a;国内官方直连GPT4o 代码 <template><div><div class"alarmList-child" ref"alarmList" mouseenter.stop"autoRoll(1)" mouseleave.stop"autoRoll()"><div…

无服务器【Serverless】架构的深度剖析:组件介绍、优缺点与适用场景

&#x1f407;明明跟你说过&#xff1a;个人主页 &#x1f3c5;个人专栏&#xff1a;《未来已来&#xff1a;云原生之旅》&#x1f3c5; &#x1f516;行路有良友&#xff0c;便是天堂&#x1f516; 目录 一、引言 1、云计算的发展趋势 2、无服务器计算简介 二、无服务…

外挂级OCR神器:免费文档解析、表格识别、手写识别、古籍识别、PDF转Word

TextIn Tools是一款免费的在线OCR工具&#xff0c;支持快速准确的文字和表格识别&#xff0c;手写、古籍识别&#xff0c;提供PDF转Markdown大模型辅助工具&#xff0c;同时支持PDF、WORD、EXCEL、JPG、PPT等各类格式文件的转化。 TextIn Tools特点 免费&#xff1a;所有产品提…

Mysql 的第二次作业

一、数据库 1、登陆数据库 2、创建数据库zoo 3、修改数据库zoo字符集为gbk 4、选择当前数据库为zoo 5、查看创建数据库zoo信息 6、删除数据库zoo 1&#xff09;登陆数据库。 打开命令行&#xff0c;输入登陆用户名和密码。 mysql -uroot -p123456 ​ 2&#xff09;切换数据库…

Git学习(常用的一些命令)

&#x1f34e;个人博客&#xff1a;个人主页 &#x1f3c6;个人专栏&#xff1a;日常聊聊 ⛳️ 功不唐捐&#xff0c;玉汝于成 目录 前言 正文 配置相关&#xff1a; 创建与克隆仓库&#xff1a; 基本操作&#xff1a; 分支操作&#xff1a; 远程仓库操作&#xff1a…

深度学习基准模型Transformer

深度学习基准模型Transformer 深度学习基准模型Transformer&#xff0c;最初由Vaswani等人在2017年的论文《Attention is All You Need》中提出&#xff0c;是自然语言处理&#xff08;NLP&#xff09;领域的一个里程碑式模型。它在许多序列到序列&#xff08;seq2seq&#xf…

金融(基金)行业信创国产化特点及统一身份认证解决方案

金融业在政策支持及自主驱动下&#xff0c;金融信创取得快速发展。从2020年开始&#xff0c;三期试点已扩容至5000余家&#xff0c;进入全面推广阶段。而基金行业信创建设与银行、证券、保险这些试点行业相比&#xff0c;进展较为缓慢。 基金行业信创当前面临的问题 与多家基…

React Native 和 Flutter 的开发对比

React Native (RN) 和 Flutter 都是用于构建跨平台移动应用程序的流行框架。两者都具有各自的优势和劣势&#xff0c;选择哪个框架取决于您的具体需求和项目。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢迎交流合作。 以下是一些 RN 和 Flutter…

WPF在.NET9中的重大更新:Windows 11 主题

在2023年的2月20日&#xff0c;在WPF的讨论区&#xff0c;WPF团队对路线的优先级发起了一次讨论。 对三个事项发起了投票。 第一个是Windows 11 主题 第二个是更新的控件 第三个是可空性注释 最终Windows 11 主题得票最高&#xff0c;WPF团队2023-2024的工作优先级就是Windows…

Hadoop页面报错Permission denied: user=dr.who, access....

1、临时解决 hdfs dfs -chmod -R 777 /这种方法&#xff0c;存在一个不足&#xff0c;就是后面重新创建的文件夹&#xff0c;页面进行删除的时候&#xff0c;依然报这个错。 但是&#xff0c;对于应付紧急客户需求&#xff0c;可以临时用一下。 2、永久解决 查看页面的Owner…

python-图像旋转(赛氪OJ)

[题目描述] 输入一个 n 行 m 列的黑白图像&#xff0c;将它顺时针旋转 9090 度后输出。输入&#xff1a; 第一行包含两个整数 n 和 m&#xff0c;表示图像包含像素点的行数和列数。1≤n≤100&#xff0c;1≤m≤100。 接下来 n 行&#xff0c;每行 m 个整数&#xff0c;表示图像…