目录

01、STM32捕获功能

02、输入捕获过程

03、代码配置


本文将介绍通过STM32的定时器输入捕获,如果对定时器不太熟悉的同学可以看下之前的文章《STM32基础定时器详解》,关于定时器的基础功能不再详解。下文将讲解timer1的捕获功能。

01、STM32捕获功能

从STM32的定时器框图中看

①部分基础定时器模块,已经在《STM32基础定时器详解》讲解过了。

②部分捕获/对比通道模块,已经在《定时器的PWM功能》讲解过了。

③部分是本文的重点,输入捕获模块。

从上图可以看出定时器1共有4个输入捕获通道。

下文以定时器1的捕获通道2为例讲解。

首先确定下对应的GPIO,从STM32F207数据手册的Alternatefunction mapping看出,定时器1通道2对应的GPIO有PA9和PE11,下文将使用PE11。

02、输入捕获过程

输入阶段采样对应的对输入TIx,去产生滤波后的信号TIxF。然后极性选择边沿检测器产生一个信号(TIxFPx),这个信号可以被用于服务模式控制器的触发输入或在作为捕获命令。在捕获寄存器前被预分频。

输出阶段产生一个中间波形,被用于参考:OCxRef(高电平有效)。链地末尾末尾决定极0性。捕获/比较通道1 主电路。

①处主要是设置输入捕获滤波器,输入阶段采样对应的对输入TIx,去产生滤波后的信号TIxF。一般应用场景不做滤波处理,设置TIMx_CCMR1的ICF[3:0]=0000,只要采集到上升沿,就触发捕获。

②处主要是设置输入捕获极性,设置TIMx_CCER的CC1P或CC1NP位,如果通道配置为输出,为0表示高电平有效,为1表示低电平有效;如果配置成输入模式,该位选择是IC1还是IC1的反相信号作为触发或捕获信号。为0,表示不反相,为1表示反相。

③处设置输入捕获映射通道,设置TIMx_CCMR1的CC1S[1:0]位,这2位定义通道的方向(输入/输出),及输入脚的选择:

0o:CC1通道被配置为输出;

01:CC1通道被配置为输入,IC1映射在Tl1上;

10: CC1通道被配置为输入,IC1映射在TI2上;

11:CC1通道被配置为输入,IC1映射在TRC上。此模式仅工作在内部触发器输入被选中时(由TIMx_SMCR寄存器的TS位选择)。

④处设置输入捕获分频器,TIMx_CCMR1的ICPS[1:0]位和TIMx_CCER的CC1E位。

TIMx_CCMR1的ICPS[1:0]这2位定义了CC1输入(IC1)的预分频系数。一旦CC1E='O(TIMx_CCER寄存器中),则预分频器复位。

00:无预分频器,捕获输入口上检测到的每一个边沿都触发一次捕获;

01:每2个事件触发一次捕获;

10:每4个事件触发一次捕获;

11:每8个事件触发一次捕获。

TIMx_CCER的CC1E位

CC1通道配置为输出:

0:关闭一OC1禁止输出。

1:开启一OC1信号输出到对应的输出引脚。

CC1通道配置为输入:

该位决定了计数器的值是否能捕获入TIMx_CCR1寄存器。

0:捕获禁止;

0:捕获使能。

最后我们还需要设置中断,使系统快速响应输入捕获信号,主要是这只TIMx_DIER寄存器,如下:

使能允许更新中断和通道2中断

03、代码配置

设置GPIO复用

/* TIM1 channel 2 pin (PE.11) configuration*/
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
GPIO_InitStructure.GPIO_Mode =GPIO_Mode_AF;
GPIO_InitStructure.GPIO_Speed =GPIO_Speed_100MHz;
GPIO_InitStructure.GPIO_OType =GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd =GPIO_PuPd_NOPULL;
GPIO_Init(GPIOE, &GPIO_InitStructure);/*Connect TIM pins to AF2 */
GPIO_PinAFConfig(GPIOE,GPIO_PinSource11, GPIO_AF_TIM1);

设定定时基础功能

/* Time base configuration */
TIM_TimeBaseStructure.TIM_Period =0XFFFF;
TIM_TimeBaseStructure.TIM_Prescaler = (uint16_t)((SystemCoreClock) / 1000000) -1;
TIM_TimeBaseStructure.TIM_ClockDivision =TIM_CKD_DIV1;
TIM_TimeBaseStructure.TIM_CounterMode =TIM_CounterMode_Up;TIM_TimeBaseInit(TIM1,&TIM_TimeBaseStructure);

配置通道2

TIM_ICInitStructure.TIM_Channel =TIM_Channel_2;
TIM_ICInitStructure.TIM_ICPolarity =TIM_ICPolarity_Falling;
TIM_ICInitStructure.TIM_ICSelection =TIM_ICSelection_DirectTI;
TIM_ICInitStructure.TIM_ICPrescaler =TIM_ICPSC_DIV1;
TIM_ICInitStructure.TIM_ICFilter =0x0;TIM_ICInit(TIM1, &TIM_ICInitStructure);

使能中断

/* Enable the TIM1 global Interrupt*/
NVIC_InitStructure.NVIC_IRQChannel =TIM1_CC_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority= 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority =1;
NVIC_InitStructure.NVIC_IRQChannelCmd =ENABLE;
NVIC_Init(&NVIC_InitStructure);NVIC_InitStructure.NVIC_IRQChannel =TIM1_UP_TIM10_IRQn;
NVIC_InitStructure.NVIC_IRQChannelSubPriority= 2;
NVIC_Init(&NVIC_InitStructure);/* Enablethe CC2 Interrupt Request */
TIM_ITConfig(TIM1,TIM_IT_CC2|TIM_IT_Update, ENABLE);

