STM32开发(十四)STM32F103 数据手册 —— 通用定时器 PWN 详解

news2024/9/30 1:37:48

文章目录

    • 主要特点
    • 通用定时器内部框图
    • 功能描述
      • 计数器模式
      • 计数器时钟可选择时钟源
      • PWM输入模式


STM32F103内部通用定时器包括TIMx (TIM2、 TIM3、 TIM4和TIM5)定时器


主要特点

16位向上、向下、向上/向下自动装载计数器

16位可编程(可以实时修改)预分频器,计数器时钟频率的分频系数为1~65536之间的任意数值

4个独立通道

  • 输入捕获
  • 输出比较
  • PWM生成(边缘或中间对齐模式)
  • 单脉冲模式输出

使用外部信号控制定时器和定时器互连的同步电路

如下事件发生时产生中断/DMA

  • 更新:计数器向上溢出/向下溢出,计数器初始化(通过软件或者内部/外部触发)
  • 触发事件(计数器启动、停止、初始化或者由内部/外部触发计数)
  • 输入捕获─ 输出比较

支持针对定位的增量(正交)编码器和霍尔传感器电路

触发输入作为外部时钟或者按周期的电流管理


通用定时器内部框图

在这里插入图片描述
CLK_PSC时钟通过预分频器,产生CNT计数器所需要的时钟。
计数器可设置向上计数或者向下计数,计数器溢出时触发事件,重装载器,更新计数值。
计数值会通过比较器,产生PWN波。


功能描述

1、可编程通用定时器的主要部分是一个16位计数器和与其相关的自动装载寄存器。
2、这个计数器可以向上计数、向下计数或者向上向下双向计数。
3、此计数器时钟由预分频器分频得到。
4、计数器、自动装载寄存器和预分频器寄存器可以由软件读写,在计数器运行时仍可以读写。

时基单元包含:

  • 计数器寄存器(TIMx_CNT)
  • 预分频器寄存器 (TIMx_PSC)
  • 自动装载寄存器 (TIMx_ARR)

自动装载寄存器 (TIMx_ARR) 是预先装载的,写或读自动重装载寄存器将访问预装载寄存器(根据在TIMx_CR1寄存器中的自动装载预装载使能位(ARPE)的设置)预装载寄存器的内容被立即或在每次的更新事件UEV时传送到影子寄存器。
当计数器达到溢出条件(向下计数时的下溢条件)并当TIMx_CR1寄存器中的UDIS位等于’0’时,产生更新事件。更新事件也可以由软件产生。

计数器寄存器(TIMx_CNT) 由预分频器的时钟输出CK_CNT驱动,仅当设置了计数器TIMx_CR1寄存器中的计数器使能位(CEN)时, CK_CNT才有效。
注:真正的计数器使能信号CNT_EN是在CEN的一个时钟周期后被设置。

预分频器寄存器 (TIMx_PSC) 可以将计数器的时钟频率按1到65536之间的任意值分频。它是基于一个16位寄存器控制的16位计数器。这个控制寄存器带有缓冲器,它能够在工作时被改变。


计数器模式

1、向上计数模式
在向上计数模式中,计数器从0计数到自动加载值(TIMx_ARR计数器的内容),然后重新从0开始计数并且产生一个计数器溢出事件。每次计数器溢出时可以产生更新事件,在TIMx_EGR寄存器中(通过软件方式或者使用从模式控制器)设置UG位也同样可以产生一个更新事件。

设置TIMx_CR1寄存器中的UDIS位,可以禁止更新事件;
这样可以避免在向预装载寄存器中写入新值时更新影子寄存器。
在UDIS位被清’0’之前,将不产生更新事件。但是在应该产生更新事件时,计数器仍会被清’0’,同时预分频器的计数也被请0(但预分频系数不变)。

当发生一个更新事件时:
硬件同时设置更新标志位(TIMx_SR寄存器中UIF位)
预分频器的缓冲区被置入预装载寄存器的值。
自动装载影子寄存器被重新置入预装载寄存器的值(TIMx_ARR)。

2、向下计数模式
在向下模式中,计数器从自动加载值(TIMx_ARR计数器的内容)开始向下计数,然后从自动装入的值重新开始并且产生一个计数器向下溢出事件。每次计数器溢出时可以产生更新事件,在TIMx_EGR寄存制器)设置UG位,也同样可以产生一个更新事件。

设置TIMx_CR1寄存器的UDIS位可以禁止UEV事件时更新影子寄存器。
因此UDIS位被清为’0’之前不会产生更新事件。
然而,计数器仍会从当前自动加载值重新开始计数,同时预分频器的计数器重新从0开始(但预分频系数不变)。

