基本定时器(TIM4)
Gitee 空间跳转:https://gitee.com/galoc/stm8.git
1 概述
基本定时器是由一个 4 位可编程的预分频器和 8 位自动重装载向上计数器组成。它可以用于时基生成,并在定时器溢出时产生中断。
2 特性
- 8位自动重装载向上计数器(计数值:0-255),可计数236个。
- 4位可编程的预分频器(分频系数:1-32768之间任意2的指数幂(1、2、4、8…32768)),预分频器最大值计算方式为:2^ (2n -1)待确认
- 在更新事件 UEV(计数器溢出)时,可产生中断/DMA请求 UIF
3 基本定时器事如何工作的?(基本定时器框图)
① 时钟源
基本定时器的时钟源来自于内部时钟,由外设总线提供
②控制器
可以控制计数器复位、使能和计数
③计数器(时基单元)
溢出条件:CNT == ARR(影子)
影子寄存器是实际起作用的寄存器,不可直接访问。
写入 ARR 寄存器或 PSC 预分频器的值不能生效,要转移至ARR影子寄存器或 PSC 影子 PSC 预分频器才能生效。
当设置 ARR 具有缓冲作用时,更新事件(UEV)产生时,预装载寄存器的值才加载到对应的影子寄存器。ARR 无缓冲作用,会马上转移至影子寄存器。PSC预分频器类似。
4 相关寄存器
- TIMx_CR1.ARPE 自动重装载预装载使能(Aoto-reload preload enable)
0:TIMx_ARR 寄存器没有缓冲
1:TIMx_ARR 寄存器具有缓冲(ARR寄存器的值在运行中做变更,如小灯泡亮 1s,灭 2s) - TIMx_CR1.CEN 计数器使能(Counter enable)
0:关闭计数器
1:使能计数器
作用:用于设置 ARR 寄存器是否具有缓冲,以及使能/关闭计数器 - TIMx_DER.UDE DMA 请求使能寄存器(Updata DMA request enable)
0:禁止更新DMA请求
1:使能更新DMA请求,可以产生 DMA请求
作用:用于使能DMA请求 - TIMx_IER.UIE 中断使能寄存器 (Updata interrupt enable)
0:禁止更新中断
1:使能更新中断,可以产生更新中断
作用:用于使能更新中断 - TIMx_SR.UIF 更新中断标志(Update interrupt falg)
0:没有产生更新
1:产生了更新中断
作用:用于判断是否发生了更新中断,有硬件置1,软件清零 - TIMx_CNTR.CNT[7:0] 计数器数值(Counter Value)
作用:计数器实时数值,可用于设置计数器初始值,范围:0-255 (28-1) - TIM_PSCR.PSC[3:0] 预分频器值(Prescaler Value)
计数器的时钟频率 CK_CNT 等于 fck_psc/2(PSC[3:0]),预分频系数2(PSC[3:0])可以配置为 1-32768 之间的 2 的任意次幂(包括1、2、4、8…32768)
作用:用于设置预分频系数,范围:1-32748 - TIMx_ARR.ARR[7:0] 自动重装载数值(Auto-reload Value)
作用:用于设置自动重装载值,范围:0-255
5 定时器溢出时间计算
Tout = (ARR + 1)*(PSC)/fck_psc
Tout 是定时器溢出时间
fck_psc 是定时器的时钟源频率
ARR 是自动重装载寄存器的值
PSC 是预分频寄存器的值
Note
- ARR为啥要+1?
因为预装载值至少为1。如果自动重装载值为0,则计数器停止。
6 定时器中断实验配置步骤(先配置后使能)
使用定时器 4,实现 1ms 定时器更新中断,在中断里反转 Led_Blue
- 配置时钟源并使能相关外设时钟
- 配置定时器基本工作参数(预分频系数 PSC、自动重装载值 ARR、自动重装载预装载使能)
- 使能更新中断并启动计数器
- 设置优先级并使能中断
- 编写中断服务函数
- 编写定时器更新中断回调函数
相关函数介绍如下表:
函数 | 主要寄存器 | 主要功能 |
---|---|---|
Timer4_Base_Clock_Config | 配置时钟源并使能相关外设时钟 | |
Timer4_Base_Init | CR1、ARR、PSCR | 初始化定时器基本参数 |
Timer4_Base_Start_IT | IER、CR1 | 使能更新中断并启动计数器 |
TIM4_UPD_OVF_TRG_IRQHandler | SR | 定时器中断处理函数 |
__weak void Timer4_Callback() | 无 | 定时器更新中断回调函数,由用户重定义 |