|
STM32G474xx HAL用户手册
|
00001 /** 00002 ****************************************************************************** 00003 * @file stm32g4xx_hal_tim_ex.c 00004 * @author MCD Application Team 00005 * @brief TIM HAL模块驱动程序。 00006 * 此文件提供固件函数,用于管理定时器扩展外设的以下功能: 00007 * + 时间霍尔传感器接口初始化 00008 * + 时间霍尔传感器接口启动 00009 * + 时间互补信号断开和死区时间配置 00010 * + 时间主从同步配置 00011 * + 时间输出比较/PWM通道配置(用于通道5和6) 00012 * + 时间OCRef清除配置 00013 * + 定时器重映射功能配置 00014 * + 定时器编码器索引配置 00015 ****************************************************************************** 00016 * @attention 00017 * 00018 * Copyright (c) 2019 STMicroelectronics. 00019 * 保留所有权利。 00020 * 00021 * 本软件根据可在本软件组件根目录中的LICENSE文件中找到的条款进行许可。 00022 * 如果本软件未附带LICENSE文件,则按原样提供。 00023 * 00024 ****************************************************************************** 00025 @verbatim 00026 ============================================================================== 00027 ##### 定时器扩展功能 ##### 00028 ============================================================================== 00029 [..] 00030 定时器扩展功能包括: 00031 (#) 用于以下功能的可编程死区时间互补输出: 00032 (++) 输出比较 00033 (++) PWM生成(边沿和中心对齐模式) 00034 (++) 单脉冲模式输出 00035 (#) 用于使用外部信号控制定时器并互连多个定时器的同步电路。 00036 (#) 断开输入,将定时器输出信号置于复位状态或已知状态。 00037 (#) 支持用于定位目的的增量(正交)编码器和霍尔传感器电路。 00038 (#) 在脉冲比较的情况下,配置脉冲长度和延迟。 00039 (#) 编码器索引配置。 00040 00041 ##### 如何使用此驱动程序 ##### 00042 ============================================================================== 00043 [..] 00044 (#) 通过实现以下函数来初始化TIM底层资源,具体取决于所选功能: 00045 (++) 霍尔传感器输出:HAL_TIMEx_HallSensor_MspInit() 00046 00047 (#) 初始化TIM底层资源: 00048 (##) 使用 __HAL_RCC_TIMx_CLK_ENABLE(); 使能TIM接口时钟。 00049 (##) TIM引脚配置 00050 (+++) 使用以下函数使能TIM GPIO的时钟: 00051 __HAL_RCC_GPIOx_CLK_ENABLE(); 00052 (+++) 使用HAL_GPIO_Init()将这些TIM引脚配置为复用功能模式; 00053 00054 (#) 如果需要,可以配置外部时钟(默认时钟是来自APBx的内部时钟), 00055 使用以下函数:HAL_TIM_ConfigClockSource,时钟配置应在任何启动函数之前完成。 00056 00057 (#) 使用此驱动程序的初始化函数之一将TIM配置为所需的工作模式: 00058 (++) HAL_TIMEx_HallSensor_Init() 和 HAL_TIMEx_ConfigCommutEvent():用于使用 00059 定时器霍尔传感器接口和换向事件,以及相应的中断和DMA请求(如果需要) 00060 (注意,一个定时器用于与霍尔传感器接口,另一个定时器用于使用换向事件)。 00061 (#) 在脉冲比较的情况下: 00062 (++) HAL_TIMEx_OC_ConfigPulseOnCompare():配置脉冲宽度和预分频器 00063 00064 00065 (#) 使用启动函数之一激活TIM外设: 00066 (++) 互补输出比较:HAL_TIMEx_OCN_Start(), HAL_TIMEx_OCN_Start_DMA(), 00067 HAL_TIMEx_OCN_Start_IT() 00068 (++) 互补PWM生成:HAL_TIMEx_PWMN_Start(), HAL_TIMEx_PWMN_Start_DMA(), 00069 HAL_TIMEx_PWMN_Start_IT() 00070 (++) 互补单脉冲模式输出:HAL_TIMEx_OnePulseN_Start(), HAL_TIMEx_OnePulseN_Start_IT() 00071 (++) 霍尔传感器输出:HAL_TIMEx_HallSensor_Start(), HAL_TIMEx_HallSensor_Start_DMA(), 00072 HAL_TIMEx_HallSensor_Start_IT(). 00073 00074 @endverbatim 00075 ****************************************************************************** 00076 */ 00077 00078 /* 包含文件 ------------------------------------------------------------------*/ 00079 #include "stm32g4xx_hal.h" 00080 00081 /** @addtogroup STM32G4xx_HAL_Driver 00082 * @{ 00083 */ 00084 00085 /** @defgroup TIMEx TIMEx 00086 * @brief TIM扩展HAL模块驱动程序 00087 * @{ 00088 */ 00089 00090 #ifdef HAL_TIM_MODULE_ENABLED 00091 00092 /* 私有类型定义 -----------------------------------------------------------*/ 00093 /* 私有定义 ------------------------------------------------------------*/ 00094 /* 私有常量 ---------------------------------------------------------*/ 00095 /** @defgroup TIMEx_Private_Constants TIM扩展私有常量 00096 * @{ 00097 */ 00098 /* 断开输入重新启动的超时时间 */ 00099 #define TIM_BREAKINPUT_REARM_TIMEOUT 5UL /* 5毫秒 */ 00100 /** 00101 * @} 00102 */ 00103 /* 私有常量结束 --------------------------------------------------*/ 00104 00105 /* 私有宏 ------------------------------------------------------------*/ 00106 /* 私有变量 ---------------------------------------------------------*/ 00107 /* 私有函数原型 -----------------------------------------------*/ 00108 static void TIM_DMADelayPulseNCplt(DMA_HandleTypeDef *hdma); 00109 static void TIM_DMAErrorCCxN(DMA_HandleTypeDef *hdma); 00110 static void TIM_CCxNChannelCmd(TIM_TypeDef *TIMx, uint32_t Channel, uint32_t ChannelNState); 00111 00112 /* 导出函数 --------------------------------------------------------*/ 00113 /** @defgroup TIMEx_Exported_Functions TIM扩展导出函数 00114 * @{ 00115 */ 00116 00117 /** @defgroup TIMEx_Exported_Functions_Group1 扩展定时器霍尔传感器函数 00118 * @brief 定时器霍尔传感器函数 00119 * 00120 @verbatim 00121 ============================================================================== 00122 ##### 定时器霍尔传感器函数 ##### 00123 ============================================================================== 00124 [..] 00125 本节提供允许以下操作的函数: 00126 (+) 初始化并配置TIM霍尔传感器。 00127 (+) 反初始化TIM霍尔传感器。 00128 (+) 启动霍尔传感器接口。 00129 (+) 停止霍尔传感器接口。 00130 (+) 启动霍尔传感器接口并使能中断。 00131 (+) 停止霍尔传感器接口并禁用中断。 00132 (+) 启动霍尔传感器接口并使能DMA传输。 00133 (+) 停止霍尔传感器接口并禁用DMA传输。 00134 00135 @endverbatim 00136 * @{ 00137 */ 00138 /** 00139 * @brief 初始化TIM霍尔传感器接口并初始化关联的句柄。 00140 * @note 当定时器实例在霍尔传感器接口模式下初始化时, 00141 * 定时器通道1和通道2被保留,不能用于其他目的。 00142 * @param htim TIM霍尔传感器接口句柄 00143 * @param sConfig TIM霍尔传感器配置结构 00144 * @retval HAL状态 00145 */ 00146 HAL_StatusTypeDef HAL_TIMEx_HallSensor_Init(TIM_HandleTypeDef *htim, const TIM_HallSensor_InitTypeDef *sConfig) 00147 { 00148 TIM_OC_InitTypeDef OC_Config; 00149 00150 /* 检查TIM句柄分配 */ 00151 if (htim == NULL) 00152 { 00153 return HAL_ERROR; 00154 } 00155 00156 /* 检查参数 */ 00157 assert_param(IS_TIM_HALL_SENSOR_INTERFACE_INSTANCE(htim->Instance)); 00158 assert_param(IS_TIM_COUNTER_MODE(htim->Init.CounterMode)); 00159 assert_param(IS_TIM_CLOCKDIVISION_DIV(htim->