使能定时器1

/* TIM enable counter */
TIM_Cmd(TIM1, ENABLE);

下载代码验证测试

硬件和软件开源地址:

https://github.com/strongercjd/STM32F207VCT6

点击查看本文所在的专辑,STM32F207教程

关注公众号,第一时间收到文章更新。评论区不能及时看到,需要交流可以到公众号沟通

STM32 输入捕获功能相关推荐

  1. STM32笔记——定时器输入捕获功能(测量PWM的频率和占空比)

    目录 一.概述 二.输入捕获功能 2.1 输入捕获简介 2.2 输入捕获通道 三.输入捕获功能测量PWM波的频率和占空比 3.1 测量频率的方法 3.2 测量过程 一.概述 主要介绍通用定时器的输入捕 ...

  2. stm32 输入捕获学习(一)

    输入捕获模式可以用来测量脉冲宽度或者测量频率.STM32 的定时器,除了 TIM6 和 TIM7,其他定时器都有输入捕获功能.STM32 的输入捕获,简单地说就是通过检测 TIMx_CHx 上的边沿信 ...

  3. stm32 输入捕获 测量脉宽

    选用通用定时器TIM5的CH1. PA0接一个按键,默认接GND,当按键按下时,IO口被拉高,此时,可利用定时器的输入捕获功能,测量按键按下的这段高电平的时间. 宏定义方便程序升级.移植,举个例子: ...

  4. STM32 输入捕获 测量频率 PWM占空比

    看了网上关于STM32输入捕获的资料,有几篇介绍的很不错,但是内容上还有一点问题,稍加修改,大家可以参考一下. 重要概念理解(对于理解输入捕获功能很重要,特别看了数据手册CCR1\CCR2\CCR3\ ...

  5. STM32 输入捕获的脉冲宽度及频率计算

    输入捕获模式可以用来测量脉冲宽度或者测量频率.STM32 的定时器,除了 TIM6 和 TIM7,其他定时器都有输入捕获功能.以下是对脉冲宽度及频率的计算. 1.脉冲宽度 如下图所示,采集该高电平脉冲 ...

  6. STM32输入捕获测试频率和正负脉宽

    @STM32输入捕获测试频率和正负脉宽 本博客相关程序调用转载正点原子 正点原子@ALIENTEK 广州市星翼电子科技有限公司 这次做的主要是测试频率,但系,也趁此机会捕获了高低脉宽的时间,题目所说的 ...

  7. STM32输入捕获模式设置并用DMA接收数据

    参考: STM32的PWM输入模式设置并用DMA接收数据 Input capture mode The input stage samples the corresponding TIx input ...

  8. STM32F103定时器输入捕获功能

      STM32F103单片机的定时器不仅能输出PWM波,而且还能捕获输入的PWM波.可以通过定时器的捕获功能测量输入PWM波的周期和占空比.其中定时器的输入捕获功能如下:   在输入捕获模式下,当检测 ...

  9. STM32输入捕获实验

    STM32 输入捕获工作过程(通道1为例) 通过检测TIMx_CHx上的边沿信号,在边沿信号发生跳变(比如上升沿/下降沿)的时候,将当前定时器的值(TIMx_CNT)存放到对应的捕获/比较寄存器(TI ...

最新文章

  1. --single-transaction 参数对应MyISAM引擎和InnoDB引擎
  2. java 之 正则表达式
  3. python列表写入字典_python如何将列表中的元素添加进字典
  4. 终于把CString转化为char*了
  5. 红象云腾发布新一代PB级高速大数据平台产品
  6. 老码农:这段代码绝了,切勿模仿!
  7. android线程优先级大小,android 设置线程优先级 两种方式
  8. 从云服务器上拷贝文件,从云服务器上拷贝文件
  9. 《Java编程的逻辑》终于上市了!,java开发面试笔试题
  10. indesign入门教程,如何旋转、翻转、锁定和隐藏内容?
  11. 小米蓝牙音响驱动_广场舞阿姨的最爱,户外野营者的必备,小米华为都甘拜下风的便携音箱...
  12. win7 开启梦幻桌面
  13. 快递100手机端页面抓取所有快递公司名称和代码
  14. Struts2框架之文件下载
  15. python在idle中输入多行_pythonidle中多行输入
  16. C语言如何计算程序运行时间
  17. Top 11 Best Practices for PHP Development
  18. web网页设计期末课程大作业 HTML+CSS+JavaScript重庆火锅(代码质量好)
  19. SAP采购订单行项目中的免费和发票收据的同步逻辑
  20. linux平台编译运行c++程序

热门文章

  1. idata界面_iData手持终端常见问题集,持续更新中...
  2. python spark社区_Spark中文python文档
  3. ajax 请求成功 再执行javascript,jquery中ajax请求后台数据成功后既不执行success也不执行error的完美解决方法...
  4. matlab第六章课后答案,matlab作业第6章
  5. selenium设置js加载的时限,防止持续加载页面
  6. kafka分区与分组原理_Kafka工作原理
  7. python根据年月日计算天数_「每日一练」Python实现输入年月日计算第几天
  8. 中科院信工所经验_保研经验分享:实力+经验+运气=保研成功
  9. androidstudio 日历视图怎么显示农历_ipad自带的日历程序
  10. [BZOJ4591][SHOI2015]超能粒子炮·改(Lucas定理+数位DP)