分享免费的编程资源和教程

网站首页 > 技术教程 正文

STM32单片机从零开始使用教程(九) TIM定时器中断

goqiw 2025-07-01 19:24:12 技术教程 1 ℃ 0 评论

软件内部的计时总是不准的

比如说我们想每0.01s执行一次某个操作,代码中是

{

//执行的操作

}

Delay(10)

实际上每个周期的时长应该是10ms+操作花费时长

如果这是个很复杂的操作,那影响就很大了。

想更精确的控制在10ms,那就需要定时器中断

Cube的设置

在cube中打开TIM1,使用内部时钟源


还是来看一下架构图

TIM1挂载在APB2上,在cube中我们也可以在时钟树看的它的频率


现在我们知道它是16MHz了,如果想让他每10ms触发一次,可以设置分频系数1600,然后计数周期100,有 16000000 / 1600 / 100 = 100Hz,即10ms(当然由于是从0开始计数,所以这里我们都要给它-1)


开启中断


程序的编写

写了这么多程序其实大家应该已经熟悉套路了,无非就是while前做一下初始化,打开中断,然后重写一下回调函数


我们依然是在while前打开中断


然后重写我们的回调函数,烧录就可以在串口助手上看到不断发来的“TIM interrupt”


可以把之前调用单通道ADC的程序拿过来,这就变成了通过定时器中断实现较为准确的100Hz采样了。当然我们也可以和之前的DMA读取结合起来等等,都可以。


当然实际中我们这样采用中断触发ADC是绕远了,STM32f10x系列单片机是支持内部ADC接受定时器中断的,可以更直接的使用定时中断使其采样。

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表