有人想使用STM32G474芯片做Half模式的PWM输出,发现有点问题,明明配置了定时器A的两路输出, 结果总是只有1路输出。这里简单演示下实现过程。【顺便提醒下,并非STM32G4全系列都内置高精度定时器】/ V$ [+ {! ]/ H2 ? ( }* [* p Z) a8 Q0 O 所谓Half模式就是指硬件基于给定的计数周期值自动输出占空比为50%的方波,用户无须对比较寄存器的值再进行设置,这里硬件默认使用比较寄存器1【cmp1】,硬件自动将用户设置的PERIOD值的一半赋给CMP1寄存器。换言之,用户此时无法对CMP1寄存器进行赋值。6 o% a+ v& b) Y- J( w/ B2 ~0 x. C) Q6 o& p 另外,对于输出配置必须使用CMP1比较事件和定时器的Period周期事件。5 [5 k: {! K1 t, ?6 Z% O ^ 关于HALF模式的原理就介绍到这里,下面就使用STM32G474RE的Nucleo开发板演示下实现过程,主要是软件配置,硬件没啥要处理的,有块开发板就行。6 \+ \- `4 G5 g5 _* I 先使用STM32CubeMx进行配置【其它RCC等的配置此处就不说了】。 下面截图橙色框中的配置是必须的,有关定时器的时间参数我随便配置的,毕竟这里只是演示一下功能。 2 G1 }8 Z; Y2 ~ 这里的比较单元1必须使能,使能即可,无须参数配置。 ! Y& |0 @# Y. Y* X- ~1 F ' U- x( M1 h! \% G 下面关于TA1/TA2输出的配置,也是必须的关键配置。 至于定时器的其它配置,保持默认即可。配置完成后,生成初始化代码,然后加入合适的用户代码。8 A5 j) S( Z y' b HAL_HRTIM_WaveformCountStart(&hhrtim1, HRTIM_TIMERID_TIMER_A);* J% C4 c2 V }! [ 7 o/ h) T- Z: G HAL_HRTIM_WaveformOutputStart(&hhrtim1, HRTIM_OUTPUT_TA1); HAL_HRTIM_WaveformOutputStart(&hhrtim1, HRTIM_OUTPUT_TA2); 编译运行看结果: / F4 d5 G6 K7 {# J6 G# _ # h" N3 P1 }) E& T% ^5 k1 v5 g 因为我把TA1/TA2极性选择是相反的,所有此时输出的是两路互补波形,如果二者极性选择一致,输出的就是两路占空比为50%的相同波形。( f; M( c/ T; ]. G" |1 G% J% x + z5 U& h, a' S; }% K+ \ 7 e8 X" `% g+ q2 A8 X5 w h) D |
STM32G系列RS485自动收发控制以及自适应波特率实战
【学习指南】基于STM32G474VET6 开发板实验经验分享(三)
【学习指南】基于STM32G474VET6 开发板实验经验分享(二)
【学习指南】基于STM32G474VET6 开发板基础实验经验分享一
【学习指南】基于STM32G474软件平台安装与使用教程
【学习指南】基于STM32G474VET6 开发板硬件资源解析
STM32 Explore | 基于STM32G474的STM32Cube生态系统线下培训
STM32固件库分享,超全系列整理
STM32G47x 双 Bank 模式下在线升级
基于STM32G473ZET6开发板设计经验分享