你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

查看: 2194|回复: 2

【连载】【ALIENTEK 战舰STM32开发板】STM32开发指南--第十五章 输入捕获实验

[复制链接]

50

主题

7

回帖

0

蝴蝶豆

新手上路

最后登录
1970-1-1
发表于 2013-1-19 19:09:19 | 显示全部楼层 |阅读模式
 第十五章 输入捕获实验

上一章,我们介绍了STM32的通用定时器作为PWM输出的使用方法,这一章,我们将向大家介绍通用定时器作为输入捕获的使用。在本章中,我们将用TIM5的通道1PA0)来做输入捕获,捕获PA0上高电平的脉宽(用WK_UP按键输入高电平),通过串口打印高电平脉宽时间,从本章分为如下几个部分:
15.1 输入捕获简介
15.2 硬件设计
15.3 软件设计
15.4 下载验证
15.1 输入捕获简介

输入捕获模式可以用来测量脉冲宽度或者测量频率。STM32的定时器,除了TIM6TIM7,其他定时器都有输入捕获功能。STM32的输入捕获,简单的说就是通过检测TIMx_CHx上的边沿信号,在边沿信号发生跳变(比如上升沿/下降沿)的时候,将当前定时器的值(TIMx_CNT)存放到对应的通道的捕获/比较寄存器(TIMx_CCRx)里面,完成一次捕获。同时还可以配置捕获时是否触发中断/DMA等。
本章我们用到TIM5_CH1来捕获高电平脉宽,也就是要先设置输入捕获为上升沿检测,记录发生上升沿的时候TIM5_CNT的值。然后配置捕获信号为下降沿捕获,当下降沿到来时,发生捕获,并记录此时的TIM5_CNT值。这样,前后两次TIM5_CNT之差,就是高电平的脉宽,同时TIM5的计数频率我们是知道的,从而可以计算出高电平脉宽的准确时间。
接下来,我们介绍我们本章需要用到的一些寄存器配置,需要用到的寄存器有:TIMx_ARRTIMx_PSCTIMx_CCMR1TIMx_CCERTIMx_DIERTIMx_CR1TIMx_CCR1这些寄存器在前面2章全部都有提到(这里的x=5),我们这里就不再全部罗列了,我们这里针对性的介绍这几个寄存器的配置。
首先TIMx_ARRTIMx_PSC,这两个寄存器用来设自动重装载值和TIMx的时钟分频,用法同前面介绍的,我们这里不再介绍。
再来看看捕获/比较模式寄存器1TIMx_CCMR1,这个寄存器在输入捕获的时候,非常有用,有必要重新介绍,该寄存器的各位描述如图15.1.1所示:


 
15.1.1 TIMx_CCMR1寄存器各位描述

       当在输入捕获模式下使用的时候,对应图15.1.1的第二行描述,从图中可以看出,TIMx_CCMR1明显是针对2个通道的配置,低八位[70]用于捕获/比较通道1的控制,而高八位[158]则用于捕获/比较通道2的控制,因为TIMx还有CCMR2这个寄存器,所以可以知道CCMR2是用来控制通道3和通道4(详见《STM32参考手册》290页,14.4.8节)。
       这里我们用到的是TIM5的捕获/比较通道1,我们重点介绍TIMx_CMMR1[7:0]位(其实高8位配置类似),TIMx_CMMR1[7:0]位详细描述见图15.1.2所示:



15.1.2 TIMx_CMMR1 [7:0]位详细描述

其中CC1S[1:0],这两个位用于CCR1的通道配置,这里我们设置IC1S[1:0]=01,也就是配置IC1映射在TI1上(关于IC1TI1不明白的,可以看《STM32参考手册》14.2节的图98-通用定时器框图),即CC1对应TIMx_CH1
输入捕获1预分频器IC1PSC[1:0],这个比较好理解。我们是1次边沿就触发1次捕获,所以选择00就是了。
输入捕获1滤波器IC1F[3:0],这个用来设置输入采样频率和数字滤波器长度。其中,是定时器的输入频率(TIMxCLK),一般为72Mhz,而则是根据TIMx_CR1CKD[1:0]的设置来确定的,如果CKD[1:0]设置为00,那么=N值就是滤波长度,举个简单的例子:假设IC1F[3:0]=0011,并设置IC1映射到通道1上,且为上升沿触发,那么在捕获到上升沿的时候,再以 的频率,连续采样到8次通道1的电平,如果都是高电平,则说明却是一个有效的触发,就会触发输入捕获中断(如果开启了的话)。这样可以滤除那些高电平脉宽低于8个采样周期的脉冲信号,从而达到滤波的效果。这里,我们不做滤波处理,所以设置IC1F[3:0]=0000,只要采集到上升沿,就触发捕获。
再来看看捕获/比较使能寄存器:TIMx_CCER,该寄存器的各位描述见图14.1.2(在第14章)。本章我们要用到这个寄存器的最低2位,CC1ECC1P位。这两个位的描述如图15.1.3所示:




15.1.3 TIMx_CCER最低2位描述

       所以,要使能输入捕获,必须设置CC1E=1,而CC1P则根据自己的需要来配置。
