STM32 HRTIM生成PWM时遇到无法输出PWM脉冲波形问题

在使用HRTIM生成PWM时,当把周期寄存器更新的设置放到while循环中时,无法输出PWM脉冲波形,即使增加计数延时也无法输出,最终只能放到中断函数中执行后期寄存器值更新才能够生成PWM脉冲波形。

### 使用 STM32 HRTIM 模块生成 PWM 输出 STM32 的高分辨率定器 (HRTIM) 提供了强大的功能来生成精确的 PWM 波形。为了配置 HRTIM输出 PWM 信号,需要初始化并设置多个参数。 #### 初始化 HRTIM 外设 首先,在使用 HRTIM 功能之前,需确保外设已被正确初始化: ```c // 定义全局变量用于存储 HRTIM 句柄 HRTIM_HandleTypeDef hhrtim1; void MX_HRTIM1_Init(void) { // 配置 HRTIM钟源和其他基本属性... } ``` 此部分的具体实现应参照 STMicroelectronics 的官方文档以获得最详尽指导[^1]。 #### 设置 PWM 参数 接着定义要使用的通道以及期望的工作模式——对于 PWM 应用来说通常是边缘对齐或中心对齐方式之一。这里展示了一个简单的例子,其中 E 和 F 计数器被用来创建两个独立但同步工作的 PWM 输出。 ```c static void HRTIM_PWM_Configuration(void) { /* Timer E Configuration */ sTimerCfg.Period = 0xFFFF; sTimerCfg.RepetitionCounter = 0; if(HAL_HRTIM_TimeBaseConfig(&hhrtim1, HRTIM_TIMERID_TIMER_E, &sTimerCfg) != HAL_OK){ Error_Handler(); } /* Output Channel TE1 and TE2 configuration */ sOutputChannel.Polarity = HRTIM_OUTPUTPOLARITY_HIGH; sOutputChannel.SetResetFactor = HRTIM_RESETFACTOR_REPETITION; sOutputChannel.IdleLevel = HRTIM_OCIDLELEVEL_ACTIVE; // Set duty cycle to 50% sCompareUnit.CompareValue = 0x7FFF; if(HAL_HRTIM_OC_Config(&hhrtim1, HRTIM_TIMERID_TIMER_E, HRTIM_CHANNEL_1, &sCompareUnit) != HAL_OK || HAL_HRTIM_OC_Config(&hhrtim1, HRTIM_TIMERID_TIMER_E, HRTIM_CHANNEL_2, &sCompareUnit) != HAL_OK){ Error_Handler(); } } ``` 上述代码片段展示了如何设定计数值周期长度 (`Period`) 和重复次数 (`RepetitionCounter`), 并指定了比较单元中的占空比(`CompareValue`). 这里假设我们想要得到一个大约 50% 占空比的方波. 最后一步就是启动这些已配置好的输出: ```c HAL_HRTIM_WaveformOutputStart(&hhrtim1, HRTIM_OUTPUT_TE1 | HRTIM_OUTPUT_TE2); ``` 以上即为利用 STM32 HRTIM 实现 PWM 输出的基本流程概述[^3].
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

可芯智能科技研究院

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值