版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
本文格式为Word版,下载可任意编辑——STM32F407定时器输入捕获通用定时器输入捕获
通用定时器作为输入捕获的使用。我们用TIM5的通道1(PA0)来做输入捕获,捕获PA0上高电平的脉宽(用KEY_UP按键输入高电平),通过串口来打印高电平脉宽时间。
输入捕获模式可以用来测量脉冲宽度或者测量频率。我们以测量脉宽为例,用一个简图来说明输入捕获的原理:
如下图,就是输入捕获测量高电平脉宽的原理,假定定时器工作在向上计数模式,图中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等。这里我们用TIM5_CH1来捕获高电平脉宽。
===================================================================================捕获/比较通道(例如:通道1输入阶段)
===================================================================================接下来介绍我们需要用到的一些寄放器配置,需要用到的寄放器:TIMx_ARR、TIMx_PSC、TIMx_CCMR1、TIMx_CCER、TIMx_DIER、TIMx_CR1、TIMx_CCR1(这里的x=5)。首先TIMx_ARR和TIMx_PSC,这两个寄放器用来设自动重装载值和TIMx的时钟分频。
捕获/比较模式寄放器1:TIMx_CCMR1,这个寄放器在输入捕获的时候,十分有用:
TIMx捕获/比较模式寄放器1(TIMx_CCMR1)
TIMxcapture/comparemoderegister1偏移地址:0x18复位值:0x0000
当在输入捕获模式下使用的时候,对应图的其次行描述,从图中可以看出,TIMx_CCMR1是针对2个通道的配置,低八位[7:0]用于捕获/比较通道1的控制,而高八位[15:8]则用于捕获/比较通道2的控制,由于TIMx还有CCMR2这个寄放器,所以可以知道CCMR2是用来控制通道3和通道4(详见《STM32F4xx中文参考手册》435页,15.4.8节)。这里我们用到的是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=20010:fSAMPLING=fCK_INT,N=40011:fSAMPLING=fCK_INT,N=80100:fSAMPLING=fDTS/2,N=60101:fSAMPLING=fDTS/2,N=80110:fSAMPLING=fDTS/4,N=60111:fSAMPLING=fDTS/4,N=8
1001:fSAMPLING=fDTS/8,N=8??1010:fSAMPLING=fDTS/16,N=5??1011:fSAMPLING=fDTS/16,N=6??1100:fSAMPLING=fDTS/16,N=8??1101:fSAMPLING=fDTS/32,N=5??1110:fSAMPLING=fDTS/32,N=6??
1111:fSAMPLING=fDTS/32,N=8
注意:在当前硅版本中,当ICxF[3:0]=1、2或3时,将用CK_INT代替公式中的fDTS。
输入捕获1滤波器IC1F[3:0],这个用来设置输入采样频率和数字滤波器长度。其中,fCK_INT是定时器的输入频率(TIMxCLK),一般为84Mhz/168Mhz(看该定时器在哪个总线上),而fDTS则是根据TIMx_CR1的CKD[1:0]的设置来确定的,假使CKD[1:0]设置为00,那么fDTS=fCK_INT。N值就是滤波长度,举个简单的例子:假设IC1F[3:0]=0011,并设置IC1映射到通道1上,且为上升沿触发,那么在捕获到上升沿的时候,再以fCK_INT的频率,连续采样到8次通道1的电平,假使都是高电平,则说明却是一个有效的触发,就会触发输入捕获中断(假使开启了的话)。这样可以滤除那些高电平脉宽低于8个采样周期的脉冲信号,从而达到滤波的效果。这里,我们不做滤波处理,所以设置IC1F[3:0]=0000,只要采集到上升沿,就触发捕获。位3:2IC1PSC:输入捕获1预分频器(Inputcapture1prescaler)此位域定义CC1输入(IC1)的预分频比。只要CC1E=0(TIMx_CCER寄放器),预分频器便马上复位。00:无预分频器,捕获输入上每检测到一个边沿便执行捕获01:每发生2个事件便执行一次捕获10:每发生4个事件便执行一次捕获11:每发生8个事件便执行一次捕获输入捕获1预分频器IC1PSC[1:0],我们是1次边沿就触发1次捕获,所以选择00。位1:0CC1S:捕获/比较1选择(Capture/Compare1selection)此位域定义通道方向(输入/输出)以及所使用的输入。00:CC1通道配置为输出01:CC1通道配置为输入,IC1映射到TI1上10:CC1通道配置为输入,IC1映射到TI2上11:CC1通道配置为输入,IC1映射到TRC上。此模式仅在通过TS位(TIMx_SMCR寄放器)选择内部触发输入时有效注意:仅当通道关闭时(TIMx_CCER中的CC1E=0),才可向CC1S位写入数据。其中CC1S[1:0],这两个位用于CCR1的通道配置,这里我们设置IC1S[1:0]=01,也就是配置IC1映射在TI1上。
TIMx捕获/比较使能寄放器(TIMx_CCER)
TIMxcapture/compareenableregister偏移地址:0x20复位值:0x0000
位1CC1P:捕获/比较1输出极性(Capture/Compare1outputPolarity)。CC1通道配置为输出:0:OC1高电平有效1:OC1低电平有效CC1通道配置为输入:CC1NP/CC1P位可针对触发或捕获操作选择TI1FP1和TI2FP1的极性。00:非反相/上升沿触发电路对TIxFP1上升沿敏感(在复位模式、外部时钟模式或触发模式下执行捕获或触发操作),TIxFP1未反相(在门控模式或编码器模式下执行触发操作)。01:反相/下降沿触发电路对TIxFP1下降沿敏感(在复位模式、外部时钟模式或触发模式下执行捕获或触发操作),TIxFP1反相(在门控模式或编码器模式下执行触发操作)。10:保存,不使用此配置。11:非反相/上升沿和下降沿均触发电路对TIxFP1上升沿和下降沿都敏感(在复位模式、外部时钟模式或触发模式下执行捕获或触发操作)位0CC1E:捕获/比较1输出访能(Capture/Compare1outputenable)。CC1通道配置为输出:0:关闭––OC1未激活CC1通道配置为输入:
此位决定了是否可以实际将计数器值捕获到输入捕获/比较寄放器1(TIMx_CCR1)中。0:阻止捕获
1:使能捕获
1:开启––在相应输出引脚上输出OC1信号
所以要使能输入捕获,必需设置CC1E=1,而CC1P则根据自己的需要来配置。
接下来我们再看看DMA/中断使能寄放器:TIMx_DIER,该寄放器的各位描述见图
TIMx_DIER寄放器各位描述
我们需要用到中断来处理捕获数据,所以必需开启通道1的捕获比较中断,即CC1IE设置为1。控制寄放器:TIMx_CR1,我们只用到了它的最低位,也就是用来使能定时器的。
?控制寄放器1(TIMx_CR1)
位9:8CKD:时钟分频(Clockdivision)
此位域指示定时器时钟(CK_INT)频率与数字滤波器所使用的采样时钟(ETR、TIx之间的分频比,00:tDTS=tCK_INT??
?
01:tDTS=2×tCK_INT??
10:tDTS=4×tCK_INT??
11:保存
最终再来看看捕获/比较寄放器1:TIMx_CCR1,该寄放器用来存储捕获发生时,TIMx_CNT的值,我们从TIMx_CCR1就可以读出通道1捕获发生时刻的TIMx_CNT值,通过两次捕获(一次上升沿捕获,一次下降沿捕获)的差值,就可以计算出高电平脉冲的宽度(注意,对于脉宽太长的状况,还要计算定时器溢出的次数)。
===================================================================================输入捕获库函数配置:
1)开启TIM5时钟,配置PA0为复用功能(AF2),并开启下拉电阻。
要使用TIM5,我们必需先开启TIM5的时钟。同时我们要捕获TIM5_CH1上面的高电平脉宽,所以先配置PA0为带下拉的复用功能,同时,为了让PA0的复用功能选择连接到TIM5,所以设置PA0的复用功能为AF2,即连接到TIM5上面。开启IM5时钟的方法为:
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM5,ENABLE);//TIM5时钟使能当然,这里我们也要开启PA0对应的GPIO的时钟。
配置PA0为复用功能,所以我们首先要设置PA0引脚映射AF2,方法为:GPIO_PinAFConfig(GPIOA,GPIO_PinSource0,GPIO_AF_TIM5);
最终,我们还要初始化GPIO的模式为复用功能,同时这里我们还要设置为开启下拉。方法为:GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0;//GPIOA0GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF;//复用功能
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_100MHz;//速度100MHzGPIO_InitStructure.GPIO_OType=GPIO_OType_PP;//推挽复用输出GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_DOWN;//下拉GPIO_Init(GPIOA,//初始化PA0
跟上一讲PWM输出类似,这里我们使用的是定时器5的通道1,所以我们从STM32F4对应的数据手册可以查看到对应的IO口为PA0:
2)初始化TIM5,设置TIM5的ARR和PSC。
在开启了TIM5的时钟之后,我们要设置ARR和PSC两个寄放器的值来设置输入捕获的自动重装载值和计数频率。这在库函数中是通过TIM_TimeBaseInit函数实现的,TIM_TimeBaseStructure.TIM_Prescaler=psc;//定时器分频
TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;//向上计数模式TIM_TimeBaseStructur
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 应急救援安全试题练习题库(附参考答案)
- 2026上海团校面试题及答案
- 消防安全常识试题及答案
- 中学思想政治工作自查报告(3篇)
- 2025年绵阳市水务有限公司招聘考试真题
- 2024江西建筑安全员A证考试模拟题附答案
- 2025-2026学年囊谦县四年级数学下学期期中考试试题(含答案)
- 2026年太原汾河职业学院高职单招职业技能考试模拟试卷附答案详解【研优卷】
- 2024年山东鲁坤职业学院高职单招职业适应性测试考试模拟试卷附完整答案详解【典优】
- 2026年长沙民政职业技术学院单招综合素质考试题库附参考答案详解(基础题)
- 护栏安装工程承揽协议
- 2026驾照科目一全新全攻略:新规解读、核心考点与零基础通关指南
- 、2026 广州中考历史 试卷
- 2026年建筑电工(建筑特殊工种)考试题库及答案
- 2026浙江杭州萧山交通投资集团有限公司Ⅱ类岗位招聘6人笔试参考题库及答案详解
- 2026年云南省中考物理真题
- 2026年秋国家开放大学国开电大机考期末园艺植物栽培学总论试题及答案
- 2026年黑龙江、吉林、辽宁、内蒙古高考物理试卷
- 肺结核咯血患者的护理未来发展趋势
- 隧道检测安全管理课件
- 野外安全生产制度
评论
0/150
提交评论