接下来我们再看看DMA/中断使能寄存器:TIMx_DIER,该寄存器的各位描述见图13.1.2(在第13章),本章,我们需要用到中断来处理捕获数据,所以必须开启通道1的捕获比较中断,即CC1IE设置为1
控制寄存器:TIMx_CR1,我们只用到了它的最低位,也就是用来使能定时器的,这里前面两章都有介绍,请大家参考前面的章节。
最后再来看看捕获/比较寄存器1TIMx_CCR1,该寄存器用来存储捕获发生时,TIMx_CNT的值,我们从TIMx_CCR1就可以读出通道1捕获发生时刻的TIMx_CNT值,通过两次捕获(一次上升沿捕获,一次下降沿捕获)的差值,就可以计算出高电平脉冲的宽度。
至此,我们把本章要用的几个相关寄存器都介绍完了,本章要实现通过输入捕获,来获取TIM5_CH1(PA0)上面的高电平脉冲宽度,并从串口打印捕获结果。下面我们介绍输入捕获的配置步骤:
1)开启TIM5时钟,配置PA0为下拉输入。
要使用TIM5,我们必须先开启TIM5的时钟(通过APB1ENR设置)。这里我们还要配置PA0为下拉输入,因为我们要捕获TIM5_CH1上面的高电平脉宽,而TIM5_CH1是连接在PA0上面的。
2)设置TIM5ARRPSC
在开启了TIM5的时钟之后,我们要设置ARRPSC两个寄存器的值来设置输入捕获的自动重装载值和计数频率。
3)设置TIM5CCMR1
TIM5_CCMR1寄存器控制着输入捕获12的模式,包括映射关系,滤波和分频等。这里我们需要设置通道1为输入模式,且IC1映射到TI1(通道1)上面,并且不使用滤波(提高响应速度)器。
4)设置TIM5CCER,开启输入捕获,并设置为上升沿捕获。
TIM5_CCER寄存器是定时器的开关,并且可以设置输入捕获的边沿。只有TIM5_CCER寄存器使能了输入捕获,我们的外部信号,才能被TIM5捕获到,否则一切白搭。同时要设置好捕获边沿,才能得到正确的结果。
5)设置TIM5DIER,使能捕获和更新中断,并编写中断服务函数
因为我们要捕获的是高电平信号的脉宽,所以,第一次捕获是上升沿,第二次捕获时下降沿,必须在捕获上升沿之后,设置捕获边沿为下降沿,同时,如果脉宽比较长,那么定时器就会溢出,对溢出必须做处理,否则结果就不准了。这两件事,我们都在中断里面做,所以必须开启捕获中断和更新中断。
设置了中断必须编写中断函数,否则可能导致死机。我们需要在中断函数里面完成数据处理和捕获设置等关键操作,从而实现高电平脉宽统计。
6)设置TIM5CR1,使能定时器
最后,必须打开定时器的计数器开关,通过设置TIM5_CR1的最低位为1,启动TIM5的计数器,开始输入捕获。
通过以上6步设置,定时器5的通道1就可以开始输入捕获了,同时因为还用到了串口输出结果,所以还需要配置一下串口。
15.2 硬件设计

本实验用到的硬件资源有:
1)  指示灯DS0
2)  WK_UP按键
3)  串口
4)  定时器TIM3
5)  定时器TIM5
前面4个,在之前的章节均有介绍。本节,我们将捕获TIM5_CH1PA0)上的高电平脉宽,通过WK_UP按键输入高电平,并从串口打印高电平脉宽。同时我们保留上节的PWM输出,大家也可以通过用杜邦线连接PB5PA0,来测量PWM输出的高电平脉宽。
15.3 软件设计

本章,我们依旧是在前一章的基础上修改代码,先打开之前的工程,然后我们在上一章的基础上,在timer.c里面加入如下代码:
//定时器5通道1输入捕获配置
//arr:自动重装值
//psc:时钟预分频数
void TIM5_Cap_Init(u16 arr,u16 psc)
{           
       RCC->APB1ENR|=1ODR|=0PSC=psc;                       //预分频器

<span style="font-size: small"><span style="background-color: #e5e5e5"><font size="2"><span lang="EN-US"><span style="font-family: 'Times New Roman'">       TIM5->CCMR1|=1

实验10 输入捕获实验.rar

下载

36.3 KB, 下载次数: 36, 下载积分: ST金币 -1

《STM32开发指南》第十五章 输入捕获实验.rar

下载

757.83 KB, 下载次数: 45, 下载积分: ST金币 -1

<
回复

使用道具 举报

0

主题

11

回帖

0

蝴蝶豆

新手上路

最后登录
2018-3-16
发表于 2018-3-8 10:51:30 | 显示全部楼层
good ,thanks
回复 支持 反对

使用道具 举报

0

主题

11

回帖

0

蝴蝶豆

新手上路

最后登录
2018-3-16
发表于 2018-3-8 10:52:17 | 显示全部楼层
get 2 points
回复 支持 反对

使用道具 举报

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版