STM32F4XX定时器时基、数字滤波器配置

在学习hal库的时候遇到定时器配置的问题,现将定时器配置的方法以及相关公式进行总结

本文主要完成的功能配置TIM外设以使用相应的中断请求生成一秒的时基

通用定时器TIM2-TIM5,TIM9-TIM14挂在于APB1总线,下面基于STM32F407zg的TIM3为例进行说明

STM32F407zg的时钟树如下图所示

APB1的预分频系数(APB1 Prescaler)为 4(不为1),则APB1总线上的定时器(TIM3也在其中)时钟为

TIM3CLK  = 2 * APB1 clock (PCLK1) = 2 * ( 168 / 4 ) = 84MHz

要使TIM3计数器时钟(TIM3 counter clock)为10 KHz(这个频率是按需求自定义的),预分频器计算如下:

Prescaler = (TIM3CLK / TIM3 counter clock) - 1 = ( 84,000,000 / 10,000 ) - 1 = 8,400 -1

TIM3 ARR寄存器 ( TIM3 AutoReload Register )值等于 10,000  -  1,(这个值是根据上面的10KHz来的)

计数器周期 Counter Period (AutoReload Register - 32 bits value ) = 10,000 -1 

Update rate = TIM3 counter clock / (Period + 1) = 1 Hz

因此TIM3每1秒产生一次中断。

在STM32CubeMx中TIM3的配置如下图


值得注意的是,如果要使用定时器的输入捕获(Input Capture)配置按键消抖的话,需要对Internal Clock Division需要做相应修改,如下图所示。

名词解释:Internal Clock Division(CKD)

CKD是TIMx_CR1寄存器中的Bit 9:8,该位字段表示定时器时钟(CK_INT)频率与数字滤波器(ETR,TIx)使用的采样时钟之间的分频比(可选1,2,4)。

本文中的STM32F407的TIM3的时钟频率为84MHz,即上图中的tCK_INT = 1 / 84us。

选择CKD = 2,则tDTS = 2 * tCK_INT = 2 / 84us,fDTS = 42MHz,即数字滤波器采样时钟频率为42M。在CubeMx的TIM3配置中,我们设置了Input Filter (4 bit ) = 15。

对应下图中fSAMPLING = fDTS / 32, N = 8fSAMPLING = 42 / 32 = 1.3125MHz。则频率高于1.3 / 8 = 0.164MHz的被采样信号将被滤波器滤除,按键抖动信号在此列当中,因此可以很好地完成硬件按键消抖。

参考资料:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值