打印

HAL库源文件stm32h7xx_hal_tim_ex.c学习笔记,主要是霍尔传感器接口和互补输出(2018-08-13 V1.0)

[复制链接]
392|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
说明:
1、此文件主要实现定时器的扩展功能,主要是互补输出比较,互补PWM,互补单脉冲和外接霍尔传感器。



==============================================================================
                                                                  ##### 定时器扩展特性  #####
==============================================================================  
1、带可编程死区时间的互补输出。
(1)输出比较。
(2)PWM 生成(边沿和中心对齐模式)。
(3)单脉冲输出模式

2、使用外部信号控制定时器且可实现多个定时器互连的同步电路。

3、用于将定时器的输出信号置于复位状态或已知状态的断路输入。

4、支持增量(正交)编码器和霍尔传感器电路。
==============================================================================
                                                                  ##### 如何使用此驱动  #####
==============================================================================  
1、定时器几个常用功能使用的底层初始化API,这个里面是需要用户自己填的
(1) 互补输出比较: HAL_TIM_OC_MspInit()
(2) 互补PWM : HAL_TIM_PWM_MspInit()
(3) 互补单脉冲模式 : HAL_TIM_OnePulse_MspInit()
(4) 霍尔传感器输出 : HAL_TIM_HallSensor_MspInit()

2、定时器的底层配置
(1)使用函数__HAL_RCC_TIMx_CLK_ENABLE()使能定时器时钟。
(2)使用函数__HAL_RCC_GPIOx_CLK_ENABLE();  使能定时使用到的引脚时钟。
(3)使用函数HAL_GPIO_Init()配置GPIO的复用功能。

3、定时器默认使用APB时钟,如果使用外部时钟,调用函数HAL_TIM_ConfigClockSource可以配置。

4、定时器初始化函数
HAL_TIMEx_HallSensor_Init 用于霍尔传感器接口初始化。
HAL_TIMEx_ConfigCommutationEvent 用于Commutation Event ,且可以配置中断或者DMA方式。
注,当一个定时器用于霍尔传感器接口时,另一个定时器应用于Commutation Event 。

5、通过下面几个函数配置定时器工作在相应的模式:
(1) 互补输出比较 : HAL_TIMEx_OCN_Start(),   HAL_TIMEx_OCN_Start_DMA(),    HAL_TIMEx_OC_Start_IT()。
(2) 互补PWM  : HAL_TIMEx_PWMN_Start(),   HAL_TIMEx_PWMN_Start_DMA(),   HAL_TIMEx_PWMN_Start_IT()。
(3) 互补单脉冲模式: HAL_TIMEx_OnePulseN_Start(),   HAL_TIMEx_OnePulseN_Start_IT()。
(4) 霍尔传感器输出 : HAL_TIMEx_HallSensor_Start(),  HAL_TIMEx_HallSensor_Start_DMA(),   HAL_TIMEx_HallSensor_Start_IT()。


==============================================================================
                     ##### 函数Stop和Start无后缀表示查询方式,IT后缀表示中断方式,DMA表示DMA方式  #####
==============================================================================  

霍尔传感器的几个API:
HAL_StatusTypeDef HAL_TIMEx_HallSensor_Init(TIM_HandleTypeDef *htim, TIM_HallSensor_InitTypeDef* sConfig);
HAL_StatusTypeDef HAL_TIMEx_HallSensor_DeInit(TIM_HandleTypeDef *htim);

void HAL_TIMEx_HallSensor_MspInit(TIM_HandleTypeDef *htim);
void HAL_TIMEx_HallSensor_MspDeInit(TIM_HandleTypeDef *htim);

HAL_StatusTypeDef HAL_TIMEx_HallSensor_Start(TIM_HandleTypeDef *htim);
HAL_StatusTypeDef HAL_TIMEx_HallSensor_Stop(TIM_HandleTypeDef *htim);

HAL_StatusTypeDef HAL_TIMEx_HallSensor_Start_IT(TIM_HandleTypeDef *htim);
HAL_StatusTypeDef HAL_TIMEx_HallSensor_Stop_IT(TIM_HandleTypeDef *htim);

HAL_StatusTypeDef HAL_TIMEx_HallSensor_Start_DMA(TIM_HandleTypeDef *htim, uint32_t *pData, uint16_t Length);
HAL_StatusTypeDef HAL_TIMEx_HallSensor_Stop_DMA(TIM_HandleTypeDef *htim);


