1. 定时器基础:从时钟源说起
朋友们,今天咱们来聊聊STM32定时器的配置实战。说到定时器,这绝对是嵌入式开发中最常用的外设之一,无论是做精准延时、PWM输出,还是测量脉冲宽度,都离不开它。我自己刚开始学STM32的时候,最头疼的就是定时器的配置,特别是那一堆参数:Prescaler、Counter Period、Clock Source... 简直让人眼花缭乱。
其实理解定时器的工作原理并不难。想象一下,定时器就像一个精准的"秒表",它需要有一个稳定的"心跳"来计时。这个"心跳"就是时钟源,可以是内部的高速时钟(HSI),也可以是外部的高速时钟(HSE)。系统时钟Tclk就是这个"心跳"的频率,比如常见的72MHz。
定时器的工作流程是这样的:时钟源信号先经过预分频器(Prescaler)进行分频,降低频率后再给到计数器。计数器从0开始,每个时钟周期加1,直到达到自动重载值(Counter Period)后产生溢出,同时触发中断或者事件。这个过程就像水龙头滴水到水桶里,水滴的速度就是分频后的频率,水桶的容量就是自动重载值,水满溢出就代表时间到了。
在实际项目中,我经常用定时器来做精准延时。比如需要每隔5ms采集一次传感器数据,或者控制LED以特定频率闪烁。这时候就需要准确计算Prescaler和Counter Period的值,这也是很多新手最容易出错的地方。
2. 关键参数详解:Prescaler与Counter Period
2.1 预分频器(Prescaler)的作用
Prescaler这个词听起来很高大上,其实它的作用很简单:就是降低时钟频率。为什么要降低频率呢?因为系统时钟往往很高(比如72MHz),如果直接用来计数,计数器会累加得飞快,很快就溢出了。通过Prescaler分频,我们可以获得更适合具体应用的计时频率。
计算公式很简单:Td = Tclk / (Prescaler + 1)。这里Tclk是系统时钟频率,Td是我们想要的定时器工作频率。为什么要加1呢?因为Prescaler是个16位寄存器,它的值是从0开始计数的。当Prescaler=0时,就是1分频(不分频);Pres


6999

被折叠的 条评论
为什么被折叠?



