|
STM32G474xx HAL 用户手册
|
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