第十三届蓝桥杯嵌入式备战之旅——TIM计时器捕获

本文介绍了STM32定时器的基本结构体成员,包括预分频器、计数模式、定时器周期等参数的配置。通过设置预分频器和自动重载寄存器,可以计算出定时中断的时间间隔。还提到了捕获功能,用于根据信号发生器频率变化进行频率测量。在Cubemx中配置定时器,并提供了计算捕获频率的公式。在中断回调函数中,别忘了重新开启中断计时器。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

常用函数 

结构体成员

 typedef struct {
 uint16_t TIM_Prescaler; // 预分频器
 uint16_t TIM_CounterMode; // 计数模式
 uint32_t TIM_Period; // 定时器周期
 uint16_t TIM_ClockDivision; // 时钟分频
 uint8_t TIM_RepetitionCounter; // 重复计算器
 } TIM_TimeBaseInitTypeDef;

(1) TIM_Prescaler:定时器预分频器设置,时钟源经该预分频器才是定时器时钟,它设定TIMx_PSC 寄存器的值。可设置范围为 0 至 65535,实现 1至 65536 分频。
(2) TIM_CounterMode:定时器计数方式,可是在为向上计数、向下计数以及三种中心对齐模式。基本定时器只能是向上计数,即 TIMx_CNT只能从 0开始递增,并且无需初始化。
(3) TIM_Period:定时器周期,实际就是设定自动重载寄存器的值,在事件生成时更新到影子寄存器。可设置范围为 0至 65535。
(4) TIM_ClockDivision:时钟分频,设置定时器时钟 CK_INT 频率与数字滤波器采样时钟频率分频比,基本定时器没有此功能,不用设置。
(5) TIM_RepetitionCounter:重复计数器,属于高级控制寄存器专用寄存器位,利用它可以非常容易控制输出 PWM 的个数。这里不用设置。
虽然定时器基本初始化结构体有 5 个成员,但对于基本定时器只需设置其中两个就可以。

计算公式

默认情况下系统设置时钟是72M Hz,但是我喜欢80MHz

我们把定时器设置自动重装载寄存器 ARR 的值为 1000-1,设置时钟预分频器为 79,则驱动计数器的时钟:CK_CNT = CK_INT / (79+1)=1M,则计数器计数一次的时间等于:1/CK_CNT=1us,当计数器计数到 ARR 的值 1000 时,产生一次中断,则中断一次的时间为:1/CK_CNT*ARR=1ms。

!!!中断回调函数里最后记得重新开启中断计时器!!!

捕获功能

 调电阻R39,R40会发生信号发生器的频率变化,从而让定时器PA15和PB4捕获

捕获到的频率计算公式

频率  =  100000 / HAL_TIM_ReadCapturedValue(&htim2 , TIM_CHANNEL_1)

Cubemx配置

定时器

 

 

如果开启了定时器中断的话就要配中断

如果开启捕获模式要往下面走

程序代码

  • 预分频系数为80   计数时钟频率就是 80MHz/(79+1) = 1MHz        此时1us计数一次

配置的定时器的输入捕获的计数的频率为1MHZ,两次捕获上升沿的差值test为计数器CNT计的次数,所以总的周期即为T=1us*test,所以频率就fq=1000000/test HZ;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值