龙空技术网

「STM32」定时器中断实验

陌上的零 501

前言:

而今看官们对“定时器中断实验代码”大致比较注重,同学们都需要知道一些“定时器中断实验代码”的相关知识。那么小编在网摘上汇集了一些关于“定时器中断实验代码””的相关资讯,希望各位老铁们能喜欢,同学们一起来了解一下吧!

在上一篇文章中《[STM32]定时器概述》中,定时器可以被人为分为4个大部分,时钟发生器、实际模块、输入捕获、输出比较,而定时器中断实验,我们更多的在操作时钟发射器这个模块,这个应用也是定时器最基本的应用了。

时钟选择

内部时钟选择

时钟计算方法

计数器模式

向上计数模式:

时钟分频因子为1,那么:

首先,定时器需要使能,计数器的存储值就会从0开始计数,当计数到装载的值的时候,计数器就会溢出,就会产生一个更新事件,更新中断标志置位。要是使能了中断,就会执行中断服务程序,

定时器中断实验相关的寄存器

不过这些我们要是使用标准固件库来开发的话,简单的了解一下就好了,但是要是使用寄存器开发,那就需要更加详细的了解了。我一般使用的是固件库。

需要用到的库函数定时器中断的一般实现步骤示例:通过定时器中断配置,使用定时器3实现每500ms中断一次,在中断服务程序中实现某种动作。使用定时器4实现每1s中断一次,在中断服务程序中实现某种动作。

溢出时间的计算:

固件库中的APB1的预分频系数为2 所以这个定时器的时钟是72MHz

定时器时钟经过PSC预分频器之后即:CK_CNT 用来驱动计数器计数

PSC是一个16位的分频器,

记一次数的时间:ck_clk = 72M/(PSC +1)的倒数

产生一次中断的时间 = 1/(ck_clk * ARR )

那么定时时间为:(1/ck_clk) * (ARR + 1)

ARR:自动装载寄存器的值,当计数器计数达到这个值的时候就会有中断溢出

PSC:时钟预分频数

一个简单的计算方法:(PSC+1)/ck_clk 其实就是一个时间周期的时间长度,在乘以ARR + 1这个为计时的长度,那这样就是总的计数时间了。

ck_clk = 72M (固定的)

假如:PSC = 7199 ,PSC+1 = 72000

(PSC+1)/ck_clk = 0.1ms

那你要定时500ms 那么就需要ARR + 1 = 5000,那么ARR = 4999

源码

timer.h

timer.c

main.c

喜欢我文章的朋友,欢迎关注、点赞、评论、交流。版权个人所有,转载请注明出处。

标签: #定时器中断实验代码