定时器中断实验 定时器中断有什么用

在上一篇文章中《[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
【定时器中断实验 定时器中断有什么用】喜欢我文章的朋友 , 欢迎关注、点赞、评论、交流 。版权个人所有 , 转载请注明出处 。