互补输出比较:

HAL_StatusTypeDef HAL_TIMEx_OCN_Start(TIM_HandleTypeDef *htim, uint32_t Channel);
HAL_StatusTypeDef HAL_TIMEx_OCN_Stop(TIM_HandleTypeDef *htim, uint32_t Channel);

HAL_StatusTypeDef HAL_TIMEx_OCN_Start_IT(TIM_HandleTypeDef *htim, uint32_t Channel);
HAL_StatusTypeDef HAL_TIMEx_OCN_Stop_IT(TIM_HandleTypeDef *htim, uint32_t Channel);

HAL_StatusTypeDef HAL_TIMEx_OCN_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, uint32_t *pData, uint16_t Length);
HAL_StatusTypeDef HAL_TIMEx_OCN_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Channel);



互补PWM:

HAL_StatusTypeDef HAL_TIMEx_PWMN_Start(TIM_HandleTypeDef *htim, uint32_t Channel);
HAL_StatusTypeDef HAL_TIMEx_PWMN_Stop(TIM_HandleTypeDef *htim, uint32_t Channel);

HAL_StatusTypeDef HAL_TIMEx_PWMN_Start_IT(TIM_HandleTypeDef *htim, uint32_t Channel);
HAL_StatusTypeDef HAL_TIMEx_PWMN_Stop_IT(TIM_HandleTypeDef *htim, uint32_t Channel);

HAL_StatusTypeDef HAL_TIMEx_PWMN_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, uint32_t *pData, uint16_t Length);
HAL_StatusTypeDef HAL_TIMEx_PWMN_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Channel);


互补单脉冲模式:

HAL_StatusTypeDef HAL_TIMEx_OnePulseN_Start(TIM_HandleTypeDef *htim, uint32_t OutputChannel);
HAL_StatusTypeDef HAL_TIMEx_OnePulseN_Stop(TIM_HandleTypeDef *htim, uint32_t OutputChannel);

HAL_StatusTypeDef HAL_TIMEx_OnePulseN_Start_IT(TIM_HandleTypeDef *htim, uint32_t OutputChannel);
HAL_StatusTypeDef HAL_TIMEx_OnePulseN_Stop_IT(TIM_HandleTypeDef *htim, uint32_t OutputChannel);


控制函数:
HAL_StatusTypeDef HAL_TIMEx_ConfigCommutationEvent(TIM_HandleTypeDef *htim, uint32_t  InputTrigger, uint32_t  CommutationSource);
HAL_StatusTypeDef HAL_TIMEx_ConfigCommutationEvent_IT(TIM_HandleTypeDef *htim, uint32_t  InputTrigger, uint32_t  CommutationSource);
HAL_StatusTypeDef HAL_TIMEx_ConfigCommutationEvent_DMA(TIM_HandleTypeDef *htim, uint32_t  InputTrigger, uint32_t  CommutationSource);
HAL_StatusTypeDef HAL_TIMEx_MasterConfigSynchronization(TIM_HandleTypeDef *htim, TIM_MasterConfigTypeDef * sMasterConfig);
HAL_StatusTypeDef HAL_TIMEx_ConfigBreakDeadTime(TIM_HandleTypeDef *htim, TIM_BreakDeadTimeConfigTypeDef *sBreakDeadTimeConfig);
HAL_StatusTypeDef HAL_TIMEx_ConfigBreakInput(TIM_HandleTypeDef *htim, uint32_t BreakInput, TIMEx_BreakInputConfigTypeDef *sBreakInputConfig);
HAL_StatusTypeDef HAL_TIMEx_RemapConfig(TIM_HandleTypeDef *htim, uint32_t Remap);
HAL_StatusTypeDef  HAL_TIMEx_TISelection(TIM_HandleTypeDef *htim, uint32_t TISelection , uint32_t Channel);
HAL_StatusTypeDef HAL_TIMEx_GroupChannel5(TIM_HandleTypeDef *htim, uint32_t Channels);


其它:
void HAL_TIMEx_CommutationCallback(TIM_HandleTypeDef *htim);
void HAL_TIMEx_BreakCallback(TIM_HandleTypeDef *htim);

HAL_TIM_StateTypeDef HAL_TIMEx_HallSensor_GetState(TIM_HandleTypeDef *htim);
void HAL_TIMEx_DMACommutationCplt(DMA_HandleTypeDef *hdma);

使用特权

评论回复

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

457

主题

483

帖子

1

粉丝