【STM32 HAL库】TIM定时器与CubeMX配置详解

【STM32 HAL库】TIM定时器与CubeMX配置

  • 前言
  • TIM定时器基本理论
  • 定时器的本质就是计数器!
  • 定时器的基本作用
  • 定时器分类
  • 定时器的外部时钟与从模式
  • TIM基本定时器
  • 理论
  • 应用
  • CubeMX配置
  • Keil5代码
  • 输入捕获
  • 理论
  • 应用
  • CubeMX配置
  • Keil5代码
  • PWM
  • 理论
  • 应用
  • CubeMX配置
  • Keil5代码
  • 前言

    本文为笔者学习TIM定时器知识的总结与复盘,基于keysking的系列视频,欢迎大家纠正文中错误

    TIM定时器基本理论

    定时器的本质就是计数器!

    定时器的基本计数功能可以通过不同计数方式的组合,实现普通定时、脉冲捕获、测量PWM占空比、输出PWM、编码器测速等功能

    定时器的基本作用

    设定一个时间,时间到了后,通过中断通知STM32执行某些程序

    定时器分类

    基本定时器

  • 基本的时间测量
  • 产生周期性中断
  • 通用定时器

  • 基本定时器功能
  • 输入捕获
  • 输出比较 生成PWM
  • 高级定时器

  • 通用定时器功能
  • 高精度工业电机控制
  • 定时器的外部时钟与从模式


    从模式:
    外部时钟模式1
    以外部输入信号作为外部时钟源
    复位模式
    计数器更新 重新计数 触发更新中断
    门模式
    根据电平 暂停或继续计数
    触发模式
    启动计数 常配合单脉冲

    TIM基本定时器

    理论

    基本定时功能与周期性产生中断

    影子寄存器
    预分频器与自动重装载寄存器控制着他们的影子寄存器
    在当前计数周期完成后 寄存器将新的值给到影子寄存器中 更新完成

    应用

    CubeMX配置


    开启TIM中断
    若要每过一个计时周期进入一次中断并完成某项任务 则需开启TIM中断

    定时器溢出时间 T(一个计时周期

    触发事件选择见该Blog

    一般情况下 :
    激活 –> 根据计时需求配置PSC ARR –> 使能自动重装载寄存器的影子寄存器 –> 其他默认

    Keil5代码

    启动定时器计时功能 + 开启定时器中断

     HAL_TIM_Base_Start_IT(TIM_Handle TypeDef* htim);
    

    “定时器溢出”中断回调函数

    void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
    {	
    	//判断中断源为tim3(tim3计数器溢出),进入if
    	if(htim == &htim3)
    	{
    		//当tim3计数器溢出时的逻辑代码
    	}
    }
    

    其他函数

    //获取当前计数器的值
    __HAL_TIM_GET_COUNTER(TIM_Handle TypeDef* htim);
    //设置计数器的值
    __HAL_TIM_SET_COUNTER(TIM_Handle TypeDef* htim);
    //获取重装载寄存器的值
    __HAL_TIM_GET_AUTORELOAD(TIM_Handle TypeDef* htim);
    //设置重装载寄存器的值
    __HAL_TIM_SET_AUTORELOAD(TIM_Handle TypeDef* htim);
    //设置预分频器的值
    __HAL_TIM_SET_PRESCALER(TIM_Handle TypeDef* htim);
    

    输入捕获

    作为精确的计时器,检测到输入信号电平变化(上升沿或下降沿,并记录当时时间点(记录到捕获寄存器中供程序读取

    理论

    应用

    CubeMX配置



    Keil5代码

    开启输入捕获

    HAL_TIM_IC_Start(TIM_Handle TypeDef* htim,uint32_t Channel);
    

    开启输入捕获 + 开启输入捕获中断

    HAL_TIM_IC_Start_IT(TIM_Handle TypeDef* htim,uint32_t Channel);
    

    “输入捕获”中断回调函数

    void HAL_TIM_IC_Capturecallback(TIM_HandleTypeDef *htim){
    		//养成好习惯 先判断中断源是否来自TIM1的通道4
    	if (htim == &htim1 && htim>Channel==HAL_TIM_ACTIVE_CHANNEL 4){
    		//逻辑代码
    	}	
    }
    

    PWM

    理论


    PWM信号频率

    应用

    CubeMX配置

    Keil5代码

    开启PWM

    HAL_TIM_PWM_Start(TIM_Handle TypeDef* htim,uint32_t Channel);
    

    停止PWM

    HAL_TIM_PWM_Stop(TIM_Handle TypeDef* htim,uint32_t Channel);
    

    设置比较寄存器值

    __HAL_TIM_SET_COMPARE(TIM_Handle TypeDef* htim,uint32_t Channel,COMPARE);
    

    获取比较寄存器值

    __HAL_TIM_GET_COMPARE(TIM_Handle TypeDef* htim,uint32_t Channel);
    

    作者:Abaaba+

    物联沃分享整理
    物联沃-IOTWORD物联网 » 【STM32 HAL库】TIM定时器与CubeMX配置详解

    发表回复