本次博客以正点原子战舰资料以及STM32中文参考资料为主要参考。
本次博客主要讲解通用定时器中断,先讲解一下相关概念,然后在进行代码的实现。
**
通用定时器工作过程:
**(在定时器中断中,我们只是用到了定时器的时基单元)
**
时钟源
**
在介绍时基单元之前,我们还需要了解时钟源。从通用定时器的工作过程图我们可以看到,定时器的时钟来源有很多。而我们常用的便是来自RCC的TIMxCLK。
通用定时器是挂载在APB1总线上的,APB1的时钟最高为36MHZ。
这里的 CK_INT时钟是从 APB1 倍频的来的,除非 APB1 的时钟分频数设置为 1,否则通用定时器 TIMx 的时钟是 APB1时钟的2倍。
由STM32时钟系统框图以及默认调用SystemInit函数情况下,我们可以得出:CK_INT时钟为72MHz。即通用定时器的时钟频率是 72MHz。
**
时基单元
**
知道了时钟源后我们在来看时基单元。(大家在看下面概念的时候结合上面的图会更好的理解。)
时基单元包含:
● 预分频器寄存器 (TIMx_PSC)
● 计数器寄存器(TIMx_CNT)
● 自动装载寄存器 (TIMx_ARR)
1.TIMx_PSC预分频器可以将计数器的时钟频率按1到65536之间的任意值分频。
2.计数器由预分频器的时钟输出CK_CNT驱动 。
3.自动装载寄存器是预先装载的, 当计数器达到溢出条件(向下计数时的下溢条件) 产生更新事件。Arr的重装周期是1~65535。
**
计数器模式
**
计数器模式有三种,分别是:向上计数,向下计数,向上向下计数