STM32 HRTIM Burst输出模式应用演示

发布者:平静宁静最新更新时间:2024-07-31 来源: elecfans关键字:STM32  Burst  输出模式 手机看文章 扫描二维码
随时随地手机看文章

有人使用STM32G474芯片的片上高精度定时器HRTIM,他想使用其输出功能的Burst Mode。但不知如何使用,想找找参考例程。我这里就使用STM32G474芯片做下应用演示。

我们知道,STM32家族中有多个系列或子系列芯片内置HRTIM定时器。这里以STM32G474芯片为蓝本简单介绍下HRTIM时基单元中输出功能的BURST MODE原理及实现过程。HRTIM时基单元中输出模块【或通道】可以有三种工作状态,即运行态、空闲态、出错异常态【RUN、IDLE和FAULT】。

wKgaomUomOCAaOrgAAKUR9UhSlI880.jpg?imageView2/2/w/1000

【注 :上面截图来自STM32G4系列参考手册】

此处所要讲的Burst模式其实就是运行态和空闲态交替地实现输出的模式,即输出通道一会工作在运行状态、一会工作在空闲状态,每种状态的持续时间可以编程,由Burst Mode控制器管理。

HRTIM输出单元的Burst 操作模式在轻量负载的电源逆变器产品中用得比较常见。通过减少输出跳变次数及开关损耗,可以显著地提升转换效率。

当工作在Burst模式时【下文中文我统一用交替输出模式来表述】,典型应用就是1个或几个周期的运行状态的有效输出后,紧跟着输出相应周期数的空闲状态,可以单次性,也可以周期性地实现。比方下图就是一个工作在交替输出模式的示例【注 :下面截图来自STM32G4系列参考手册】:

wKgZomUomOCAAD-bAAFGmuTOm68700.jpg?imageView2/2/w/1000

结合上图我们可以看出,交替输出控制器包括三个东西:

Burst计数器:时钟源【Burst Clock】可以有多种,甚至可以是HRTIM以外的事件,比较典型的是PWM周期事件。

寄存器HRTIM_BMCMP:用它定义空闲时间段长度。

寄存器HRTIM_BMPER:用它来定义一次交替输出的整个时间段,即上面的空闲事件段加上运行态时间段。时间段长短通过计数器的计数值来标定。【注 :下面截图来自STM32G4系列参考手册】

wKgZomUomOCAeNmJAAIPFxb42gc476.jpg?imageView2/2/w/1000

上图中的交替输出模块的计数器的时钟源是HRTIM定时器单元的计数周期事件;

HRTIM_BMCMP=4,则一次交替输出的时间段内有5个计数周期做空闲输出;

HRTIM_BMPER=7,则一次交替输出的时间段为8个计数周期,其中运行处于运行态有3个周期;

另外,要进入交替输出模式,还需要触发信号来激活。能触发交替输出模式的事件很多,可以是HRTIM的时基单元的复位事件、溢出事件、比较事件、重复计数事件等,还可以来自其它片上常规定时器的事件。

wKgZomUomOCAAS8pAANMFtPb50E304.jpg?imageView2/2/w/1000

在下面的演示示例中,我选用TIMA的复位事件作为交替输出模式的触发事件。那么,现在就以STM32G474芯片为例,来介绍下HRTIM交替输出模式的实现过程。

我使用STM32CubeMx图形化工具进行基本配置。使用HRTIM里的TIMA单元,并开启其TA1/TA2的两路PWM输出。关于这两个通道的配置参数基本一样,有一点差别就是我只开启了TA1的交替输出模式,而没有开启TA2的。这样可以明显地做效果比较。重点关注下面配置截图中带下划线,尤其红色下划线的地方。

wKgZomUomOCAJiqlAAJe37wukAA247.jpg?imageView2/2/w/1000

wKgaomUomOCAOB5vAAQrpwn90b0364.jpg?imageView2/2/w/1000

在交替输出模式配置【Burst Mode configuration】里,我们配置Burst Mode Period为10,它对应前面提到的寄存器HRTIM_BMPER的值,即一次交替输出的整个时间段为11个周期。

