硬汉嵌入式论坛

 找回密码
 立即注册
查看: 4211|回复: 0
收起左侧

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

[复制链接]

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106771
QQ
发表于 2018-8-13 00:07:46 | 显示全部楼层 |阅读模式
说明:
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);
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-5 20:51 , Processed in 0.287229 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表