STMCU小助手
发布时间:2021-8-17 10:03
# r8 y* y: z& V* l' A4 I ) n- n' E$ Y0 k& ] 有人想使用STM32G474芯片做Half模式的PWM输出,发现有点问题,明明配置了定时器A的两路输出, 结果总是只有1路输出。这里简单演示下实现过程。【顺便提醒下,并非STM32G4全系列都内置高精度定时器】& U; C0 B% k r4 U% E a+ v4 L% N& h3 J% h" y) Q5 P 1 n5 p; f) F5 I# y7 x6 |; w5 d3 o 所谓Half模式就是指硬件基于给定的计数周期值自动输出占空比为50%的方波,用户无须对比较寄存器的值再进行设置,这里硬件默认使用比较寄存器1【cmp1】,硬件自动将用户设置的PERIOD值的一半赋给CMP1寄存器。换言之,用户此时无法对CMP1寄存器进行赋值。, M' Z9 X/ h3 L. o ; Y& q( ^/ t2 K0 L5 v; X . i/ _; n0 H7 s1 g I& f; e4 M& y 另外,对于输出配置必须使用CMP1比较事件和定时器的Period周期事件。
. Z6 t8 Y8 s4 S 关于HALF模式的原理就介绍到这里,下面就使用STM32G474RE的Nucleo开发板演示下实现过程,主要是软件配置,硬件没啥要处理的,有块开发板就行。+ s4 F* ^& @: C# t. S1 z& K
& v1 Q6 K$ D+ j4 Y6 z 先使用STM32CubeMx进行配置【其它RCC等的配置此处就不说了】。
5 t( R: o9 N' s, S; S 下面截图橙色框中的配置是必须的,有关定时器的时间参数我随便配置的,毕竟这里只是演示一下功能。8 g, F; n p" u8 z* `
这里的比较单元1必须使能,使能即可,无须参数配置。- a' t. [+ H2 }; t/ ?3 Y+ p8 n
/ E( n( b3 P1 J( R1 |7 p# M j1 | 下面关于TA1/TA2输出的配置,也是必须的关键配置。, n0 Z1 A8 l! o' u
8 y8 z6 I A/ `$ V# o8 [ 至于定时器的其它配置,保持默认即可。配置完成后,生成初始化代码,然后加入合适的用户代码。8 P! k5 U; R1 s4 S : u' v7 J A; n$ g+ R. K HAL_HRTIM_WaveformCountStart(&hhrtim1, HRTIM_TIMERID_TIMER_A); . s; e& \4 B- C6 [8 q* P HAL_HRTIM_WaveformOutputStart(&hhrtim1, HRTIM_OUTPUT_TA1);+ u& z+ w& p* g8 } * B7 K, g: C# d+ `3 u& q1 Z HAL_HRTIM_WaveformOutputStart(&hhrtim1, HRTIM_OUTPUT_TA2);3 k7 H! n) k+ r: k+ _4 \ % m5 |' C% B: S; }" u 9 v- q& I D' m3 i: P n9 q) n 编译运行看结果:$ `7 E& f5 A/ {
& j0 }" q& Z- z6 F 因为我把TA1/TA2极性选择是相反的,所有此时输出的是两路互补波形,如果二者极性选择一致,输出的就是两路占空比为50%的相同波形。 & a) C+ V7 _2 G4 F1 V+ Z |
经验分享 | 基于STM32G4芯片TIM+SPI+DMA应用示例
STM32G47x 双 Bank 模式下在线升级
DMA 原理从 0 到 1:为什么它能解放 CPU?一文讲透 DMA 的工作流程
【经验分享】STM32G4之基本定时器
NUCLEO-G474RE 扩展 LSM6DSO 传感器数据融合实操演示全解析
经验分享 | STM32G474 高精度定时器同步功能全解析 从内部互联到多芯片协同的实现方案
经验分享 | STM32G4双BANK启动应用演示
STM32G4 LPTIM+DMAMUX 实现并行输出应用示例
实战经验 | LAT1578 SAU对NSC分区的影响
经验分享 | STM32G474 HRTIM Triggered-half模式实现两相交错电源180°相位同步方案
微信公众号
手机版