当发生一个更新事件时:
硬件同时设置更新标志位(TIMx_SR寄存器中UIF位)
预分频器的缓存器被置入预装载寄存器的值。
当前的自动加载寄存器被更新为预装载值(TIMx_ARR寄存器中的内容)。数器重载入之前被更新,因此下一个周期将是预期的值。

3、中央对齐模式(向上/向下计数)
在中央对齐模式,计数器从0开始计数到自动加载的值(TIMx_ARR寄存器)-1,产生一个计数器溢出事件,然后向下计数到1并且产生一个计数器下溢事件;然后再从0开始重新计数。

计数器时钟可选择时钟源

内部时钟(CK_INT)
外部时钟模式1:外部输入脚(TIx)
外部时钟模式2:外部触发输入(ETR)
内部触发输入(ITRx):使用一个定时器作为另一个定时器的预分频器,如可以配置一个定时器Timer1而作为另一个定时器Timer2的预分频器。

PWM输入模式

两个ICx信号被映射至同一个TIx输入。这两个ICx信号为边沿有效,但是极性相反。其中一个TIxFP信号被作为触发输入信号,而从模式控制器被配置成复位模式。

例如,你需要测量输入到TI1上的PWM信号的长度(TIMx_CCR1寄存器)和占空比(TIMx_CCR2寄存器),具体步骤如下(取决于CK_INT的频率和预分频器的值)

  • 选择TIMx_CCR1的有效输入:置TIMx_CCMR1寄存器的CC1S=01(选择TI1)。
  • 选择TI1FP1的有效极性(用来捕获数据到TIMx_CCR1中和清除计数器):置CC1P=0(上升沿有效)。
  • 选择TIMx_CCR2的有效输入:置TIMx_CCMR1寄存器的CC2S=10(选择TI1)。
  • 选择TI1FP2的有效极性(捕获数据到TIMx_CCR2):置CC2P=1(下降沿有效)。
  • 选择有效的触发输入信号:置TIMx_SMCR寄存器中的TS=101(选择TI1FP1)。
  • 配置从模式控制器为复位模式:置TIMx_SMCR中的SMS=100。
  • 使能捕获:置TIMx_CCER寄存器中CC1E=1且CC2E=1。
    在这里插入图片描述
    由于只有TI1FP1和TI2FP2连到了从模式控制器,所以PWM输入模式只能使用TIMx_CH1/TIMx_CH2信号。

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

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

相关文章

【MySQL学习】认识MySQL数据库

目录一、什么是数据库二、主流数据库三、MySQL数据库的基本使用3.1 MySQL的安装3.2 MySQL服务器管理3.3 连接MySQL服务器3.4 MySQL服务器,数据库与表之间的关系3.5 使用案例3.6 数据存储四、MySQL架构五、SQL分类六、存储引擎6.1 定义6.2 查看存储引擎6.3 存储引擎对…

检测图中的负循环 | (贝尔曼福特)

我们得到了一个有向图。我们需要计算图形是否有负循环。负循环是循环的总和变为负的循环。 在图形的各种应用中都可以找到负权重。例如,如果我们沿着这条路走,我们可能会得到一些好处,而不是为一条路付出代价。 例子:

基于html+css的图片展示13

准备项目 项目开发工具 Visual Studio Code 1.44.2 版本: 1.44.2 提交: ff915844119ce9485abfe8aa9076ec76b5300ddd 日期: 2020-04-16T16:36:23.138Z Electron: 7.1.11 Chrome: 78.0.3904.130 Node.js: 12.8.1 V8: 7.8.279.23-electron.0 OS: Windows_NT x64 10.0.19044 项目…

震惊!竟然有人如此解释关键字中的static

🤩:大家好,我是paperjie,感谢你阅读本文,欢迎一建三连哦。 🥰:这里是C专栏,笔者用重金(时间和精力)打造,基础知识一网打尽,希望可以帮到读者们哦。 &#x1f…

工作中使用即时通讯软件有什么好处?

以前,即时通讯被认定为是一个专供个人使用的通信工具,即时消息软件不仅用于简化通信和快速响应,而且还用于文件共享和信息更新,它可帮助公司中的员工进行沟通、满足需求并实现目标。在即时通讯的帮助下,员工无需离开办…

交互式shell脚本编程2

当你在终端环境下安装新的软件时,你可以经常看到信息对话框弹出,需要你的输入,比如:RHEL/CentOS自带的setup,对话框的类型有密码箱、检查表、菜单等等。他们可以引导你以一种直观的方式输入必要的信息,使用…

3d可视化精炼数字工厂互动大屏展示提高企业竞争力

