STM32定时器输入捕获PWMI模式全自动测频与占空比实战

1. 什么是PWMI模式?为什么它能全自动测频和占空比

大家好,今天我想聊聊STM32定时器里一个超级实用的功能——PWMI模式。这个模式可能听起来有点专业,但其实理解起来并不难。简单来说,PWMI(PWM Input)模式是STM32定时器输入捕获的一种高级用法,它能同时测量输入信号的频率和占空比,而且完全由硬件自动完成,不需要CPU频繁中断处理。

在实际项目中,比如电机控制、电源管理或者信号检测,我们经常需要测量PWM波的频率和占空比。如果只用软件处理,每次信号边沿到来时都要进中断,读计数器值,再计算,这样CPU负担会很重,尤其在高频信号下根本忙不过来。而PWMI模式通过硬件自动捕获和计算,解放了CPU,让系统更高效。

PWMI模式的实现依赖STM32定时器的双通道捕获功能。举个例子,假设我们用TIM4的通道1(CH1)和通道2(CH2)来测量一个PWM信号。通道1配置为上升沿触发,用于捕获整个周期的时间;通道2配置为下降沿触发,用于捕获高电平时间。这样,硬件会自动记录这两个时间值,我们只需读取寄存器就能算出频率和占空比。

更厉害的是,结合主从触发模式,PWMI还能在每次捕获后自动清零计数器,实现全自动测量。这意味着,一旦配置好,硬件就会持续工作,软件只需在需要时读取结果,非常适合实时性要求高的应用。

2. 硬件配置:从引脚到定时器的详细设置

要使用PWMI模式,首先得正确配置硬件。这里以STM32F103系列为例,我们用TIM4的通道1(对应引脚PB6)来测量PWM信号。下面我会一步步说明配置过程,包括时钟、GPIO和定时器设置。

第一步是开启相关时钟。STM32的定时器和GPIO通常挂载在不同的总线上,TIM4属于APB1总线,GPIOB属于APB2总线。所以要先使能这些时钟:

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE);

接下来配置GPIO引脚。PB6需要设置为输入模式,因为我们要捕获外部信号。这里使用上拉输入(GPIO_Mode_IPU),这样可以避免引脚悬空引入噪声:

GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);

然后配置定时器的时基单元。时基单元决定了计数器的频率和范围。我们设置预分频器(PSC)为71,这样当系统时钟是72MHz时,计数器频率为1MHz(72MHz / (71+1) = 1MHz)。自动重载值(ARR)设为65535,让计数器能计到最大值,避免频繁溢出:

TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_TimeBaseStructure.TIM_Prescal
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值