Skip to content

定时器

image-20231029095925333

定时器的工作频率: 外设总线频率/(PSC+1)

定时频率: 定时器工作频率/(CNT+1)

image-20231029102228210

影子寄存器在这里实际上才是在比较的时候起作用的,也就是为预装载寄存器做缓冲,目的是为了当预装载寄存器ARR中的值更新后,影子寄存器仍然保持原来的值(这是在ARPE=1的情况下),参与比较操作的是影子寄存器,所以这样不会影响到计数器的工作误差。它在更新事件发生之后影子寄存器的值才从ARR寄存器那里获得更新,它也有同步的作用,使所有的相关寄存器数值都同时更新。 当ARPE为0时,影子寄存器是立即更新的,不等待更新事件 的发生。 那为什么非得弄个影子寄存器呢?大家想想啊。因为定时器里面有这样一句话:“计数器、自动装载寄存器和预分频器寄存器可以由软件读写,在计数器运行时仍可以读写”。在运行时就可以写自动装载寄存器,那么当你对自动装载寄存器进行写入新值时,如果你的没有影子寄存器,那么肯定的你的计数器在这次溢出就会不准确。而如果有了影子寄存器且ARPE=1,那就不会出现这种情况了。起到了一个缓冲作用。

在使用影子寄存器的时候写入的时候会写入的值不会立刻更新, 而是在发生事件之后更新

image-20231029105854446

image-20231029105946719

image-20231029110339836

c
  /* USER CODE BEGIN TIM7_Init 2 */
	HAL_TIM_Base_Start_IT(&htim7);
  /* USER CODE END TIM7_Init 2 */

使用这个函数进行开启

高级定时器

image-20231029224632618

  • 16位的递增递减重装载寄存器
  • 16位的预分频寄存器
  • 四个独立通道: 输入捕获, 输出比较, PWM生成(边缘或中间对齐模式)
  • 死区可编程
  • 使用外部信号控制定时器和定时器互联的同步电路
  • 允许在指定书目计数器周期后更新定时器寄存器重读计数器
  • 刹车输入信号可以将定时器输出信号置于复位状态或者一个已知状态
  • 如下事件发生时产生中断/DMA: 更新:计数器向上溢出/向下溢出,计数器初始化(通过软件或者内部/外部触发) , 触发事件(计数器启动、停止、初始化或者由内部/外部触发计数), 输入捕获, 输出比较, 刹车信号输入
  • 支持针对定位的增量(正交)编码器和霍尔传感器电路
  • 触发输入作为外部时钟或者按周期的电流管理

image-20231029220138202

捕获: 在捕获到的信号进行跳变的时候, 将计数器的值保存到捕获寄存器里面, 两次捕获的值相减就可以算出来脉宽

输入捕获

image-20231029222949431

  • 输入通道: 需要被测量的信号从定时器的外部引脚 TIMx_CH1/2/3/4 进入,通常叫 TI1/2/3/4
  • 输入滤波器: 当输入的信号存在高频干扰的时候,我们需要对输入信号进行滤波,即进行重新采样,根据采样 定律,采样的频率必须大于等于两倍的输入信号。比如输入的信号为 1M,又存在高频的信号干 扰,那么此时就很有必要进行滤波,我们可以设置采样频率为 2M
  • 边沿检测器用来设置信号在捕获的时候是什么边沿有效,可以是上升沿,下降沿,或者是双边沿, 具体的由 CCER 寄存器的位 CCxP 和 CCxNP 决定。
  • 捕获通道就是图中的 IC1/2/3/4,每个捕获通道都有相对应的捕获寄存器 CCR1/2/3/4,当发生捕获 的时候,计数器 CNT 的值就会被锁存到捕获寄存器中

输入通道和捕获通道的区别,输入通道是用来输入信号的,捕获通道是用来捕 获输入信号的通道,一个输入通道的信号可以同时输入给两个捕获通道。比如输入通道 TI1 的信 号经过滤波边沿检测器之后的 TI1FP1 和 TI1FP2 可以进入到捕获通道 IC1 和 IC2

  • PWM捕获

image-20231029223124911

PWM 信号由输入通道 TI1 进入,因为是 PWM 输入模式的缘故,信号会被分为两路,一路是 TI1FP1,另外一路是 TI2FP2。其中一路是周期,另一路是占空比,具体哪一路信号对应周期还 是占空比

image-20231029223746544

image-20231030160253148

c
  /* 启动定时器 */
  HAL_TIM_Base_Start_IT(&htim5);  
  /* 启动定时器通道输入捕获并开启中断 */
  HAL_TIM_IC_Start_IT(&htim5,TIM_CHANNEL_1);
  HAL_TIM_IC_Start_IT(&htim5,TIM_CHANNEL_2);

输出比较

image-20231029223004973

通过定时器的外部引脚对外输出控制信号,有冻结、将通道 X(x=1,2,3,4)设置为 匹配时输出有效电平、将通道 X 设置为匹配时输出无效电平、翻转、强制变为无效电平、强制变 为有效电平、PWM1 和 PWM2 这八种模式

image-20231029223825567

  • 边沿模式

计数器从 0 计数到自动重载值(TIMx_ARR 寄存器的内容),然后重新 从 0 开始计数并生成计数器上溢事件

image-20231029224330948

  • 中心对齐模式

image-20231029224407593

在中心对齐模式下,计数器 CNT 是工作做递增/递减模式下。开始的时候,计数器 CNT 从 0 开始 计数到自动重载值减 1(ARR-1),生成计数器上溢事件;然后从自动重载值开始向下计数到 1 并 生成计数器下溢事件。之后从 0 开始重新计数。

具体的区 别就是比较中断中断标志位 CCxIF 在何时置 1:中心模式 1 在 CNT 递减计数的时候置 1,中心对 齐模式 2 在 CNT 递增计数时置 1,中心模式 3 在 CNT 递增和递减计数时都置 1。