STM32G474xx HAL 用户手册
stm32g4xx_hal_tim.c
转到此文件的文档。
00001 /**
00002   ******************************************************************************
00003   * @file    stm32g4xx_hal_tim.c
00004   * @author  MCD Application Team
00005   * @brief   TIM HAL 模块驱动程序。
00006   *          此文件提供固件函数,用于管理定时器 (TIM) 外设的以下功能:
00007   *           + TIM 时间基准初始化
00008   *           + TIM 时间基准启动
00009   *           + TIM 时间基准启动中断
00010   *           + TIM 时间基准启动 DMA
00011   *           + TIM 输出比较/PWM 初始化
00012   *           + TIM 输出比较/PWM 通道配置
00013   *           + TIM 输出比较/PWM  启动
00014   *           + TIM 输出比较/PWM  启动中断
00015   *           + TIM 输出比较/PWM 启动 DMA
00016   *           + TIM 输入捕获初始化
00017   *           + TIM 输入捕获通道配置
00018   *           + TIM 输入捕获启动
00019   *           + TIM 输入捕获启动中断
00020   *           + TIM 输入捕获启动 DMA
00021   *           + TIM 单脉冲初始化
00022   *           + TIM 单脉冲通道配置
00023   *           + TIM 单脉冲启动
00024   *           + TIM 编码器接口初始化
00025   *           + TIM 编码器接口启动
00026   *           + TIM 编码器接口启动中断
00027   *           + TIM 编码器接口启动 DMA
00028   *           + 使用中断和 DMA 进行换向事件配置
00029   *           + TIM OCRef 清除配置
00030   *           + TIM 外部时钟配置
00031   ******************************************************************************
00032   * @attention
00033   *
00034   * Copyright (c) 2019 STMicroelectronics.
00035   * 保留所有权利。
00036   *
00037   * 本软件的许可条款可在本软件组件根目录下的 LICENSE 文件中找到。
00038   * 如果本软件未附带 LICENSE 文件,则按原样提供。
00039   *
00040   ******************************************************************************
00041   @verbatim
00042   ==============================================================================
00043                       ##### 定时器通用功能 #####
00044   ==============================================================================
00045   [..] 定时器功能包括:
00046        (#) 16位向上、向下、向上/向下自动重载计数器。
00047        (#) 16位可编程预分频器,允许将计数器时钟频率分频(也可在运行时进行),
00048            分频系数为1到65536之间的任意值。
00049        (#) 最多4个独立通道,用于:
00050            (++) 输入捕获
00051            (++) 输出比较
00052            (++) PWM生成(边沿和中心对齐模式)
00053            (++) 单脉冲模式输出
00054        (#) 同步电路,用于使用外部信号控制定时器以及将多个定时器互连。
00055        (#) 支持用于定位目的的增量编码器
00056 
00057             ##### 如何使用此驱动程序 #####
00058   ==============================================================================
00059     [..]
00060      (#) 通过实现以下函数来初始化 TIM 底层资源,具体取决于所选功能:
00061            (++) 时间基准 : HAL_TIM_Base_MspInit()
00062            (++) 输入捕获 : HAL_TIM_IC_MspInit()
00063            (++) 输出比较 : HAL_TIM_OC_MspInit()
00064            (++) PWM生成 : HAL_TIM_PWM_MspInit()
00065            (++) 单脉冲模式输出 : HAL_TIM_OnePulse_MspInit()
00066            (++) 编码器模式输出 : HAL_TIM_Encoder_MspInit()
00067 
00068      (#) 初始化 TIM 底层资源:
00069         (##) 使用 __HAL_RCC_TIMx_CLK_ENABLE(); 启用 TIM 接口时钟。
00070         (##) TIM 引脚配置
00071             (+++) 使用以下函数启用 TIM GPIO 的时钟:
00072              __HAL_RCC_GPIOx_CLK_ENABLE();
00073             (+++) 使用 HAL_GPIO_Init() 将这些 TIM 引脚配置为复用功能模式;
00074 
00075      (#) 如果需要,可以配置外部时钟(默认时钟为来自 APBx 的内部时钟),
00076          使用以下函数:HAL_TIM_ConfigClockSource,时钟配置应在任何启动函数之前完成。
00077 
00078      (#) 使用此驱动程序的初始化函数之一,将 TIM 配置为所需的工作模式:
00079        (++) HAL_TIM_Base_Init:使用定时器生成简单的时间基准
00080        (++) HAL_TIM_OC_Init、HAL_TIM_OC_ConfigChannel 以及可选的 HAL_TIMEx_OC_ConfigPulseOnCompare:
00081             使用定时器生成输出比较信号。
00082        (++) HAL_TIM_PWM_Init 和 HAL_TIM_PWM_ConfigChannel:使用定时器生成 PWM 信号。
00083        (++) HAL_TIM_IC_Init 和 HAL_TIM_IC_ConfigChannel:使用定时器测量外部信号。
00084        (++) HAL_TIM_OnePulse_Init 和 HAL_TIM_OnePulse_ConfigChannel:使用定时器在单脉冲模式下工作。
00085        (++) HAL_TIM_Encoder_Init:使用定时器编码器接口。
00086 
00087      (#) 根据所使用的功能,使用以下启动函数之一激活 TIM 外设:
00088            (++) 时间基准 : HAL_TIM_Base_Start(), HAL_TIM_Base_Start_DMA(), HAL_TIM_Base_Start_IT()
00089            (++) 输入捕获 :  HAL_TIM_IC_Start(), HAL_TIM_IC_Start_DMA(), HAL_TIM_IC_Start_IT()
00090            (++) 输出比较 : HAL_TIM_OC_Start(), HAL_TIM_OC_Start_DMA(), HAL_TIM_OC_Start_IT()
00091            (++) PWM生成 : HAL_TIM_PWM_Start(), HAL_TIM_PWM_Start_DMA(), HAL_TIM_PWM_Start_IT()
00092            (++) 单脉冲模式输出 : HAL_TIM_OnePulse_Start(), HAL_TIM_OnePulse_Start_IT()
00093            (++) 编码器模式输出 : HAL_TIM_Encoder_Start(), HAL_TIM_Encoder_Start_DMA(), HAL_TIM_Encoder_Start_IT().
00094 
00095      (#) DMA 突发传输由以下两个函数管理:
00096          HAL_TIM_DMABurst_WriteStart()
00097          HAL_TIM_DMABurst_ReadStart()
00098 
00099     *** 回调注册 ***
00100   =============================================
00101 
00102   [..]
00103   编译定义 USE_HAL_TIM_REGISTER_CALLBACKS 设置为 1 时,
00104   允许用户动态配置驱动程序回调。
00105 
00106   [..]
00107   使用函数 HAL_TIM_RegisterCallback() 注册回调。
00108   HAL_TIM_RegisterCallback() 的参数为 HAL 外设句柄、
00109   回调 ID 和指向用户回调函数的指针。
00110 
00111   [..]
00112   使用函数 HAL_TIM_UnRegisterCallback() 将回调重置为默认的弱函数。
00113   HAL_TIM_UnRegisterCallback 的参数为 HAL 外设句柄和回调 ID。
00114 
00115   [..]
00116   这些函数允许注册/注销以下回调:
00117     (+) Base_MspInitCallback              : TIM 基础 Msp 初始化回调。
00118     (+) Base_MspDeInitCallback            : TIM 基础 Msp 反初始化回调。
00119     (+) IC_MspInitCallback                : TIM 输入捕获 Msp 初始化回调。
00120     (+) IC_MspDeInitCallback              : TIM 输入捕获 Msp 反初始化回调。
00121     (+) OC_MspInitCallback                : TIM 输出比较 Msp 初始化回调。
00122     (+) OC_MspDeInitCallback              : TIM 输出比较 Msp 反初始化回调。
00123     (+) PWM_MspInitCallback               : TIM PWM Msp 初始化回调。
00124     (+) PWM_MspDeInitCallback             : TIM PWM Msp 反初始化回调。
00125     (+) OnePulse_MspInitCallback          : TIM 单脉冲 Msp 初始化回调。
00126     (+) OnePulse_MspDeInitCallback        : TIM 单脉冲 Msp 反初始化回调。
00127     (+) Encoder_MspInitCallback           : TIM 编码器 Msp 初始化回调。
00128     (+) Encoder_MspDeInitCallback         : TIM 编码器 Msp 反初始化回调。
00129     (+) HallSensor_MspInitCallback        : TIM 霍尔传感器 Msp 初始化回调。
00130     (+) HallSensor_MspDeInitCallback      : TIM 霍尔传感器 Msp 反初始化回调。
00131     (+) PeriodElapsedCallback             : TIM 周期溢出回调。
00132     (+) PeriodElapsedHalfCpltCallback     : TIM 周期溢出半完成回调。
00133     (+) TriggerCallback                   : TIM 触发回调。
00134     (+) TriggerHalfCpltCallback           : TIM 触发半完成回调。
00135     (+) IC_CaptureCallback                : TIM 输入捕获回调。
00136     (+) IC_CaptureHalfCpltCallback        : TIM 输入捕获半完成回调。
00137     (+) OC_DelayElapsedCallback           : TIM 输出比较延迟溢出回调。
00138     (+) PWM_PulseFinishedCallback         : TIM PWM 脉冲完成回调。
00139     (+) PWM_PulseFinishedHalfCpltCallback : TIM PWM 脉冲半完成回调。
00140     (+) ErrorCallback                     : TIM 错误回调。
00141     (+) CommutationCallback               : TIM 换向回调。
00142     (+) CommutationHalfCpltCallback       : TIM 换向半完成回调。
00143     (+) BreakCallback                     : TIM 刹车回调。
00144     (+) Break2Callback                    : TIM 刹车2回调。
00145     (+) EncoderIndexCallback              : TIM 编码器索引回调。
00146     (+) DirectionChangeCallback           : TIM 方向改变回调
00147     (+) IndexErrorCallback                : TIM 索引错误回调。
00148     (+) TransitionErrorCallback           : TIM 转换错误回调
00149 
00150   [..]
00151 默认情况下,初始化后且状态为 HAL_TIM_STATE_RESET 时,
00152 所有中断回调都设置为相应的弱函数:
00153   例如 HAL_TIM_TriggerCallback()、HAL_TIM_ErrorCallback()。
00154 
00155   [..]
00156   MspInit 和 MspDeInit 函数是例外,仅在这些回调为空(未事先注册)时,
00157   在 Init / DeInit 中重置为传统的弱功能。否则,如果 MspInit 或 MspDeInit 不为空,
00158   Init / DeInit 将保留并使用用户 MspInit / MspDeInit 回调(事先注册)
00159 
00160   [..]
00161     回调只能在 HAL_TIM_STATE_READY 状态下注册/注销。
00162     例外情况是 MspInit / MspDeInit,可以在 HAL_TIM_STATE_READY 或 HAL_TIM_STATE_RESET 状态下注册/注销,
00163     因此注册的(用户)MspInit / DeInit 回调可在 Init / DeInit 期间使用。
00164   在这种情况下,请先使用 HAL_TIM_RegisterCallback() 注册 MspInit/MspDeInit 用户回调,
00165       然后再调用 DeInit 或 Init 函数。
00166 
00167   [..]
00168       当编译定义 USE_HAL_TIM_REGISTER_CALLBACKS 设置为 0 或未定义时,
00169       回调注册功能不可用,所有回调都设置为相应的弱函数。
00170 
00171   @endverbatim
00172   ******************************************************************************
00173   */
00174 
00175 /* 包含 ------------------------------------------------------------------*/
00176 #include "stm32g4xx_hal.h"
00177 
00178 /** @addtogroup STM32G4xx_HAL_Driver