随着各种新兴技术的不断崛起和进步,结合云计算、5G通信、物联网等技术突破数据孤岛,加速炼钢厂整个行业的转型升级已成为行业的大趋势。 传统的维修场景中,一线员工的双手难以得到解放,一线工作数据难以收集、保存、输出。一辆汽车…

leetcode刷题(4)

各位朋友们,大家好。这两天我将为大家分享我在学习栈的过程中遇到的题目,我们一起来看看。 文章目录逆波兰表达式求值题目要求用例输入提示做题思路代码实现c语言实现代码Java语言实现代码有效的括号Java代码实现逆波兰表达式求值 leetcode之逆波兰表达…

Python基于机器学习实现的股票价格预测、股票预测源码+数据集,机器学习大作业

Feature与预测目标的选取 选择的feature: 开盘价最高成交价最低成交价成交量 选择的预测目标: 收盘价 因为股票价格的影响因素太多,通过k线数据预测未来的价格变化基本不可行,只有当天之内的数据还有一定的关联,故feature与target都选择的…

Oracle daily maintenancy-high active sessions

文章目录1.About check_mk metric:ORA_ORCL_Active_Session2.Solution2.1get the total number of active concurrent sessions2.2 the possible reason for this:2.2.1.High connection for normal behavior that happens occasionally2.2.2.resource competition1.About chec…

CentOS7---部署LNMP数据存储到redis

一、部署LNMP及redis 1、部署LNMP,需要将 tengine-2.2.0.tar.gz 拷贝到虚拟机的 /root 目录下 步骤一:安装nginx 源码安装相关软件包 # pcre-devel做正则匹配,zlib-devel做数据压缩 [roottemplate ~]# yum -y install gcc pcre-devel zlib-de…

迅为RK3588核心板平台新增工业级方案

迅为基于瑞芯微RK3588平台,提供商业级、工业级和国产化核心板,工业级板卡温度可达-40度到85度,国产化板卡从内存,存储等每一个元器件全部采用国产物料。不同板卡,满足各个行业需求。 iTOP-3588核心板参数 CPU &#x…

汉诺塔问题--C语言实现

魔王的介绍:😶‍🌫️一名双非本科大一小白。魔王的目标:🤯努力赶上周围卷王的脚步。魔王的主页:🔥🔥🔥大魔王.🔥🔥🔥 ❤️‍&#x1…

算法:什么是队列 用两个栈实现一个队列

题目 用两个栈实现一个队列。 队列、栈是一类,都是抽象模型 数组、链表是一类,都是具体实现 队列 逻辑结构,抽象模型,可以用任何语言来实现 先进先出add、delete、length 用数组来模拟 const queue [] // 入队 queue.push(…

Python实现哈里斯鹰优化算法(HHO)优化BP神经网络回归模型(BP神经网络回归算法)项目实战

说明:这是一个机器学习实战项目(附带数据代码文档视频讲解),如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 2019年Heidari等人提出哈里斯鹰优化算法(Harris Hawk Optimization, HHO),该算法有较强的全…

MySQL数据库的操作

MySQL数据库的操作 创建数据库 语法 create database [if not exists] db_name [create_specification,create_specification...]create_specification:[default] charactter set charest_name[default] collate collation_name 说明: []可选项 specification 特…

【智能座舱系】-智能座舱平台研究|各家主机厂都在使用的主流座舱软件平台

一、何为汽车智能化 以智能化和网联化的技术赋能车辆,实现车辆对复杂环境的有效感知和识别,实现对车辆与驾乘人员、对其他车辆、对其他基础设施的智能化交互。 二、智能的两大核心功能:智能化和网联化 智能化方面,汽车具备智能的人机交互,如语音、手势、图像及其他生物…

电脑开机无限重启,到了欢迎界面就黑屏重启

windows7系统,开机过程中,只要一过了四叶草,要么刚出来欢迎界面,要么还没出来就黑屏,然后重启,然后无限循环。。。 (经测试xp系统同样有效) 先尝试用方法1修复,若不行再用方法2。 方法1&…

【微服务中间件学习】redis基础及项目使用

背景 最近跟着大佬学习,发现之前都是一知半解,还是得系统学一下。 重温redis,有一下整理Redis是一种基于内存的高性能键值存储系统,它支持多种数据结构和持久化方式,并提供了许多高级功能,如发布/订阅、事…

Go项目布局建议

我们编写的 如果是Go 程序都是简单程序,一般由一个或几个 Go 源码文件组成,而且所有源码文件都在同一个目录中。但是生产环境中运行的实用程序可不会这么简单,通常它们都有着复杂的项目结构布局。弄清楚一个实用 Go 项目的项目布局标准是 Go …