千家信息网

STM32如何实现输入捕获功能

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,小编给大家分享一下STM32如何实现输入捕获功能,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!01、STM32捕获功能从STM32的定时器框图中看①部分基础定时器模块,已经在《STM
千家信息网最后更新 2026年11月03日STM32如何实现输入捕获功能

小编给大家分享一下STM32如何实现输入捕获功能,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!

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);

下载代码验证测试

看完了这篇文章,相信你对"STM32如何实现输入捕获功能"有了一定的了解,如果想了解更多相关知识,欢迎关注行业资讯频道,感谢各位的阅读!

输入 通道 配置 定时器 输出 信号 功能 寄存器 选择 有效 事件 分频器 基础 模块 模式 电平 部分 阶段 下文 代码 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 深圳市人人互联网科技有限公司 互联网科技工作委员会毛军 科技互联网产品 互联网扶贫科技 科技信息互联网 有马互联网科技 互联网 的科技创新 致骋互联网科技 腾讯科技 互联网女皇 深圳天众互联网科技公司 互联网科技的未来发展 中国最先进互联网科技公司 青岛中康互联网医疗科技有限公司 互联网大会黑科技排名 江阴互联网智能科技产品进口 深圳市优智互联网科技有限公司 互联网科技和信息 张召忠谈中国互联网科技 艺电能源互联网科技有限公司招聘 互联网科技的前景 广东猪兼强互联网科技有限公司 厦门中拓互联网络科技有限公司 互联网科技社 盛创互联网科技有限公司 中国最先进互联网科技公司 中国航天科技大学国际工业互联网 深圳育鹏互联网科技有限公司招聘 互联网科技大赛获奖感言 区块链结合互联网科技 皮皮虾互联网科技有限公司
0