STM32
直播中

张秀兰

7年用户 1231经验值
私信 关注
[问答]

STM32F10x通用定时器是怎样进行工作的

STM32F10x通用定时器的功能特点有哪些呢?

STM32F10x通用定时器是怎样进行工作的?

回帖(1)

笪琳琳

2021-11-24 10:59:00
  一、定时器概述
  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();
举报

更多回帖

发帖
×
20
完善资料,
赚取积分