1 / 11
文档名称:

stm32定时器.doc

格式:doc   大小:22KB   页数:11页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

stm32定时器.doc

上传人:wz_198614 2017/6/18 文件大小:22 KB

下载得到文件列表

stm32定时器.doc

相关文档

文档介绍

文档介绍:STM32 定时器定时器功能简介区别于 SysTick 一般只用于系统时钟的计时, STM32 的定时器外设功能非常强大。 STM32 一共有 8 个都为 16 位的定时器。其中 TIM6 、 TIM7 是基本定时器; TIM2 、 TIM3 、 TIM4 、 TIM5 是通用定时器; TIM1 和 TIM8 是高级定时器。这些定时器使 STM32 具有定时、信号的频率测量、信号的 PW M 测量、 PWM 输出、三相 6 步电机控制及编码器接口等功能,都是专门为工控领域量身定做的。定时器工作分析基本定时器基本定时器 TIM6 和 TIM7 只具备最基本的定时功能, 就是累加的时钟脉冲数超过预定值时,能触发中断或触发 DMA 请求。这两个基本定时器使用的时钟源都是 TIMxCLK ,时钟源经过 PSC 预分频器输入至脉冲计数器 T ,基本定时器只能工作在向上计数模式, 在重载寄存器 TIMx_ARR 中保存的是定时器的溢出值。工作时,脉冲计数器 T 由时钟触发进行计数,当 T 的计数值 X 等于重载寄存器 TIMx_ARR 中保存的数值 N时, 产生溢出事件, 可触发中断或 DMA 请求。然后 T 的值重新被置为 0, 重新向上计数。通用定时器相比之下, 通用定时器 TIM2~TIM5 就比基本定时器复杂得多了。除了基本的定时,它主要用在测量输入脉冲的频率、脉冲宽与输出 PWM 脉冲的场合,还具有编码器的接口。通用定时器的基本计时功能与基本定时器的工作方式是一样的,同样把时钟源经过预分频器输出到脉冲计数器 T 累加,溢出时就产生中断或 DMA 请求。而通用定时器比基本定时器多出的强大功能, 就是因为通用定时器多出了一种寄存器---- 捕获/ 比较寄存器 TIMx_CRR ( pare register ) 它在输入时被用于捕获( 存储) 输入脉冲在电平发生翻转时脉冲计数器 T 的当前计数值,从而实现脉冲的频率测量;在输出时被用来存储一个脉冲数值,把这个数值用于与脉冲计数器 T 的当前计数值进行比较,根据比较结果进行不同的电平输出定时器的时钟源从时钟源方面来说, 通用定时器比基本定时器多了一个选择, 它可以使用外部脉冲作为定时器的时钟源。如果选择内部时钟源的话则与基本定时器一样, 也为 TIMx_CLK 。但要注意的是, 所有定时器( 包括基本、通用和高级) 使用内部时钟时, 定时器的时钟源都被称为 TIMx_CLK ,但 TIMx_CL K 的时钟来源并不是完全一样的。 TIM2~TIM7 也就是基本定时器和通用定时器, TIMxCLK 的时钟来源是 APB1 预分频器的输出。当 APB1 的分频系数为 1时,则 TIM2~7 的 TIMx_CL K 直接等于该 APB1 预分频器的输出,而 APB1 的分频系数不为 1时, TIM2~ 7 的 TIMxCLK 则为 APB1 预分频输出的 2 倍。如在常见的配置中, AHB=72MHZ ,而 APB1 预分频器的分频系数被配置为 2 ,则 TIM2~TIM7 的时钟 TIMxCLK= ( AHB/2 ) *2=72MHz 。而对于 TIM1 和 TIM8 这两个高级定时器, TIMxCLK 的时钟来源则是 APB2 预分频器的输出,同样它也根据分频系数分为两种情况。常见的配置中 AHB=72MHz , APB2 预分频器的分频系数被配置为 1, 此时 TIMxCLK 则直接等于 APB2 预分频器的输出,即 TIM1 和 TIM8 的时钟 TIMxCLK=AHB=72MHz 。虽然这种配置下最终 TIMxCLK 的时钟频率相等, 但必须清楚实质上它们的时钟来源是有区别的。还要强调的是: TIMxCLK 是定时器内部的时钟源, 但在时钟输出到脉冲计数器 T 前, 还经过一个预分频器 PSC , 最终用于驱动脉冲计数器 T 的时钟频率根据预分频器 PSC 的配置而定。高级定时器 TIM1 和 TIM8 是两个高级定时器, 它们具有基本、通用定时器的所有功能, 还具有三相 6 步电机的接口、刹车功能( break down ) 及用于 PW M 驱动电路的死区时间控制等,使得它非常适合于电机的控制。 PWM 输出实例分析 main 文件我们先从 main 文件开始看本实验的执行流程: #include "" #include "" int main(void) { /* TIM3 PWM 波输出初始化,并使能 TIM3 PWM 输出*/ TIM3_PWM_Init(); while (1) {}} 我们看到, 代码的执行流程十分简单, 调用用户函数 TIM3_PWM_Init() 把 TIM 初始化成 PWM 输出模式后,内核就把所有工