STM32F103ZE的定时器

整个stm32的时钟系统

STM32F103ZE的定时器_第1张图片

定时器个数和功能

STM32F103ZE的定时器_第2张图片

计数模式

通用定时器可以向上计数、向下计数、向上向下双向计数模式。
向上计数模式:计数器从0计数到自动加载值(TIMx_ARR),然后重新从0开始计数并且产生一个计数器溢出事件。
向下计数模式:计数器从自动装入的值(TIMx_ARR)开始向下计数到0,然后从自动装入的值重新开始,并产生一个计数器向下溢出事件。
中央对齐模式(向上/向下计数):计数器从0开始计数到自动装入的值-1,产生一个计数器溢出事件,然后向下计数到1并且产生一个计数器溢出事件;然后再从0开始重新计数

STM32F103ZE的定时器_第3张图片

通用定时

特点

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

产生中断条件:

如下事件发生时产生中断/DMA(6个独立的IRQ/DMA请求生成器): 
更新:计数器向上溢出/向下溢出,计数器初始化(通过软件或者内部/外部触发) 
触发事件(计数器启动、停止、初始化或者由内部/外部触发计数) 
输入捕获 
输出比较 
支持针对定位的增量(正交)编码器和霍尔传感器电路 
触发输入作为外部时钟或者按周期的电流管理

通用定时器工作过程
STM32F103ZE的定时器_第4张图片
STM32F103ZE的定时器_第5张图片
STM32F103ZE的定时器_第6张图片
STM32F103ZE的定时器_第7张图片
结合上面三张图,可以看出,APB1经过预分频(1倍/2倍),得到TIM2-7的内部时钟,再经过预分频PSC对TIM计数器进行加减,一个时钟周期对计数器加或减1
在这里插入图片描述

常用寄存器

STM32F103ZE的定时器_第8张图片
STM32F103ZE的定时器_第9张图片

常用函数

   void TIM_TimeBaseInit(TIM_TypeDef* TIMx,  TIM_TimeBaseInitTypeDef* TIM_TimeBaseInitStruct);
typedef struct
{
  uint16_t TIM_Prescaler;        
  uint16_t TIM_CounterMode;     
  uint16_t TIM_Period;        
  uint16_t TIM_ClockDivision;  
  uint8_t TIM_RepetitionCounter;
} TIM_TimeBaseInitTypeDef; 

TIM_TimeBaseStructure.TIM_Period = 4999; TIM_TimeBaseStructure.TIM_Prescaler =7199; TIM_TimeBaseStructure.TIM_ClockDivision =   TIM_CKD_DIV1; TIM_TimeBaseStructure.TIM_CounterMode =   TIM_CounterMode_Up; 
TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); 

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);

配置步骤

 能定时器时钟。
       RCC_APB1PeriphClockCmd();
②  初始化定时器,配置ARR,PSC。
      TIM_TimeBaseInit();
开启定时器中断,配置NVIC。
      void TIM_ITConfig();
      NVIC_Init();
④  使能定时器。
      TIM_Cmd();
⑥  编写中断服务函数。
      TIMx_IRQHandler();

你可能感兴趣的:(笔记,stm32,单片机,嵌入式硬件)