STM32F1学习笔记:通用定时器基本原理

一、定时器概述
STM32F10x系列总共最多有8个定时器。
STM32F1学习笔记:通用定时器基本原理_第1张图片
基本定时器是通用定时器的简化版本。

二、通用定时器功能特点
1、位于低速的APB1总线上。
2、16位向上、向下、向上/向下(中心对齐)计数模式,自动装载计数器(TIMx_CNT)。
3、16位可编程(可以实时修改)预分频器(TIMx_PSC),计数器时钟频率的分频系数为1~65535之间的任意数值。
4、每一个定时器都有4个独立通道(TIMx_CH1~4),这些通道可以用来作为:输入捕获、输出比较、PWM生成(边缘或中间对齐模式)、单脉冲模式输出。
5、可使用外部信号(TIMx_ETR)控制定时器和定时器互联(可以用1个定时器控制另1个定时器)的同步电路。
6、可以产生中断/DMA请求(6个独立的IRQ/DMA请求生成器)。

作用:测量输入信号的脉冲长度(输入捕获)或者产生输出波形(输出比较和PWM)等。定时和技术。
STM32F1学习笔记:通用定时器基本原理_第2张图片
三、通用定时器的工作过程
STM32F1学习笔记:通用定时器基本原理_第3张图片
STM32F1学习笔记:通用定时器基本原理_第4张图片
1、上半部分为
时钟发生器
,可以为下半部分提供时钟信号。它的时钟可以是APB1倍频得来的。也就是说,通用定时器的时钟可以是由APB1倍频得来的。
2、预分频器+计数器+自动重装在寄存器为一部分。
3、左下方为输入捕获部分,捕获通道对应的引脚上的电平。可以捕获上升沿,再捕获下降沿,然后就可以计算脉冲的宽度
4、右下方为输出比较部分。
5、剩下的为几个寄存器。

四、定时器中断实验
1、时钟
定时器的时钟默认为内部时钟,时钟计算方法如下:
STM32F1学习笔记:通用定时器基本原理_第5张图片
在上图中CK_INT = CK_PSC,CK_CNT即为定时器最终的时钟。
2、相关寄存器
计数器当前值寄存器(CNT):16位
预分频寄存器TIMx_PSC:16位
自动重装载寄存器(TIMx_ARR):16位
控制寄存器(TIMx_CR1):确定计数方向,使能
DMA中断使能寄存器(TIMx_DIER)
3、相关库函数
定时器参数初始化:

void TIM_TimeBaseInit(TIM_TypeDef* TIMx, TIM_TimeBaseInitTypeDef* TIM_TimeBaseInitStruct);

定时器使能函数:

void TIM_Cmd(TIM_TypeDef* TIMx, FunctionalState NewState);

定时器中断使能函数:

void TIM_ITConfig(TIM_TypeDef* TIMx, uint16_t TIM_IT, FunctionalState NewState);

状态标志位获取和清除

FlagStatus TIM_GetFlagStatus(TIM_TypeDef* TIMx, uint16_t TIM_FLAG);
void TIM_ClearFlag(TIM_TypeDef* TIMx, uint16_t TIM_FLAG);
ITStatus TIM_GetITStatus(TIM_TypeDef* TIMx, uint16_t TIM_IT);
void TIM_ClearITPendingBit(TIM_TypeDef* TIMx, uint16_t TIM_IT);

4、定时器中断实现步骤
使能定时器时钟

RCC_APB1PeriphClockCmd();

初始化定时器,配置ARR,PSC

TIM_TimeBaseInit();

开启定时器中断,配置NVIC

void TIM_ITConfig();
NVIC_Init();//中断优先级分组等

使能定时器

TIM_Cmd();

编写中断服务函数

TIMx_IRQHandler();

你可能感兴趣的:(stm32,嵌入式)