你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

HRTIM 指南

[复制链接]
STMCU小助手 发布时间:2022-7-14 18:00
前言  P' Y  ?( S: H6 l9 i9 V3 f; W0 I
在 STM32 微控制器中, STM32F334xx 产品的目标市场是需要高度精确计时数字信号、尤其是数字功率转换应用的细分市场。包括:, z- y, K0 }  v1 }1 I
• 数字电源;( q; K/ s% {4 f, k
• 照明;
4 e/ Y0 C& ?. N% M: x. E; S• 不间断电源;
, X) {- R7 X6 ]6 H6 `5 l• 太阳能逆变器;" L% [2 j0 a4 I: X! P3 X" |
• 无线充电器。
: G3 U  b  s9 \STM32F334xx 微控制器具有高分辨率定时器 (HRTIM)外设,可产生多达 10 个信号,能够处理用于控制、同步或保护的各种不同输入信号。其模块化架构允许对大部分转换拓扑和多并联转换器进行处理,并可在运行中重新配置它们。
3 D8 }5 W% X; O/ {% [通过 STM32F334 参考手册初步了解时,此外设可能看起来比较复杂,这主要是由于它有大量的控制寄存器组。为了补充这份详尽的说明,我们另外提供了一个文档,其中包括快速上手说明以及示例汇总。
- r. |+ w5 _( r' W在其第一章中,本指南旨在表明 HRTIM 编程很简单。首先说明环境 (就像是有菜谱的同时也需要有厨房)设置,接着给出了若干简单示例,通过实践帮助理解。这些基本案例用来逐步介绍定时器功能,并提供编程指导。不熟悉 HRTIM 的读者应该仔细阅读本章。* a( ]/ T, R& k6 F6 T0 [
第二部分是转换器集合,可在开始新设计时使用,从中选取现成的代码示例,或者从中得到灵感和编程技巧来处理本文档中未描述的拓扑。但是需要注意,本指南不包括转换器设计本
0 v$ x- P2 N8 j: g9 D) x3 q身 (控制技术和元件设计),这些内容在专门的应用笔记中有描述。
. R8 d1 R1 u+ f" _" y5 C8 `/ y7 j如有必要,每个示例都提供了简要的转换器说明 (拓扑和到 MCU 的连接)、控制波形和代码段。8 ~( `4 e6 `  F2 O
* ^9 c! R) T, n0 I$ G4 B! y: C$ N
1 完成环境的准备
4 P! T( U& g/ Y' B' i6 G本章中,我们会确保在开始前所有必需的要素均准备就绪,因此可以仅关注 HRTIM 编程。
  ~0 \6 ~5 b6 L3 I/ l& e. h# w  r; b下列文件作为参考:
! L  U: I" c5 n7 [8 E6 A4 ]" T2 ~• STM32F334x4/x6/x8 数据手册9 d/ Z! W4 j7 v3 z; s  \0 T
• STM32F334x4/x6/x8 勘误表" [, l2 i8 s3 c; {0 v" `6 R# x
• RM0364 参考手册 STM32F334xx 高级 ARM® 为基础的的 32 位 MCU
. g. u( W' W7 K- i3 w• UM1733:STM32F334 探索套件入门  h) S8 b( U+ P$ t
• UM1735:STM32F3 系列的探索套件 - 采用 STM32F334C8 MCU8 p3 B: ]0 G: @3 O, G" l
• UM1736:STM32F334 探索软件开发工具入门
7 e" B0 d; ]1 S5 D/ X• AN4885:使用 STM32F3348 Discovery 进行高亮度 LED 调光
# l0 R  Q& L8 l+ R( w/ [  {; H3 X预先阅读 RM0364 中的 HRTIM 章节会有帮助。( f. n% a% k, `4 f( ^# {2 c2 M
1.1 必备条件1 l7 @" [2 [- s! c7 Z
在享受 HRTIM 的优势之前,我们列出其前提条件。希望读者具有基本的 C 编程技巧,关于MCU 和开发环境的少量经验,以及关于开关模式电源的理论背景。控制策略和元件尺寸标注细节不在本应用笔记范围内,它们可在大量文献中获取。, S& l$ P2 R  |3 h" n
为简单起见,本指南仅考虑逻辑信号或直接由 MCU 处理的模拟电压,这样就是与电平无关的。不过有些参考文献涉及外部元件接口和电源切换影响 (当定时器或 MCU 具有处理它们的功能时)。
& R/ ]2 f, `1 k# Y6 }2 s3 v; Y最后,需要提醒的是,如果 STM32F334 和 HRTIM 用于具有危险电压的应用中,则应由熟练的技术人员来操作功率应用,以避免电击、烧伤甚或死亡的风险。: x! C' S& U* W! n# k
! o- B) X5 P3 t
1.2 硬件设置
( Z: i" v5 s5 G+ l0 D6 CSTM32F334 探索板是价格非常实惠的工具,是开始 (以及继续)用 HRTIM 做实验的最佳选择 (订购码:STM32F3348-DISCO)。它包含了编程接口,芯片编程和调试所需的附加材料只是 USB 连接线。所有 I/O 均可在 2.54 mm 间隔的引脚上使用,因此也可连接到穿孔板 / 条状板 / 试验电路板。套件还有两个功率转换器:一个用于 LED 驱动的反向降压转换器和一个低电压降压 / 升压转换器,均具有独立的输入和输出。5 O) J5 p) Z) z5 f: v, \4 E
示波器是必备的,最后它与逻辑分析仪一起,用于配置对超过 4 个通道的监测。为了显示出细微的高分辨率步长,示波器的采样率必须至少超过 1GS/s,具有交错采样选项,可将时间精度提高超过 217ps 定时器分辨率。  h# N7 n2 m3 u8 q8 N7 ]) ~
在早期调试阶段,一个或几个函数发生器可帮助仿真来自功率转换器的反馈 (逻辑脉冲或模拟信号)。该发生器必须有触发输入,用于一些特殊用途。如果缺少,也可利用空闲的定时单元,由 HRTIM 本身来仿真反馈信号,这需要多编写一些代码 (或重复利用软件示例)。: X3 O: ^1 t3 N" c
. ?6 B* s3 A" D% V: S0 h
1.3 工具设置; s4 r% U- V8 v, o2 M7 w
必须安装一个编译器 (所有示例均适用 32K)以及支持 ST-LINK-V2 调试接口的 IDE。& O% g% h  S& j' X
下面给出的代码片段与编译器无关:' ~6 v9 R6 `, g4 Q7 y, g: m
它们将被简单地复制到面向各种工具链的通用 HRTIM工程模板中。
. I! u0 V( f: n( X对于下面的工具链,软件源随工作空间给出:
; _7 B2 ?6 Q; G2 x7 @• IAR (EWARM 7.10.3) ;
6 ?4 }6 _3 h; }% `' a9 |• KEIL® (MDK-ARM 4.7)。
3 \+ i. v' w9 L; ?8 L/ C4 v/ v( D' k. j: D( D! W
1.4 STM32F334 和 HRTIM 设置2 |0 u4 o8 x, X) w6 u% T' t. Q) ^
1.4.1 系统时钟初始化
% O# w4 S7 `4 u. [为了实现高分辨率, HRTIM 需要由 PLL 高频输出直接馈送。有两种选择可供使用:. Q+ E+ ?! }. L3 b6 m  I
• 基于晶体的高速外部(HSE)振荡器,由 PLL 倍频后可提供 144MHz 的频率。这种情况下,此高分辨率为 217ps (144MHz 时钟周期的 1/32);9 S8 a7 c! v, Z! P1 c* x
• 高速内部(HSI)振荡器,能够提供 128MHz 的频率(8MHz 由 PLL 倍频 16 倍)。这种情况下,高分辨率步长为 244ps (128MHz 时钟周期的 1/32)。该选项适用于有限的温度范围,相关情况参见 STM32F334 数据手册。# `, @$ ^  i7 n% i) J0 ]) G1 N
在 HAL 库初始化 (HAL_Init)后,立即在主程序中使用 SystemClock_Config() 函数,完成时钟初始化。0 Z/ u9 @+ G$ Q8 V! c' `( B' `
CPU 时钟也来源于 PLL (除以 2 之后),因此它可达到 PLL 输出频率的一半 (使用 HSE
: M7 I" T1 [( L# X时为 72MH,使用 HSI 时为 64MHz)。它还可被降低,以减少 MCU 功耗,同时保持高分辨4 k3 T+ o+ H* [( d
率功能。/ ^0 o7 W! O- r& ?6 u* w  A0 D
可最后在主程序中执行 SystemCoreClockUpdate 函数来验证 CPU 工作频率:该频率在
% z% {* M# O3 c6 u/ \6 KSystemCoreClock 变量中更新。0 R0 N4 v& k# j- d' W$ G0 W
1.4.2 HRTIM 初始化# x0 G" d) N# a* q2 k0 W" ~
本章逐步地详细介绍如何初始化 HRTIM,包括各个函数调用。实际上,这在HAL_HRTIM_Init 和 HAL_HRTIM_MspInit 程序中完成。2 e8 _7 e( n  B' c

7 z( U7 G8 S1 s
HRTIM 时钟初始化
3 J" {( H& [9 e. i. W* ~6 v当 MCU 上电并开始运行, HRTIM 在编程之前就必须进行时钟控制。这利用复位和时钟控制 (RCC)来实现,包括 2 个步骤:
6 Q1 @7 x, @& Z1.
/ [5 H) p  i1 X$ s. m! m+ W: Z+ N9 u为 RCC_CFGR3 寄存器中的 HRTIM 选择高速 PLL 输出:& N! G' G: O- l$ T3 n
__HAL_RCC_HRTIM1_CONFIG(RCC_HRTIM1CLK_PLLCLK);
7 N/ j5 @: r: E/ d2. 为在 APB2 总线上映射的寄存器进行时钟使能。* Z9 N- z/ x" z: n, S. h- }* u" K
__HRTIM1_CLK_ENABLE();
2 |7 x* z; r1 j0 G; k  C/ t% H# F$ l" E5 I+ u5 S  h  u& w! y! ^1 d+ ~' n1 V
1.4.3 HRTIM DLL 初始化
3 A) ~' o: A5 ]/ `; B3 p2 |  Q; p3 |HRTIM 的延迟锁相环 (DLL)可提供细粒度计时,将高频率 (144 或 128MHz)时钟周期分为 32 个均匀分布的间隔。
& C$ x1 r! K( m2 }2 u" E在使用高分辨率前,此 DLL 必须至少校准一次。如果电压或温度条件发生改变,在 HRTIM操作过程中可透明地重新进行该校准。也可由硬件使能周期校准。% ]7 _$ w  U' v" C' z; q( V8 H
下面的代码段显示如何完成校准。当 DLLRDY 标志被置位后,高分辨率可用。" d3 W; C* y9 y8 m+ p. \
/* DLL 校准:使能了周期校准,周期设置为 14µs */HRTIM1->sCommonRegs.DLLCR = HRTIM_CALIBRATIONRATE_14| HRTIM_DLLCR_CALEN;/* 检查 DLL 校准完成的标志位 */
) K# X7 |% }( D( q while(HRTIM1->sCommonRegs.ISR & HRTIM_IT_DLLRDY == RESET);3 `: V( I0 d' n- K4 t
建议使能周期校准,默认情况下采用最小校准周期 (设为 14µs)。* G$ f2 k7 @" V9 C6 W) `, d; N
注: 如果 DLL 未锁定 (通常是由于 HSE 振荡器未正常配置),下面的代码将引起执行延迟。9 X9 c8 V  b3 O% U7 d  [8 e. X% _
HAL 库包含一个函数来实现校准,它具有超时验证,如有必要可重定向至差错处理程序。基于 HAL 的软件示例中使用了此函数。' x# Y' a. j4 ~* o  l
1.4.4 HRTIM I/O 初始化
! S0 J% U6 z0 k) _& }* rHRTIM 输入和输出映射到标准 I/O 端口,必须像其他 I/O 外设一样进行编程。 HRTIM 端口通道影射为:
- ]* _, R' @( O" V4 r. b5 U# d• AF13 通道 (面向 HRTIM I/O 端口,位于端口 A 和 B);4 V& f9 q5 R) `" `- J5 K" Y
• AF3 通道 (面向 HRTIM I/O 端口,位于端口 C);
: J' W2 W/ e% AHRTIM I/O 初始化必须在两个阶段中完成。在 HRTIM 寄存器之前,首先在HAL_HRTIM_MspInit 函数中初始化 HRTIM 输入。/ }& {  B9 A7 _, K1 W7 G' t; V
HRTIM 输出必须在 HRTIM 控制寄存器编程 (示例中它在 GPIO_HRTIM_outputs_Config 函数中完成)后且当计数器使能时进行初始化。这是为了保证来自 GPIO 电路的控制信号传输到 HRTIM 定时器之前,在 HRTIM 中能够正确定义输出状态。
& |" S; O! y; C$ z
) Q9 b  I/ f: g; e( t3 ?
1.4.5 其他外设初始化3 P0 u, p3 \5 N) u( Z
HRTIM 与多种 MCU 外设交互作用,如下所列。进行 IHRTIM 操作时不强制要求对它们全部
- f; x. U6 p8 ?- N& c, r% l进行初始化。下列外设的初始化代码在后面所述的一些示例中提供。
6 |9 ^- S# h' t2 w6 k5 ]/ G9 |7 D$ B# L; h' ]: ^0 P
嵌套向量中断控制器 (Nested Vectored Interrupt Controller, NVIC)
6 S* f( g0 s6 o! q6 M6 L8 r% ~HRTIM 中断请求分组为 7 种中断向量。所有错误均分组到一个特殊向量中,可设置为非常高的优先级。9 ]& t! `$ `- O: @9 E3 `4 J
与 HRTIM 相关的 NVIC 部分在 HAL_HRTIM_MspInit 函数中进行编程。9 j; J) v5 X1 y0 }" i0 W
9 B' x3 }: _: c2 V
DMA 控制器
# M- g. t3 X7 J4 R& H3 f7 L' |9 C2 A大部分中断请求可用作 DMA 请求,分组到 6 个 DMA 通道 (每个定时单元一个,包括主定时器)。$ Q7 K+ m) C5 X
当启动定时器时,基于 DMA 的 HRTIM 操作使能,利用专门的开始 / 停止函数如HAL_HRTIM_WaveformCounterStart_DMA。
* v6 A" s; w7 W& C. X0 Y2 |; }0 s9 K
比较器
5 p  d" p9 T0 l) d6 o3 d* Z3 个内置比较器可用来调节模拟信号:它们必须在输出到达 HRTIM 前进行初始化。4 Y% B% x8 O% o' A* Q9 d* E
初始化包括模拟输入编程、时钟使能和极性。! |1 G: O6 B% T9 t

! v: X# `  w* m! _- O* Z' ~/ x
运算放大器
  j9 u! ~3 @  \内置运算放大器能够放大进入 ADC 或比较器的低电压信号,也可直接充当比较器 (相比普通比较器,它速率较低)。它必须与比较器一样进行初始化。9 T, u9 k: ^! y2 o! X
- \3 _% T1 w/ c
ADC 转换器
( V9 h: {1 R% ^$ x& xHRTIM 能够触发两个 ADC 转换器中的任意一个。应初始化它们以接收外部触发器信号 (在其常规和 / 或注入转换序列上)。
8 }7 Z! Z8 m* @7 z5 ~4 H$ oADC 的另一个可能用途在于使用模拟看门狗在 HRTIM 上触发外部事件 (用于输出置位 / 复位或计数器复位)。3 ~  r$ M* i: }' g
' x  |- u5 Z! H1 S
DAC 转换器* G5 F% Z! f8 R& v
DAC 转换器通常用于定义比较器阈值。它们可利用 HRTIM 的 DAC 触发器,与 HRTIM 操作同步更新。
5 |, k/ X( [7 @( c7 t2 z5 L+ z$ _! [7 l: Z, L
通用定时器7 D) n9 d& X% C' J3 }* Z
HRTIM 也可连接到其他片上定时器,有以下用途:! F$ O0 x; p) @
• 作为外部事件;
) D( N  ~. q8 e# H* R• 作为突发模式触发器或时钟;
( _* j2 G7 K. b5 G. {4 J9 c) e2 B- I• 用于 HRTIM 寄存器更新触发。7 j! Y: {4 a7 K$ y+ I5 n& Q) z
+ U0 m6 [# M5 a4 F& c
1.4.6 HRTIM 功能检查
, o$ S) H! Y" y' A! \当所有初始化完成,可验证 HRTIM 能够利用下面的简单代码来运行。此示例代码(HRTIM_BasicPWM 示例)使能了 HRTIM TD1 输出并通过软件对其进行切换。2 ^! a' v6 ]( O; b9 \1 p+ @0 T
/* 使用 PLLx2 时钟来实现 HRTIM */0 Q- F/ s; w; P3 y6 M2 n, ~" H$ a- Y
__HAL_RCC_HRTIM1_CONFIG(RCC_HRTIM1CLK_PLLCLK);DocID026506 Rev 1 [English Rev 1] 9/33
, g3 ?' W/ f' R3 H9 y/* 使能 HRTIM 时钟 */% }9 J6 v1 |$ ]- ~/ `
__HRTIM1_CLK_ENABLE();
3 ]  _7 x4 \! k9 Q& O' z3 p& `/* DLL 校准:使能了周期校准,周期设置为 14µs */# m/ y4 x  h* p( C7 P1 b  t
HRTIM1->sCommonRegs.DLLCR = HRTIM_CALIBRATIONRATE_14| HRTIM_DLLCR_CALEN;
& P) C. I0 y% T7 f/* 检查 DLL 校准完成的标志位 */
- e/ X# d0 \  i9 i0 wwhile(HRTIM1->sCommonRegs.ISR & HRTIM_IT_DLLRDY == RESET);
/ l! `7 G: R& o# Y& ?HRTIM1->sCommonRegs.OENR = HRTIM_OENR_TD1OEN; /* 使能 TD1 输出 */! O8 p! J& G6 [+ h
GPIO_HRTIM_outputs_Config(); /* 初始化 HRTIM 输出 */$ s* l4 p- u, \+ d7 e8 \
while(1)
; N1 s; W) i- `9 |  N( O {
6 S2 v, S1 W& e& Q& D /* 通过软件来置位和复位 TD1 */: t5 ~0 C3 f9 o* m! c
HRTIM1->sTimerxRegs[HRTIM_TIMERINDEX_TIMER_D].SETx1R = HRTIM_SET1R_SST;
4 c; o& q& f2 H5 o. [/ ^+ Z6 K HRTIM1->sTimerxRegs[HRTIM_TIMERINDEX_TIMER_D].RSTx1R = HRTIM_RST1R_SRT;
- [8 H( }# _5 i0 D" H. j }
$ f/ p- Q# f& m/ ~' z8 ]$ @; D. T8 U; d% }
此处复制的代码片段可从 HRTIM_Snippets 和 HRTIM_BasicPWM 示例中获取。两种情况下都须通过 #define HRTIM_CHECK 语句来选择示例。  F- k) B* ~8 G' R8 T7 _6 E
对于本文档其余部分,时钟和 DLL 初始化部分将不再重复,而代之以对HRTIM_Minimal_Config() 函数的调用。; c4 L7 _7 P& u! }+ j( n2 Z/ a
7 I/ q5 Y0 ]7 ^" j& c
完整版请查看:附件
  w  x7 I- c! c7 U

DM00121475_ZHV1.pdf

下载

820.72 KB, 下载次数: 199

赞 收藏 2 评论3 发布时间:2022-7-14 18:00

举报

3个回答
wf237574800 回答时间:2024-5-3 16:29:24
[md]
大海无聊 回答时间:2024-9-9 10:06:01

下载看看

Goodluckone 回答时间:2025-12-4 13:49:18

下载看看

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版