有人想使用STM32G474芯片做Half模式的PWM输出,发现有点问题,明明配置了定时器A的两路输出, 结果总是只有1路输出。这里简单演示下实现过程。【顺便提醒下,并非STM32G4全系列都内置高精度定时器】 p3 d; `0 ?2 g. ~0 l 所谓Half模式就是指硬件基于给定的计数周期值自动输出占空比为50%的方波,用户无须对比较寄存器的值再进行设置,这里硬件默认使用比较寄存器1【cmp1】,硬件自动将用户设置的PERIOD值的一半赋给CMP1寄存器。换言之,用户此时无法对CMP1寄存器进行赋值。1 K) q& y4 c5 B9 }7 r! t2 Y. J 另外,对于输出配置必须使用CMP1比较事件和定时器的Period周期事件。% E4 m) O* w w' j 0 ]6 j. D3 ~. w$ K6 W$ e 关于HALF模式的原理就介绍到这里,下面就使用STM32G474RE的Nucleo开发板演示下实现过程,主要是软件配置,硬件没啥要处理的,有块开发板就行。 / n% | t! G5 Z- e6 q E : o3 q# b& e, [+ G- r 先使用STM32CubeMx进行配置【其它RCC等的配置此处就不说了】。 + h( s, T" g8 X) X4 f" I 下面截图橙色框中的配置是必须的,有关定时器的时间参数我随便配置的,毕竟这里只是演示一下功能。+ W' I7 Y, n& _8 x & i2 O" @+ o: r. P) i( a 9 R% t2 O; e+ _. w" l. `4 l 这里的比较单元1必须使能,使能即可,无须参数配置。 下面关于TA1/TA2输出的配置,也是必须的关键配置。$ _7 @7 \$ J% Q1 A8 s ; b+ U; o8 b. d- Z( _ 9 w8 P( K# b# f9 Z4 R( t 至于定时器的其它配置,保持默认即可。配置完成后,生成初始化代码,然后加入合适的用户代码。, ^$ e4 {* ]( A) ~8 O HAL_HRTIM_WaveformCountStart(&hhrtim1, HRTIM_TIMERID_TIMER_A);$ Y3 ^( i! ^# [; a L7 y* M i( L . |" h- J0 U/ `7 B/ i3 M 8 V& I/ `9 O/ O( ] * r' a7 G2 \% C# W HAL_HRTIM_WaveformOutputStart(&hhrtim1, HRTIM_OUTPUT_TA1);/ T, l. l4 E/ @% j" F% |4 c ! L) D* U/ ?+ F9 D$ m+ M5 I: ^ HAL_HRTIM_WaveformOutputStart(&hhrtim1, HRTIM_OUTPUT_TA2); " e* Q4 a' O* H; x$ U7 Y3 O& ?/ a 编译运行看结果: L, ~9 f- K$ d7 J/ G 2 [, ?' x p2 d & P& @- p4 ^, U7 c 因为我把TA1/TA2极性选择是相反的,所有此时输出的是两路互补波形,如果二者极性选择一致,输出的就是两路占空比为50%的相同波形。 |
STM32固件库分享,超全系列整理
【经验分享】STM32G4_CORDIC与定点带符号整数数据格式
STM32的CAN FD位定时设置注意事项
基于STM32G474 中 Triggered-half 模式的实现
基于STM32G4的数字控制 15kW双向PFC
基于STM32G431简介
今天14:00 | 基于STM32的MATLAB电机控制方案直播
基于STM32G474外红外接收经验分享
STM32G431RBT6之Key模块入门
STM32G431RBT6--LED模块入门