配置Burst Mode Idle Duration为4,它对应前面提到的寄存器HRTIM_BMCMP,即一次交替输出时间段中有5个周期处于空闲输出【当然空闲输出电平可以根据需要选择性配置,这里输出低电平】。至于交替输出模式的触发信号,这里选择的是TIMA的复位事件,交替输出模式的计数时钟选择TIMA的周期性溢出事件。当然,具体应用时我们可以根据实际需要选择。

wKgaomUomOCAaIpQAAJA8T8piu0847.jpg?imageView2/2/w/1000

其它配置细节这里就不啰嗦了,先跑出效果来。然后自己结合手册尝试调整,逐渐加深理解,慢慢进入自由使用。

基于我上面的配置,创建基于HAL库的工程后,只需添加几行如下代码即可运行查看结果。

wKgZomUomOGAOnv5AAHSuBM07WY507.jpg?imageView2/2/w/1000

wKgaomUomOCAPKA-AAEr8wfWZQw762.jpg?imageView2/2/w/1000

上面截图就是基于前面配置及代码的实现结果。不难看出,TA1开启了交替输出功能,TA2没有开启。从TA1的输出,我们可以看出整个交替输出时间段为11个周期,其中6个周期为有效运行状态,5个周期处于空闲输出状态。


关键字:STM32  Burst  输出模式 引用地址:STM32 HRTIM Burst输出模式应用演示

上一篇:STM32CubeMx基本使用方法
下一篇:可以快速用STM32实现什么?

推荐阅读最新更新时间:2026-03-25 11:09

