当前位置:网站首页>虫子 STM32 高级定时器 (哈哈我说实话硬件定时器不能体现实力,实际上想把内核定时器发上来的,一想算了,慢慢来吧)
虫子 STM32 高级定时器 (哈哈我说实话硬件定时器不能体现实力,实际上想把内核定时器发上来的,一想算了,慢慢来吧)
2022-06-23 03:44:00 【华为云】
高级定时器
时钟源
这里先说一下时钟源百分之99用内部的,其他3个基本不用,下面三个当做了解,有地方错了,有点迷糊
- 内部时钟源CK_INT
- 外部时钟模式1—外部的GPIO Tix(x=1 2 3 4)
- 外部时钟模式2—外部的GPIO ETR
- 内部触发输入
内部时钟源
- 内部时钟源来自RCC的TIMx_CLK
- TIMx_CLK等于多少呢?如何确定?
外部时钟模式1
时钟信号输入引脚
- 外部的GPIO TIx,对应:TIMx_CH1/2/3/4
- TIM_CCMRx 的位 CCxS[1:0]配置,其中 CCMR1 控制 TI1/2, CCMR2 控制 TI3/4
滤波器
- 如果来自外部的时钟信号的频率过高或者混杂有高频干扰信号的话,我们就需要使用滤波器对 ETRP 信号重新采样,来达到降频或者去除高频干扰的目的
- 由TIMx_CCMRx 的位 ICxF[3:0]配置
边沿检测
- 边沿检测的信号来自于滤波器的输出,在成为触发信号之前,需要进行边沿检测,决定是上升沿有效还是下降沿有效。
- 由 TIMx_CCER 的位 CCxP 和 CCxNP 配置
触发选择
- 当使用外部时钟模式 1 时,触发源有两个,一个是滤波后的定时器输入 1( TI1FP1)和滤波后的定时器输入 2( TI2FP2)
- 由 TIMx_SMCR 的位 TS[2:0]配置
使能计数器
- 经过上面的 5 个步骤之后, 最后我们只需使能计数器开始计数,外部时钟模式 1 的配置就算完成。
- 使能计数器由 TIMx_CR1 的位 CEN 配置。
外部时钟模式2
时钟信号输入引脚
当使用外部时钟模式 2 的时候,时钟信号来自于定时器的特定输入通道 TIMx_ETR,只有 1 个。
外部触发极性
- 来自 ETR 引脚输入的信号可以选择为上升沿或者下降沿有效
- 具体的由 TIMx_SMCR的位 ETP 配置
外部触发预分频器
- 由于 ETRP 的信号的频率不能超过 TIMx_CLK( 180M)的 1/4,当触发信号的频率很高的情况下,就必须使用分频器来降频
- 具体的由 TIMx_SMCR 的位 ETPS[1:0]配置
滤波器
- 如果 ETRP 的信号的频率过高或者混杂有高频干扰信号的,需要使用滤波器对 ETRP 信号重新采样,来达到降频或者去除高频干扰的目的
- 具体的由 TIMx_SMCR 的位 ETF[3:0]配置,其中的 fDTS 是由内部时钟 CK_INT 分频得到,具体的由 TIMx_CR1 的位CKD[1:0]配置
从模式选择
- 经过滤波器滤波的信号连接到 ETRF 引脚后,触发信号成为外部时钟模式 2 的输入,最终等于 CK_PSC,然后驱动计数器 CNT 计数。
- 具体的配置 TIMx_SMCR 的位 ECE 为 1即可选择外部时钟模式 2
使能计数器
- 经过上面的 5 个步骤之后, 最后我们只需使能计数器开始计数,外部时钟模式 2 的配置就算完成
- 使能计数器由 TIMx_CR1 的位 CEN 配置。
内部触发输入
- 内部触发输入是使用一个定时器作为另一个定时器的预分频器。硬件上高级控制定时器和通用定时器在内部连接在一起,可以实现定时器同步或级联。
- 由TIMx_SMCR 的位 TS[2:0]配置
控制器
- 控制器就是用来控制的,发送命令的
- CR1、CR2、SMCR、CCER,主要学习这几个寄存器即可。
时基单元
时基单元的组成
- 16位的预分频器 PSC,PSC
- 16位的计数器CNT, CNT
- 8位的重复计数器RCR,RCR(高级定时器独有)
- 16位的自动重装载寄存器ARR,ARR
输入捕获
输入通道
当使用需要被测量的信号从定时器的外部引脚 TIMx_CH1/2/3/4 进入,通常叫 TI1/2/3/4,在后面的捕获讲解中对于要被测量的信号我们都以 TIx 为标准叫法。
输入滤波和边沿检测
捕获通道
预分频器
- ICx 的输出信号会经过一个预分频器,用于决定发生多少个事件时进行一次捕获。
- 具体的由寄存器 CCMRx 的位 ICxPSC 配置,如果希望捕获信号的每一个边沿,则不分频。
捕获寄存器
输出比较
输出比较寄存器
死区发生器
带死区插入的半桥驱动电路
带死区插入的互补输出波形图
输出控制
输出引脚
输入捕获的应用
测量脉宽和频率
PWM输入模式
- 输出比较模式总共有 8 种,常用的是PWM模式。
- 由寄存器 CCMRx 的位 OCxM[2:0]配置。
代码
首先我们选好脚,这里我们用高级定时器
PWM互补输出实验,带死区时间,带刹车控制
互补需要两个脚,死区可以软件配置,刹车还需要一个脚。我们只能用高级定时器1了,没有8
边栏推荐
猜你喜欢

Static code block, code block, constructor execution order

Centos7 installing MySQL and configuring InnoDB_ ruby
![[Zeng shuge's laser slam notes] gmapping filter based slam](/img/93/b940ad95508d1c0d23642022df37f2.png)
[Zeng shuge's laser slam notes] gmapping filter based slam

What if the self incrementing IDs of online MySQL are exhausted?

Using jhipster to build microservice architecture

Google Earth engine (GEE) - long time series monthly VCI data extraction, analysis and area calculation (Mexico as an example)

聊聊内存模型和内存序

Two ways to improve the writing efficiency of hard disk storage data

Insérer le tri directement

How to process large volume xlsx/csv/txt files?
随机推荐
mysql如何删除表的一行数据
d重载嵌套函数
高效的远程办公经验 | 社区征文
【贪心】leetcode991. Broken Calculator
[advanced Android] kotlin delegate attribute
The first batch of job hunting after 00: don't misread their "different"
数据交易怎样实现
折半查找法
移动端城市列表排序js插件vercitylist.js
关于sql语句的问题
Not just offline caching- On how to make good use of serviceworker
1058 multiple choice questions (20 points)
页面导出excel的三种方式
Source code encryption of data encryption technology
1-1 introduction to VMWare
R tree of search tree
[advanced Android] entrusted by kotlin
Generate PDF417 code in batch through TXT file
电商如何借助小程序发力
Tcapulusdb Jun · industry news collection (IV)




























