STM32F407通常定时器输入捕获.docx
《STM32F407通常定时器输入捕获.docx》由会员分享,可在线阅读,更多相关《STM32F407通常定时器输入捕获.docx(23页珍藏版)》请在冰豆网上搜索。
![STM32F407通常定时器输入捕获.docx](https://file1.bdocx.com/fileroot1/2022-10/15/cac624ef-3711-4704-a45e-43a38044e609/cac624ef-3711-4704-a45e-43a38044e6091.gif)
STM32F407通常定时器输入捕获
通用定时器输入捕获
通用定时器作为输入捕获的使用。
我们用TIM5的通道1(PA0)来做输入捕获,捕获PA0上高
电平的脉宽(用KEY_UP按键输入高电平),通过串口来打印高电平脉宽时间
输入捕获模式可以用来测量脉冲宽度或者测量频率
我们以测量脉宽为例,用一个简图来说明
输入捕获的原理:
t
,图中t1~t2
如图所示,
时间,就是我们需要测量的高电平时间。
测量方法如下:
首先设置定时器通道x为上升沿捕获,
这样,t1时刻,就会捕获到当前的CNT值,然后立即清零CNT,并设置通道x为下降沿捕获,
这样到t2时刻,又会发生捕获事件,得到此时的CNT值,记为CCRx2。
这样,根据定时器的
计数频率,我们就可以算岀t1~t2的时间,从而得到高电平脉宽。
在t1~t2之间,可能产生N
次定时器溢岀,这就要求我们对定时器溢岀,做处理,防止高电平太长,导致数据不准确。
如图
所示,t1~t2之间,CNT计数的次数等于:
N*ARR+CCRx2,有了这个计数次数,再乘以
CNT
的计数周期,即可得到t2-t1的时间长度,即高电平持续时间。
STM32F4的定时器,除了TIM6和TIM7,其他定时器都有输入捕获功能。
STM32F4
的输入
捕获,简单的说就是通过检测TIMx_CHx上的边沿信号,在边沿信号发生跳变(比如上升沿
降沿)的时候,将当前定时器的值(
TIMx_CNT)存放到对应的通道的捕获
/比较寄存器
(TIMx_CCRx)里面,完成一次捕获。
同时还可以配置捕获时是否触发中断
/DMA等。
这里我
们用TIM5CH1来捕获咼电平脉宽。
OCZC£|002*426
OC2PE1OC2FE
ccasii-oji
ocice|
OC1M[20|
aC1P£|0ClFE
卸F]
icspsqro]
IC1FI3;0]
icipsqio]
rw1曲1rw1側
rw1rw
rw1rW
rw1
rw1rwrw
fw1rw
rw1M
5
2
0
了勺,
当在输入捕获模式下使用的时候,对应图的第二行描述,从图中可以看岀,
15141112111P9
TIMxCCMR1是针
接下来介绍我们需要用到的一些寄存器配置,需要用到的寄存器:
TIMxARR
、TIMxPSC、
TIMxCCMR1、TIMxCCER、TIMxDIER、TIMxCR1、TIMxCCR1
(这里的x=5)。
首先TIMx_ARR和TIMx_PSC,这两个寄存器用来设自动重装载值和
TIMx的时钟分频。
捕获/比较模式寄存器1:
TIMx_CCMR1,这个寄存器在输入捕获的时候,
非常有用:
TIMx捕获/比较模式寄存器1(TIMx_CCMR1)
TIMxcapture/comparemoderegister1
偏移地址:
0x18复位值:
0x0000
[15:
8]则用于捕获/
CCMR2是用来控制
对2个通道的配置,低八位[7:
0]用于捕获/比较通道1的控制,而高八位比较通道2的控制,因为TIMx还有CCMR2这个寄存器,所以可以知道
通道
3和通道4(详见《STM32F4XX中文参考手册》435页,1548节)。
这里我们用到的是
TIM5
的捕获/比较通道1,我们重点介绍TIMx_CCMR1的[7:
0]位(其高8位配置类似)
TIMx_CCMR1的[7:
0]位详细描述见图所示:
位7:
4IC1F:
输入捕获1滤波器(Inputcapture1filter)
此位域可定义TI1输入的采样频率和适用于
个事件才视为一个有效边沿:
TI1
的数字滤波器带宽。
数字滤波器由事件计数器组成,每N
0000:
无滤波器,
按fDTS频率进行采样
1000:
fSAMPLING
=fdts/8,
N=6
0001:
fSAMPLING
=fCK_INT,
N=2
1001:
fSAMPLING
=fDTS/8,
N=8
0010:
fSAMPLING
=fCK_INT,
N=4
1010:
fSAMPLING
=fDTS/16,
N=5
0011:
fSAMPLING
=fCK_INT,
N=8
1011:
fSAMPLING
=fdts/16,
N=6
0100:
fSAMPLING
=fdts/2,
N=6
1100:
fSAMPLING
=fdts/16,
N=8
0101:
fSAMPLING
=fDTS/2,
N=8
1101:
fSAMPLING
=fdts/32,
N=5
0110:
fSAMPLING
=fDTS/4,
N=6
1110:
fSAMPLING
=fdts/32,
N=6
0111:
fSAMPLING
=fdts/4,
N=8
1111:
fSAMPLING
=fdts/32,
N=8
注意:
在当前硅版本中,当
ICxF[3:
0]=1、2
或3时,将用CK_INT代替公式中的fDTS。
□_
TI1F
ffilS
输入捕获1滤波器IC1F[3:
0],这个用来设置输入采样
频率和数字滤波器长度。
其中,fCK_INT是定时器的输入
IIGF[3£]
TIIWk^CCMRI
频率(TIMxCLK),一般为84Mhz/168Mhz(看该定
时器在哪个总线上),而fDTS则是根据TIMx_CR1的
CKD[1:
0]的设置来确定的,如果CKD[1:
0]设置为00,那么fDTSnfCKJNT。
N值就是滤波长度,举个简单的例
子:
假设IC1F[3:
0]=0011,并设置IC1映射到通道1上,且为上升沿触发,那么在捕获到上升沿的时候,再
以fCK_INT的频率,连续采样到8次通道1的电平,如果
都是高电平,
则说明却是一个有效的触发,就会触发输
入捕获中断
(如果开启了的话)。
这样可以滤除那些高电
平脉宽低于
8个采样周期的脉冲信号,从而达到滤波的
效果。
这里,我们不做滤波处理,所以设置
IC1F[3:
0]=0000,只要采集到上升沿,就触发捕获。
位3:
2IC1PSC:
输入捕获1预分频器(Inputcapture1
IC1
/1I./&
prescaler)
此位域定义CC1输入(IC1)的预分频比。
只要CC1E=0(TIMx_CCER寄存器),预分频器便立即复位。
00:
无预分频器,捕获输入上每检测到一个边沿便执行捕获
01:
每发生
个事件便执行一次捕获
|cctsi1:
o]lICPSIID]
10:
每发生
11:
每发生
个事件便执行一次捕获个事件便执行一次捕获
TIMj(_CCWK1T|Mx_CCER
输入捕获1预分频器IC1PSC[1:
0],我们是1次边沿就
触发1次捕获,所以选择00。
TI1FP1
10
位1:
0CC1S:
捕获/比较1选择(Capture/Compare1
selection)
此位域定义通道方向(输入
/输出)以及所使用的输入。
IRC
i:
舗鼻回廈
11
彳
00:
CC1
通道配置为输出
TDUUC£lVRl
01:
CC1
10:
CC1
11:
CC1
通道配置为输入,
通道配置为输入,
通道配置为输入,
IC1
IC1
IC1
映射到
映射到
映射到
TI1上
TI2上
TRC上。
此模式仅在
通过TS位(TIMx_SMCR寄存器)选择内部触发输入时有效
注意:
仅当通道关闭时(TIMx_CCER中的CC1E=0),才可向CC1S位写入数据。
其中CC1S[1:
0],这两个位用于CCR1的通道配置,这
里我们设置IC1S[1:
0]=01,也就是配置IC1映射在TI1上。
TIMx捕获/比较使能寄存器(TIMx_CCER)
CC*Np|
CC4P1CC4E
CC3P
CC3£
l5l隅
1CCZP
ccse
ocimpI
1CCniP
1CClE
阳1
rwIfw
rw
1-I
1-
fW
rw1
1*
1rw
位1CC1P:
捕获/比较1输岀极性
TII1F
TIIIF-Risin*
14131211109«
Hmfpi
ri1FFa|ihng
TIMxCCER
CC1通道配置为输出:
0:
OC1高电平有效
1:
OC1低电平有效
(Capture/Compare1outputPolarity)
CC1通道配置为输入:
CC1NP/CC1P位可针对触发或捕获操作选择TI1FP1和TI2FP1的极性。
00:
非反相/上升沿触发电路对TIxFP1上升沿敏感(在复位模式、外部时钟模式或触发模式下执行捕获或触发操作),TIxFP1未反相(在门控模式或编码器模式下执行触发操作)。
01:
反相/下降沿触发电路对TIxFP1下降沿敏感(在复位模式、外部时钟模式或触发模式下执行捕获或触发操作),TIxFP1反相(在门控模式或编码器模式下执行触发操作)。
10:
保留,不使用此配置。
11:
非反相/上升沿和下降沿均触发
电路对TlxFP1上升沿和下降沿都敏感(在复位模式、外部时钟模式或触发模式下执行捕获或触发操作)
位0CC1E:
捕获/比较1输岀使能(Capture/Compare1outputenable)
CC1通道配置为输出:
0:
关闭--OC1未激活
1:
开启—在相应输出引脚上输出0C1信号
CC1通道配置为输入:
此位决定了是否可以实际将计数器值捕获到输入捕获/比较寄存器1仃IMx_CCR1)中。
0:
禁止捕获1:
使能捕获
所以要使能输入捕获,必须设置CC1E=1,而CC1P则根据自己的需要来配置。
接下来我们再看看DMA/中断使能寄存器:
TIMx_DIER,该寄存器的各位描述见图
Is
L312
I]
ID
Q
S7
6
5T
3
2:
0
1悶1
TDf
1f询jcClDE
|fc:
nE
CrtDE1
:
Tl
1嘔1
TIE
1fT.3J|CC4:
!
c;:
rE
e:
E
1TE1
r書
TU.
rv
Tfi
】p
m
CC4IEr比許摘获f吃痰4中IT4mlemjpcftnabIti
0:
1:
尢伯购yLt牧和烷.
住3
CC3IEr允沖捕抚U;校3中團FCaptur宙GompMfE3tfitemiptenable]0.宣1神捌^?
却;:
牺.
1:
兄许捕奁此1:
牡9-浙.
注2
CC2IE:
光许朋曲比姣3;1商(Captufa/CcMTipara2ntfrrrupCftnabla]0’裂止矜掷比轨0:
-商2
1