STM32 基本定时器 学习笔记.doc
文本预览下载声明
1. STM32的Timer简介
STM32中一共有11个定时器,其中2个高级控制定时器,4个普通定时器和2个基本定时器,以及2个看门狗定时器和1个系统嘀嗒定时器。其中系统嘀嗒定时器是前文中所描述的SysTick,看门狗定时器以后再详细研究。今天主要是研究剩下的8个定时器。
定时器计数器分辨率计数器类型预分频系数产生DMA请求捕获/比较通道互补输出TIM1
TIM816位向上,向下,向上/向下1-65536之间的任意数可以4有TIM2
TIM3
TIM4
TIM516位向上,向下,向上/向下1-65536之间的任意数可以4没有TIM6
TIM716位向上1-65536之间的任意数可以0没有其中TIM1和TIM8是能够产生3对PWM互补输出的高级登时其,常用于三相电机的驱动,时钟由APB2的输出产生。TIM2-TIM5是普通定时器,TIM6和TIM7是基本定时器,其时钟由APB1输出产生。由于STM32的TIMER功能太复杂了,所以只能一点一点的学习。因此今天就从最简单的开始学习起,也就是TIM2-TIM5普通定时器的定时功能。
2基本定时器TIM6-TIM7
2.1 时钟基本特征
基本定时器TIM6和TIM7各包含一个16位自动装载计数器,由各自的可编程预分频器驱动。
它们可以作为通用定时器提供时间基准,特别地可以为数模转换器(DAC) 提供时钟。实际上,它
们在芯片内部直接连接到DAC并通过触发输出直接驱动DAC。
这2个定时器是互相独立的,不共享任何资源。
2.2 TIM6-7主要特征
TIM6和TIM7定时器的主要功能包括:
● 16位自动重装载累加计数器
● 16位可编程( 可实时修改)预分频器,用于对输入的时钟按系数为1~65536 之间的任意数值
分频
● 触发DAC的同步电路
● 在更新事件(计数器溢出)时产生中断/DMA 请求
图144 基本定时器框图
2.3 计数器模式
TIM6-TIM7可以由向上计数。向上计数模式中,计数器从0计数到自动加载值(TIMx_ARR计数器内容),然后重新从0开始计数并且产生一个计数器溢出事件。
2.4 编程步骤
1. 配置优先级;
2. 使能时钟
3. 配置GPIO;
4. 配置TIME;
5.使能计数器;
6.开中断;
7.清除标志位;
具体配置如下:
(1) NVIC_Configuration(void);配置优先级
(2) void RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState)使能时钟
(3) void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct);配置GPIO
(4) TIM_Configuration (void);配置TIM6/TIM7
(5) TIM_Cmd(TIM7, ENABLE);使能定时器
(6) TIM_ITConfig(TIM7,TIM_IT_Update,ENABLE);使能中断
(7) TIM_ClearFlag(TIM7, TIM_FLAG_Update);清除标志位
步骤(4)中的预分频系数用来确定TIMx所使用的时钟频率,具体计算方法为:CK_INT/(TIM_Perscaler+1)。CK_INT是内部时钟源的频率,是根据2.1中所描述的APB1的倍频器送出的时钟,TIM_Perscaler是用户设定的预分频系数,其值范围是从0 – 65535。
步骤(4)中的时钟分割定义的是在定时器时钟频率(CK_INT)与数字滤波器(ETR,TIx)使用的采样频率之间的分频比例。TIM_ClockDivision的参数如下表:
TIM_ClockDivision描述二进制值TIM_CKD_DIV1tDTS = Tck_tim0x00TIM_CKD_DIV2tDTS = 2 * Tck_tim0x01TIM_CKD_DIV4tDTS = 4 * Tck_tim0x10步骤(4)中需要禁止使用预装载缓冲器。当预装载缓冲器被禁止时,写入自动装入的值(TIMx_ARR)的数值会直接传送到对应的影子寄存器;如果使能预加载寄存器,则写入ARR的数值会在更新事件时,才会从预加载寄存器传送到对应的影子寄存器。
ARM中,有的逻辑寄存器在物理上对应2个寄存器,一个是程序员可以写入或读出的寄存器,称为preload register(预装载寄存器),另一个是程序员看不见的、但在操作中真正起作用的寄存器,称为shadow register(影子寄存器);设计preload
显示全部