STM32 | STM32CubeMX基础之TIM

一、定时器分类

定时器主要分为三类定时器:

基本定时器(TIM6,TIM7),通用定时器(TIM2~TIM5),高级定时器(TIM1,TIM8)。

  1. 基本定时器(TIM6,TIM7)

可以看到,基本定时器只能起到定时的作用,并不能像另两种定时器一样产生PWM等,计数器模式也只有“向上”一种。

  1. 通用定时器(TIM2~TIM5)
  • 位于低速的APB1总线上。

  • 16 位向上、向下、中心对齐计数模式,自动装载计数器(TIMx_CNT)。

  • 16 位可编程预分频器(TIMx_PSC),计数器时钟频率的分频系数为 1~65535 之间的任意数值。

  • 4 个独立通道(TIMx_CH1~4),这些通道可以用来作为:输入捕获、输出比较、PWM、单脉冲模式输出

  • 可使用外部信号(TIMx_ETR)控制定时器和定时器互连(可以用 1 个定时器控制另外一个定时器)的同步电路。

输入捕获:就是通过检测TIMx_CHx上的边沿信号,在边沿信号发生跳变(比如上升沿/下降沿)的时候,将当前定时器的值(TIMx_CNT)存放到对应的捕获/比较寄存器(TIMx_CCRx)里面,完成一次捕获。

输出比较:有一寄存器先存放你要定时的数,例如50,定时器在内部时钟下由0开始慢慢向上加,每加一次都会和那个寄存器比较,当等于那个寄存器值时 如50,此管脚就会跳变(输出一高电平或低电平),在PWM中会经常用到。

  1. 高级定时器(TIM1,TIM8)
二、定时器的时钟

TIM2~TIM7是挂在APB1上的,TIM1和TIM8是挂在APB2上的。

在STM32CubeMX中,TIM的Internal Clock来自下方的APBx Timer clock(MHz)。

三、定时器的时钟
  1. 时钟源(对应STM32CubeMX中Clock Source)
  • 内部时钟源 CK_INT:在STM32CubeMX中就是Internal Clock。

  • 外部时钟模式 1:外部输入引脚 TIx(x=1,2,3,4),在STM32CubeMX中就是Trig Source

  • 外部时钟模式 2:外部触发输入 ETR,在STM32CubeMX中就是Trig Source

  • 内部触发输入(ITRx),在STM32CubeMX中就是Trig Source

  1. 时基单元Time-base unit
  • 预分频器寄存器 (TIMx_PSC):设置分频器对时钟源的分频比或分频系数。

  • 计数器寄存器 (TIMx_CNT):向上计数、向下计数或者中心对齐计数

  • 自动重载寄存器 (TIMx_ARR):自动重装寄存器,为计数器设置计数边界或初始值,决定计数脉冲的多少或计时周期长短。比如计数器向上计数时,记到多少发生溢出;向下计数时从多少开始往下计数。带预装载使能控制位ARPE@TIMx_CR1。

  • 重复计数器寄存器 (TIMx_RCR):重复计数器,重复计数器是个向下计数器,当计数器发生 TIMx_RCR+1次溢出动作后会触发更新操作。

  • 捕捉/比较寄存器(TIMx_CCR):带预装载使能控制位OCxPE@TIMx_CCMR

  1. 输入捕获

TIMx_CH1——TIMx_CH4 这四个通道,在芯片中都有对应的引脚,当脉冲从通道口进入时,经过输入滤波器(抗干扰的作用),然后经过边沿检测器检测到上升沿(下降沿),经过分频器,输入到公用部分中的捕获寄存器中,然后捕获寄存器记录此刻CNT计数器的值,当下一次下降沿(上升沿)过来时,也记录下CNT计数器的值,这样就可以计算出输入脉冲的宽度。

4. 输出比较

比如在比较寄存器中预先设定一个值,计数器从初始值到装载值之间计数时,当正好等于比较寄存器中的预设值时,控制TIMx_CH1~TIMx_CH4通道输出低电平或者高电平,这样随着计数器不断的计数,就可以获得一个脉冲,通过调整预设值,就可以调整脉冲宽度,调整初始值和装载值就可以调整周期就如同一个闹钟一样。(注意输入捕获和输出比较不可以同时进行)


