定时器中断实验
一. 通用定时器的回顾
二. 常用寄存器和库函数配置
三. 编写定时器中断实验
1.1 内部时钟选择
内部时钟来源由AHB经过APB1的预分频产生时钟供定时器来用即产生内部时钟
除非APB1的分频系数是1,否则通用定时器的时钟等于APB1时钟的2倍。
默认调用SystemInit函数情况下:
SYSCLK = 72M
AHB时钟=72M
APB1时钟=36M
所以APB1的分频系数=AHB/APB1时钟=2
所以,通用定时器时钟CK_INT = 2*36M = 72M
1.2 计数器模式
向上计数模式(时钟分频因子=1)
首先使能定时器,由图看出自动重装载的值为36,当计数器寄存器读取到36时,会产生溢出事件,同时产生更新事件和更新中断标志。
2.1 定时器常用寄存器
1. 计数器当前值寄存器CNT
16位
2. 预分频寄存器TIMx_PSC
3. 自动重装载寄存器TIMx_ARR
4. 控制寄存器TIMx_CR1
主要用到位4和位0,位4控制方向;位0控制使能。
5. DMA中断使能寄存器TIMx_DIER
2.2 常用库函数
定时器参数初始化
void TIM_TimeBaseInit(TIM_TypeDef* TIMx,TIM_TimeBaseInitTypeDef* TIM_TimeBaseInitStruct);
typedef struct
{
uint16_t TIM_Prescaler;
uint16_t TIM_CounterMode;
uint16_t TIM_Period;
uint16_t TIM_ClockDivision;
uint8_t TIM_RepetitionCounter;
} TIM_TimeBaseInitTypeDef;
TIM_TimeBaseStructure.TIM_Period = 4999