1、本质上,定时器是一个计数器。
三种定时器的英文需要记一下。(一般常用的就是TIM1~8)。
蓝色框部分:功能是向下兼容的。
对于C8T6而言,内部拥有TIM1、TIM2、TIM3、TIM4。
2、理解定时器的内部结构(以基本定时器为例)\原理
- 主频顺着红色箭头传到预分频器,设预分频器是n位的,则可以对主频进行
分频。
对应的方波,成为计数器计数的时间间隔。当没有上限时,自动记录65536个脉冲后清零。
“自动重装载寄存器”提供计数上限。当数值=该上限时,(1)计数器清零;(2)产生更新中断经NVIC传给CPU,进而得到CPU的响应;(3)产生更新事件,触发内部其他电路的工作。(如上图所示)
实操部分
1、复制OLED文件,修改成如下内容:
2、定时器初始化分为几步:(结合下图,从左到右看)
(1)RCC开时钟:定时器的基准时钟和整个外设的时钟(如下图红圈部分)【APB1】
(2)选择时基单元的时钟源。本实验是定时中断,选择内部时钟模式即可【对应1073行】。
(3)配置时基单元,包括紫色框中的预分频器、计数器、自动重装器等(注1:它们3个的工作原理,上面已经讲过了)
(注2:用一个结构体即可配好这些参数)【用1055行的TimeBaseInit函数】
(4)配置中断输出控制,允许更新中断输出到NVIC。(也就是下图中从右往左倒数第二个方框)。
【用1069行的TIM_ITConfig函数】
(5)配置NVIC,在其中打开定时器中断的通道,并分配一个优先级。(这和之前外部中断基本一致)
(6)运行控制
在上述模块配置完后,还要使能计数器,否则不会计数。
在计数器正常工作时,如果到了天花板,则出发中断,调用中断函数。我们把显示屏自增的功能写在中断函数里,这样就可以时不时自增了(调用中断函数)。
3、上述初始化步骤,用到的库函数:视频13,10:21处
(1)下图中蓝色部分(时钟源选择),有6个函数,分别确定不同的工作模式(左边选哪个通道,穿过黄色部分)
(2)紫色的时基单元,用1055行的TimeBaseInit函数
(3)中断输出控制,用1069行的TIM_ITConfig函数
(4)NVIC,用之前讲外部中断见过的NVIC_Init函数(在杂项文件里找)
(5)运行控制(宏观调控时钟工作状态的),用1067行的TIM_Cmd函数
此外,还有一些个性化功能,对应的函数也在其中,这里就不列举了。