链接:STM32基础定时器详解_stm32定时器_strongercjd的博客-CSDN博客

STM32笔记 (十一)高级定时器详解_dts_ck_CYRIL0124的博客-CSDN博客

stm32初学之定时器TIM的基本定时功能以及介绍_stm32 tim_码农_风口的朱的博客-CSDN博客

STM32——基本定时器(TIM6,TIM7)工作过程,解读功能框图,时序分析,周期计算_stm32 tim7_青篱竹枫的博客-CSDN博客

四、使用定时器实现LED等闪烁
  1. CubeMX配置
  • 先选择TIM2的时钟为Internal Clock,同时在时钟树上设置APB1 Timer时钟为1MHz。

  • 设置预分频值为1000(填的999,实际中会+1),经过分频后的频率为1MHz/1000=1KHz。

  • 先设置TIMx_ARR的值为1000(同上),也就是当TIMx_CNT从0开始计算,刚好等于1000时生成事件,总共计数1000次。

  • 此时,一个时钟源周期为1ms,经过1000个周期刚好得到1s的定时周期。

  • 此外,打开该定时器的中断。设置PB5为GPIO Output作为LED灯的输出引脚。

  1. 代码
  • TIMx、GPIO时钟使能

  MX_GPIO_Init();
  MX_TIM2_Init();
  • 初始化定时器参数,设置自动重装值,分频系数,计数方式等

  void MX_TIM2_Init(void)
{
  /* 其他代码省略*/
  /* USER CODE BEGIN TIM2_Init 1 */

  /* USER CODE END TIM2_Init 1 */
  htim2.Instance = TIM2;
  htim2.Init.Prescaler = 1000-1;     //预分频
  htim2.Init.CounterMode = TIM_COUNTERMODE_UP;  
  htim2.Init.Period = 1000;    
  htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
  htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;

}
  • TIMx中断优先级设置

void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* tim_baseHandle)
{
  if(tim_baseHandle->Instance==TIM2)
  {
    /* TIM2 clock enable */
    __HAL_RCC_TIM2_CLK_ENABLE();

    /* TIM2 interrupt Init */
    HAL_NVIC_SetPriority(TIM2_IRQn, 1, 0);  //设置中断优先级
    HAL_NVIC_EnableIRQ(TIM2_IRQn);
  }
}
  • 手动打开定时器中断

HAL_TIM_Base_Start_IT(&htim2);  //位置在main函数内
  • 编写中断服务函数

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
    if(htim->Instance == TIM2)
    {
        HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_5);
    }
}
STM32CubeMX 是一个集成开发环境(IDE),用于快速配置 STM32 微控制器的软件和硬件参数。它可以帮助开发人员快速生成代码和配置文件,以便更快地开始使用 STM32 微控制器。 关于 STM32CubeMX 中的主从定时器,需要先了解 STM32 的定时器类型。在 STM32 中,有多种类型的定时器,包括基本定时器、通用定时器、高级定时器等。其中,通用定时器(TIM)是最常用的定时器之一,它可以实现很多功能,包括 PWM 输出、输入捕获、定时中断等。 在 STM32CubeMX 中,可以通过配置来实现定时器的主从模式。具体步骤如下: 1. 打开 STM32CubeMX,并选择相应的 STM32 微控制器型号。 2. 在左侧的菜单中选择“Timers”,然后选择要使用的定时器。 3. 在右侧的“Mode”选项卡中,选择“Master/Slave mode”选项,并选择“Enable”。 4. 配置主定时器和从定时器的参数,例如时钟源、分频系数、计数模式等。 5. 在主定时器的“DMA/Interrupt”选项卡中,选择“Update”中断,并使能中断。 6. 在从定时器的“Mode”选项卡中,选择“Slave mode”为“External clock mode 1”。 7. 在从定时器的“Clock configuration”选项卡中,选择“External clock source”为“ETR (TI1) input”。 通过以上步骤,就可以配置 STM32 的主从定时器模式。在该模式下,主定时器控制时钟源,从定时器通过外部时钟信号进行计数,从而实现同步计数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值