STM32G474xx HAL 用户手册
stm32g4xx_hal_hrtim.c
转到此文件的文档。
00001 /**
00002   ******************************************************************************
00003   * @file    stm32g4xx_hal_hrtim.c
00004   * @author  MCD 应用团队
00005   * @brief   TIM HAL 模块驱动。
00006   *          本文件提供固件函数,用于管理高分辨率定时器(HRTIM)外设的以下功能:
00007   *           + HRTIM 初始化
00008   *           + DLL 校准启动
00009   *           + 定时器时基单元配置
00010   *           + 简单时基启动/停止
00011   *           + 简单时基启动/停止中断
00012   *           + 简单时基启动/停止 DMA 请求
00013   *           + 简单输出比较/PWM 通道配置
00014   *           + 简单输出比较/PWM 通道启动/停止中断
00015   *           + 简单输出比较/PWM 通道启动/停止 DMA 请求
00016   *           + 简单输入捕获通道配置
00017   *           + 简单输入捕获通道启动/停止中断
00018   *           + 简单输入捕获通道启动/停止 DMA 请求
00019   *           + 简单单脉冲通道配置
00020   *           + 简单单脉冲通道启动/停止中断
00021   *           + HRTIM 外部同步配置
00022   *           + HRTIM 突发模式控制器配置
00023   *           + HRTIM 突发模式控制器使能
00024   *           + HRTIM 外部事件调节配置
00025   *           + HRTIM 故障调节配置
00026   *           + HRTIM 故障使能
00027   *           + HRTIM ADC 触发配置
00028   *           + 波形定时器配置
00029   *           + 波形事件过滤配置
00030   *           + 波形死区插入配置
00031   *           + 波形斩波模式配置
00032   *           + 波形比较单元配置
00033   *           + 波形捕获单元配置
00034   *           + 波形输出配置
00035   *           + 波形计数器启动/停止
00036   *           + 波形计数器启动/停止中断
00037   *           + 波形计数器启动/停止 DMA 请求
00038   *           + 波形输出使能
00039   *           + 波形输出电平设置/获取
00040   *           + 波形输出状态获取
00041   *           + 波形突发 DMA 操作配置
00042   *           + 波形突发 DMA 操作启动
00043   *           + 波形定时器计数器软件复位
00044   *           + 波形捕获软件触发
00045   *           + 波形突发模式控制器软件触发
00046   *           + 波形定时器预加载寄存器更新使能
00047   *           + 波形定时器预加载寄存器软件更新
00048   *           + 波形定时器延迟保护状态获取
00049   *           + 波形定时器突发状态获取
00050   *           + 波形定时器推挽状态获取
00051   *           + 外设状态获取
00052   *
00053   ******************************************************************************
00054   * @attention
00055   *
00056   * 版权所有 (c) 2019 STMicroelectronics。
00057   * 保留所有权利。
00058   *
00059   * 本软件根据许可协议条款发布,该许可协议可以在本软件组件的根目录中的
00060   * LICENSE 文件中找到。
00061   * 如果本软件不附带 LICENSE 文件,则按“按原样”提供。
00062   *
00063   ******************************************************************************
00064   @verbatim
00065 ==============================================================================
00066                       ##### 简单模式与波形模式 #####
00067 ==============================================================================
00068   [..] HRTIM HAL API 分为两类:
00069     (#)简单函数:这些函数允许将 HRTIM 定时器用作具有高分辨率功能的通用定时器。
00070        HRTIM 简单模式通过名为 HAL_HRTIM_Simple<Function> 的函数集进行管理。
00071        这些函数在名称和用法上与为 TIM 外设定定义的功能相似。
00072        当 HRTIM 定时器在简单模式下运行时,仅使用非常有限的 HRTIM 特性集。
00073        提供以下简单模式:
00074          (++)输出比较模式,
00075          (++)PWM 输出模式,
00076          (++)输入捕获模式,
00077          (++)单脉冲模式。
00078     (#)波形函数:这些函数允许利用 HRTIM 的灵活性产生多种类型的控制信号。
00079        当 HRTIM 定时器在波形模式下运行时,所有 HRTIM 特性均可访问,不受任何限制。
00080        HRTIM 波形模式通过名为 HAL_HRTIM_Waveform<Function> 的函数集进行管理。
00081 
00082                       ##### 如何使用此驱动程序 #####
00083 ==============================================================================
00084     [..]
00085      (#)通过实现 HAL_HRTIM_MspInit() 函数初始化 HRTIM 低层资源:
00086         (##)使用 __HRTIMx_CLK_ENABLE() 启用 HRTIM 时钟源
00087         (##)将 HRTIM 引脚连接到 MCU I/O
00088             (+++) 使用以下函数启用 HRTIM GPIO 的时钟:
00089                   __HAL_RCC_GPIOx_CLK_ENABLE()
00090             (+++) 使用 HAL_GPIO_Init() 将这些 GPIO 引脚配置为复用功能模式
00091         (##)当使用 DMA 控制数据传输时(例如 HAL_HRTIM_SimpleBaseStart_DMA())
00092             (+++) 使用 __DMAx_CLK_ENABLE() 启用 DMAx 接口时钟
00093             (+++) 初始化 DMA 句柄
00094             (+++) 使用 __HAL_LINKDMA() 将初始化的 DMA 句柄关联到 HRTIM 句柄的相应 DMA 句柄
00095             (+++) 使用 HAL_DMA_Init() 初始化 DMA 通道
00096             (+++) 使用 HAL_NVIC_SetPriority() 和 HAL_NVIC_EnableIRQ() 配置 DMA 通道传输完成中断的优先级并启用 NVIC
00097         (##)如果使用中断模式(例如 HAL_HRTIM_SimpleBaseStart_IT())
00098             (+++) 使用 HAL_NVIC_SetPriority() 和 HAL_NVIC_EnableIRQ() 配置相关 HRTIM 中断的优先级并启用 NVIC
00099 
00100     (#)使用 HAL_HRTIM_Init() 初始化 HRTIM HAL。HRTIM 配置结构(HRTIM 句柄的字段)指定整个 HRTIM 的哪些全局中断必须启用(突发模式周期、系统故障、故障)。
00101        它还包含 HRTIM 外部同步配置。HRTIM 可以充当主设备(产生同步信号)或从设备(等待触发进行同步)。
00102 
00103     (#)使用 HAL_HRTIM_DLLCalibrationStart() 启动高分辨率单元。DLL 校准会定期执行并补偿潜在的电压和温度漂移。DLL 校准周期由 CalibrationRate 参数指定。
00104 
00105     (#)HRTIM 定时器在高分辨率单元就绪之前无法使用。可以使用 HAL_HRTIM_PollForDLLCalibration() 检查就绪状态:如果 DLL 校准已完成,该函数返回 HAL_OK;如果在给定超时参数过期时 DLL 校准仍在进行,则返回 HAL_TIMEOUT。也可以使用 HAL_HRTIM_DLLCalibrationStart_IT() 在中断模式下启动 DLL 校准。在这种情况下,当 DLL 校准完成时会产生中断。请注意,由于 DLL 校准是周期性执行的,每次 DLL 校准操作结束时都会产生中断(最坏情况:每 14 微秒产生一次中断!)。
00106 
00107      (#) 配置所有 HRTIM 定时器共享的 HRTIM 资源
00108         (##)突发模式控制器:
00109                 (+++)HAL_HRTIM_BurstModeConfig(): 配置 HRTIM 突发模式控制器:工作模式(连续或单次)、时钟(源、预分频器)、触发、周期、空闲持续时间。
00110         (##)外部事件调节:
00111                 (+++)HAL_HRTIM_EventConfig(): 配置外部事件通道的调节:源、极性、边沿灵敏度。外部事件可用作触发(定时器复位、输入捕获、突发模式、ADC 触发、延迟保护)。也可用于置位或复位定时器输出。最多提供 10 个事件通道。
00112                 (+++)HAL_HRTIM_EventPrescalerConfig(): 配置外部事件采样时钟(用于数字滤波)。
00113         (##)故障调节:
00114                 (+++)HAL_HRTIM_FaultConfig(): 配置故障通道的调节:源、极性、边沿灵敏度。故障通道用于在异常操作时禁用输出。最多提供 6 个故障通道。
00115                 (+++)HAL_HRTIM_FaultPrescalerConfig(): 配置故障采样时钟(用于数字滤波)。
00116                 (+++)HAL_HRTIM_FaultModeCtl(): 启用或禁用故障输入电路。默认情况下所有故障输入都被禁用。
00117         (##)ADC 触发:
00118                 (+++)HAL_HRTIM_ADCTriggerConfig(): 配置触发 ADC 触发寄存器更新和 ADC 触发的源。提供 4 个独立触发用于启动两个 ADC 的常规和注入序列。
00119 
00120      (#) 使用 HAL_HRTIM_TimeBaseConfig() 配置 HRTIM 定时器时基。无论 HRTIM 定时器工作模式如何(简单或波形),都必须调用此函数。它主要配置:
00121         (##)HRTIM 定时器计数器工作模式(连续或单次)
00122         (##)HRTIM 定时器时钟预分频器
00123         (##)HRTIM 定时器周期
00124         (##)HRTIM 定时器重复计数器
00125 
00126      *** 如果 HRTIM 定时器在简单模式下运行 ***
00127      ===================================================
00128      [..]
00129      (#) 启动或停止简单定时器
00130               (++)简单时基:HAL_HRTIM_SimpleBaseStart(),HAL_HRTIM_SimpleBaseStop(),
00131                   HAL_HRTIM_SimpleBaseStart_IT(),HAL_HRTIM_SimpleBaseStop_IT(),
00132                   HAL_HRTIM_SimpleBaseStart_DMA(),HAL_HRTIM_SimpleBaseStop_DMA().
00133               (++)简单输出比较:HAL_HRTIM_SimpleOCChannelConfig(),
00134                   HAL_HRTIM_SimpleOCStart(),HAL_HRTIM_SimpleOCStop(),
00135                   HAL_HRTIM_SimpleOCStart_IT(),HAL_HRTIM_SimpleOCStop_IT(),
00136                   HAL_HRTIM_SimpleOCStart_DMA(),HAL_HRTIM_SimpleOCStop_DMA(),
00137               (++)简单 PWM 输出:HAL_HRTIM_SimplePWMChannelConfig(),
00138                   HAL_HRTIM_SimplePWMStart(),HAL_HRTIM_SimplePWMStop(),
00139                   HAL_HRTIM_SimplePWMStart_IT(),HAL_HRTIM_SimplePWMStop_IT(),
00140                   HAL_HRTIM_SimplePWMStart_DMA(),HAL_HRTIM_SimplePWMStop_DMA(),
00141               (++)简单输入捕获:HAL_HRTIM_SimpleCaptureChannelConfig(),
00142                   HAL_HRTIM_SimpleCaptureStart(),HAL_HRTIM_SimpleCaptureStop(),
00143                   HAL_HRTIM_SimpleCaptureStart_IT(),HAL_HRTIM_SimpleCaptureStop_IT(),
00144                   HAL_HRTIM_SimpleCaptureStart_DMA(),HAL_HRTIM_SimpleCaptureStop_DMA().
00145               (++)简单单脉冲:HAL_HRTIM_SimpleOnePulseChannelConfig(),
00146                   HAL_HRTIM_SimpleOnePulseStart(),HAL_HRTIM_SimpleOnePulseStop(),
00147