一、定时器概述
STM32F10x系列总共最多有8个定时器。

基本定时器是通用定时器的简化版本。
二、通用定时器功能特点
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)等。定时和技术。

三、通用定时器的工作过程

1、上半部分为时钟发生器,可以为下半部分提供时钟信号。它的时钟可以是APB1倍频得来的。也就是说,通用定时器的时钟可以是由APB1倍频得来的。
2、预分频器+计数器+自动重装在寄存器为一部分。
3、左下方为输入捕获部分,捕获通道对应的引脚上的电平。可以捕获上升沿,再捕获下降沿,然后就可以计算脉冲的宽度
4、右下方为输出比较部分。
5、剩下的为几个寄存器。
四、定时器中断实验
1、时钟
定时器的时钟默认为内部时钟,时钟计算方法如下:

在上图中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();
一、定时器概述
STM32F10x系列总共最多有8个定时器。

基本定时器是通用定时器的简化版本。
二、通用定时器功能特点
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)等。定时和技术。

三、通用定时器的工作过程

1、上半部分为时钟发生器,可以为下半部分提供时钟信号。它的时钟可以是APB1倍频得来的。也就是说,通用定时器的时钟可以是由APB1倍频得来的。
2、预分频器+计数器+自动重装在寄存器为一部分。
3、左下方为输入捕获部分,捕获通道对应的引脚上的电平。可以捕获上升沿,再捕获下降沿,然后就可以计算脉冲的宽度
4、右下方为输出比较部分。
5、剩下的为几个寄存器。
四、定时器中断实验
1、时钟
定时器的时钟默认为内部时钟,时钟计算方法如下:

在上图中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();
举报