关于STM32G474(F334)高精度定时器的 CubeMX+HRTIM中断实现

本文详细介绍了如何在STM32F334上配置HRTIM中断,包括TimerC的TC1和TC2互补模式,以及预装载、重复计数和中断请求设置。重点讲解了如何在CubeMX和HAL库中启用定时器中断服务函数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文由来:找遍全网没有人配置HRTIM中断的例子,非简体中文也没有,本人实现了一天才发现问题所在。

基本问题不再赘述

时钟34bc7eaced26453f91fdf04925f02f3e.png

晶振选择8M无源陶瓷

5725e5ab1fa74c7884cdb4a1c88d421d.png

Debug选择SW模式

d3764259d8064e76bf42bf275f25a57b.png

HRTIM使用TimerC 的TC1和TC2的互补模式,并用TimerC产生中断

c0c4cc2760634878a76f1fd6d5b12929.png

 关于互补PWM请同学们参考这篇文章STM32F334高分辨率定时器HRTIM1输出1对互补PWM波详细解析(使用CubeMx配置)HAL库代码-CSDN博客

 下面是中断配置的重要步骤,4个步骤分别对应如下4个图

1.(1)预装载使能;(2)重复计数使能;(3)中断请求源数量1个;(4)重复计数中断源使能

2.NVIC中断向量中使能定时器C全局中断

3.根据你的开发环境生成代码

4.在合适的位置打开中断使能定时器,可以在main的初始化那里,也可以放在hrtim.c 初始化配置最后位置的用户代码块中,其代码为:

__HAL_HRTIM_TIMER_ENABLE_IT(&hhrtim1,HRTIM_TIMERINDEX_TIMER_C,HRTIM_TIM_IT_REP);

PS:如果你不使用这个函数就程序不会进入void HRTIM1_TIMC_IRQHandler(void) 中断服务函数

06fa3b8589454139802fe7ffc1c86437.png

c1916975afbf4a2cbacffd3f89669720.png

90cd8840cc32488dac0f8e62ed2737b2.png4dc58e88807045f287e90166a1f7e132.png

结尾

__HAL_HRTIM_TIMER_ENABLE_IT(&hhrtim1,HRTIM_TIMERINDEX_TIMER_C,HRTIM_TIM_IT_REP)的函数意义如下。本文对于主定时器以及TimerA~E同样适用

f696575b2bd5479dbae92f8d2a04adaf.png

### HRTIM定时器使用方法及配置教程 #### 1. HRTIM定时器简介 HRTIM(High Resolution Timer Module)是一种专为高性能应用设计的定时器模块,能够提供亚微秒级的时间精度。这种特性使得HRTIM非常适合于需要精确时间控制的应用场景,比如数字电源管理、电机控制以及其他实时控制系统[^1]。 #### 2. HRTIM定时器的主要特点 - **多通道操作**:支持多达六个独立但相互关联的定时器通道。 - **高分辨率捕获/比较单元**:每个通道都配备有专用的捕捉/比较寄存器,可以实现非常精细的时间测量和波形生成。 - **灵活的工作模式**:包括单脉冲模式(Single Pulse Mode, SPM)、连续重载模式(Continuous Reload Mode, CRM)等不同工作方式的选择。 - **事件管理和中断机制**:允许通过外部信号触发特定动作或响应内部条件变化而产生中断请求。 #### 3. 配置流程概述 为了正确设置并运行HRTIM定时器,在实际编程过程中通常遵循以下几个方面: ##### 初始化阶段 首先定义全局变量来保存配置参数,并初始化必要的外设资源如GPIO引脚分配给相应的功能接口。接着调用库函数完成基本时钟树搭建以及使能对应外设供电域内的低功耗模式选项。 ```c // GPIO Initialization Function void MX_GPIO_Init(void){ __HAL_RCC_GPIOA_CLK_ENABLE(); /* Configure PA8 as output */ GPIO_InitStruct.Pin = GPIO_PIN_8; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; HAL_GPIO_Init(GPIOA,&GPIO_InitStruct); } ``` ##### 设置主控定时器属性 接下来针对具体需求调整主控定时器的各项参数,例如设定预分频系数(PSC),自动装载值(Arr),重复计数值(Rcr)等等。这些设置决定了整个系统的频率基础及时基单位大小。 ```c /* Initialize the high resolution timer module */ static void MX_HRTIM_Config(void){ hrtim.Init.HalfModeEnable = DISABLE; hrtim.Instance = HRTIM1; // Set up master timer configuration here... MasterTimerHandle.Master compare value = 999; // Example Compare Value if (HAL_HRTIM_MasterConfigTimeBase(&hrtim, &MasterTimerHandle)!= HAL_OK){ Error_Handler(); } } ``` ##### 启动与停止控制逻辑编写 最后一步就是构建起完整的启动与停止逻辑框架,确保能够在适当时候开启或者关闭指定的功能模块。这可能涉及到状态机的设计或者是简单的条件判断语句组合而成的操作序列。 ```c if(condition_for_starting_timer){ HAL_HRTIM_Start(&hrtim,HRTIM_TIMERID_MASTER); }else{ HAL_HRTIM_Stop(&hrtim,HRTIM_TIMERID_MASTER); } ``` #### 4. 实际应用场景举例说明 考虑到BLDC电机驱动场合下对于电流反馈回路的要求极高,因此往往会选择利用DMA技术配合ADC采集数据的同时由HRTIM负责PWM输出调节,从而达到两者之间完美的同步效果[^2]。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值