分享STM32定时器输出比较模式的理解
初学STM32,我这个地方卡了很久,现在终于有些明白了,现在把我的理解写下与大家共享,如果有不对的地方,还请指出。 TIM_OCMode选择定时器模式。该参数取值见下表: TIM_OCInitStructure.TIM_Pulse = CCR1_Val; //设置跳变值,当计数器计数到这个值时,电平发生跳变 TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable); //使能TIMx在CCR1上的预装载寄存器 TIM_ARRPreloadConfig(TIM3, ENABLE); //使能TIMx在ARR上的预装载寄存器 OCxREF就是一个参考信号,并且约定:OCxREF=1,称O
[单片机]
分享<font color='red'>STM32</font>定时器<font color='red'>输出</font>比较<font color='red'>模式</font>的理解
STM32 定时器输出PWM的模式
数据手册上TIMx_CCMR1寄存器的6:4位决定了定时器输出PWM的几种模式: 000:冻结。输出比较寄存器TIMx_CCR1与计数器TIMx_CNT间的比较对OC1REF不起作用。即当计数器值与比较值相等时管脚上电平信号保持上一次的信号。 Eg:定时器设置: TIM_TimeBaseStructure.TIM_Period = 1000; // 设置自动重载周期值 TIM_TimeBaseStructure.TIM_Prescaler = 47; // 设置预分频值48分频 TIM_TimeBaseStructure.TIM_ClockDivision = 0; // 设置时钟分割:TDTS = Tck_tim
[单片机]
<font color='red'>STM32</font> 定时器<font color='red'>输出</font>PWM的<font color='red'>模式</font>
STM32 IO口输入输出模式的简洁见解
输入模式 (1)浮空输入:没有外界电压输入时,电压不确定。 (2)上拉输入:没有外界电压输入时,IO口经过一个上拉电阻接高电压Vcc,再经过施密特触发器转换成1信号,此时为高电平。(无输入,高电平) 有外界电压输入时,电压进入芯片后加了一个上拉电阻,再经过施密特触发器转换成0、1信号,读取此时的引脚电平是高电平还是低电平。 (3)下拉输入:没有外界电压输入时,IO口经过一个上拉电阻接低电压Vss,再经过施密特触发器转换成0信号,此时为低电平。(无输入,低电平) 有外界电压输入时,电压进入芯片后加了一个下拉电阻,再经过施密特触发器转换成0、1信号,读取此时的引脚电平是高电平还是低电平。 (4)模拟输入:
[单片机]
stm32几种输出模式解析
推挽输出:可以输出高,低电平,连接数字器件;推挽结构一般指两个三极管分别受腹部的信号的控制,总是在一个三极管导通时,另一个截止。 输出0时,N-MOS导通,P-MOS高阻,输出0。 输出1时,N-MOS高阻,P-MOS导通,输出1(不需要外部上拉电路) 开漏模式:输出端相当于三极管的集电极,要得到高电平状态需要上拉电阻才行,适合做电流驱动,器吸收电流的能力相对较强 输出0时,N-MOS导通,P-MOS不激活,输出0。 输出1时,N-MOS高阻,P-MOS不激活,输出1,(需要外部上拉电路) 另外,在输出模式下,通常要设置输出速度,这个速度指的是I/O口驱动电路的响应速度,而不是输出信号的速度,输出信号的输出速度取决
[单片机]
STM32 定时器输出比较非主动模式
STM32的定时器可以工作在输出比较非主动模式TIM_OCMode_Inactive,这个模式下,当定时器的计数值达到比较值时就会强制将引脚电平拉低。但是由于定时器通道对应的引脚配置成GPIO_Mode_AF_PP时,它默认的电平时低电平,如果这时候工作在输出比较非主动模式,即时强制拉低,这样的话引脚一直是低电平,完全没有现象。由于水平所限,我也不知道该如何使用定时器输出比较非主动模式才能体现它的 非主动 这个特性。我下面要讲的例子虽然用的是定时器输出比较非主动模式来输出PWM波,但是完全体现不出这个特格特点来。还请见谅! 下面就讲讲定时器在输出比较非主动模式下如何生成PWM波的。还是基于我自己的规范工程! 1、工程的修改 1
[单片机]
<font color='red'>STM32</font> 定时器<font color='red'>输出</font>比较非主动<font color='red'>模式</font>
工程师笔记|DAC,COMP,HRTIM Fault 功能的使用
1.引言 这个例程是使用 STM32G474 NUCLEO 进行测试的,集合了 DAC, COMP, HRTIM 的功能模块。 2.信号路径 PA1 的输入信号同 DAC 的输出信号进入 COMP 比较器进行比较,经 COMP 比较后的输出信号连接到 HRTIM 的 Fault4 信号,来控制 HRTIM 的输出信号的停止。 当 PA1 DAC value,比较器输出高“1”, 这个信号为 HRTIM 的 fault4 信号,当 HRTIM 配置为 fault4 高有效,则当这个高电平出现时,HRTIM 输出波形停止,具体输出的电平可以通过寄存器进行配置。 3.STM32Cu
[单片机]
工程师笔记|DAC,COMP,<font color='red'>HRTIM</font> Fault 功能的使用
DS1302 的 BURST 模式
进行产品开发的时候,逻辑的严谨性非常重要,如果一个产品或者程序逻辑上不严谨,就有可能出现功能上的错误。比如我们15.3.4节里的这个程序,我们再回顾一下,当单片机定时器时间到了 200 ms 后,我们连续把 DS1302 的时间参数的7个字节读了出来。但是不管怎么读,都会有一个时间差,在极端的情况下就会出现这样一种情况:假如我们当前的时间是00:00:59,我们先读秒,读到的秒是59,然后再去读分钟,而就在读完秒到还未开始读分钟的这段时间内,刚好时间进位了,变成了00:01:00这个时间,我们读到的分钟就是01,显示在液晶上就会出现一个00:01:59,这个时间很明显是错误的。出现这个问题的概率极小,但却是实实在在可能存在的。 为
[单片机]
STM32CUBEIDE(3)----GPIO输出模式,速率测试、开漏和输出说明
概述 本章主要GPIO输出模式下不同配置的说明。 最近在弄ST和GD的课程,需要样片的可以加群申请:615061293。 生成例程 使用STM32CUBEMX生成例程,这里使用NUCLEO-L476RG开发板,因为我这只有这款板子的主频较快。 不同速率对应的波形 以PC3为例,在推挽输出无上下拉情况下,输出速率主要有4种,一般的低端MCU只有3种,没有Very High。 LOW速率 Medium速率 High速率 Very High速率 可以看到,在不同速率下,端口的反应速度不一样,设置最大输出速率越大,响应越快,对应的噪声也就越大。 输出方式 在上图中,P-MOS带了一个⚪,说明是低电平导通。
[单片机]
STM32CUBEIDE(3)----GPIO<font color='red'>输出</font><font color='red'>模式</font>,速率测试、开漏和<font color='red'>输出</font>说明
小广播
最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

厂商技术中心

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2026 EEWORLD.com.cn, Inc. All rights reserved