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

HRTIM 指南

[复制链接]
STMCU小助手 发布时间:2022-7-14 18:00
前言/ ?2 r" K- }+ f; l- `9 e
在 STM32 微控制器中, STM32F334xx 产品的目标市场是需要高度精确计时数字信号、尤其是数字功率转换应用的细分市场。包括:6 v. _% U/ u5 M1 }  P- K6 l
• 数字电源;
  z4 m) h7 c8 {9 C* ]$ r• 照明;
6 j* f& s8 {0 k' v0 _/ N• 不间断电源;
. k/ z5 S1 o. y& l+ G5 f- l• 太阳能逆变器;
4 [$ ]( ~: Z$ L% a& u• 无线充电器。& J' H( F6 b7 D& ^+ d. Z
STM32F334xx 微控制器具有高分辨率定时器 (HRTIM)外设,可产生多达 10 个信号,能够处理用于控制、同步或保护的各种不同输入信号。其模块化架构允许对大部分转换拓扑和多并联转换器进行处理,并可在运行中重新配置它们。
! j8 U" Y  I3 Z  d/ _# r通过 STM32F334 参考手册初步了解时,此外设可能看起来比较复杂,这主要是由于它有大量的控制寄存器组。为了补充这份详尽的说明,我们另外提供了一个文档,其中包括快速上手说明以及示例汇总。9 F$ L) Y( x6 u4 l. W1 `% q% j. w
在其第一章中,本指南旨在表明 HRTIM 编程很简单。首先说明环境 (就像是有菜谱的同时也需要有厨房)设置,接着给出了若干简单示例,通过实践帮助理解。这些基本案例用来逐步介绍定时器功能,并提供编程指导。不熟悉 HRTIM 的读者应该仔细阅读本章。
% @' w, X( r) o* {, t7 U! l第二部分是转换器集合,可在开始新设计时使用,从中选取现成的代码示例,或者从中得到灵感和编程技巧来处理本文档中未描述的拓扑。但是需要注意,本指南不包括转换器设计本1 i" p& @# G/ q5 p4 e
身 (控制技术和元件设计),这些内容在专门的应用笔记中有描述。6 L" w3 @  B1 e. ?
如有必要,每个示例都提供了简要的转换器说明 (拓扑和到 MCU 的连接)、控制波形和代码段。. @) \' B) C# f% ^- |

% E: c( O* y0 ]3 E8 w0 m, z
1 完成环境的准备
3 o5 i$ k- k& N# {' b" T本章中,我们会确保在开始前所有必需的要素均准备就绪,因此可以仅关注 HRTIM 编程。4 R2 A4 y5 `# B# I
下列文件作为参考:
" w0 `$ g( Y, v9 d6 w4 d+ U- ESTM32F334x4/x6/x8 数据手册
+ J$ U( X& L. H6 J: RSTM32F334x4/x6/x8 勘误表
" x: A( b! j/ L; R- E) @- `RM0364 参考手册 STM32F334xx 高级 ARM® 为基础的的 32 MCU
: r! {0 \$ a# r5 W3 H  SUM1733STM32F334 探索套件入门' t- }5 ?" e1 g0 c% f# ?! g
UM1735STM32F3 系列的探索套件 - 采用 STM32F334C8 MCU
9 `, c8 N$ {0 X* ?0 ~UM1736STM32F334 探索软件开发工具入门
5 [6 J  q6 [3 PAN4885:使用 STM32F3348 Discovery 进行高亮度 LED 调光
1 s* g) b# A- _: O9 B预先阅读 RM0364 中的 HRTIM 章节会有帮助。% i9 u+ n- E/ M8 b7 U4 L
1.1 必备条件
1 ^( P9 g8 S. n) }9 N2 @8 W& o. w在享受 HRTIM 的优势之前,我们列出其前提条件。希望读者具有基本的 C 编程技巧,关于MCU 和开发环境的少量经验,以及关于开关模式电源的理论背景。控制策略和元件尺寸标注细节不在本应用笔记范围内,它们可在大量文献中获取。
4 p+ a: L" `( u5 _  U为简单起见,本指南仅考虑逻辑信号或直接由 MCU 处理的模拟电压,这样就是与电平无关的。不过有些参考文献涉及外部元件接口和电源切换影响 (当定时器或 MCU 具有处理它们的功能时)。
3 s- r1 [7 w. O4 v% w: L最后,需要提醒的是,如果 STM32F334 HRTIM 用于具有危险电压的应用中,则应由熟练的技术人员来操作功率应用,以避免电击、烧伤甚或死亡的风险。
; {$ K! i) E% c9 ^, [- j8 H
) }8 f4 F3 [( Q, L
1.2 硬件设置% d0 P' G/ m) X' }: z
STM32F334 探索板是价格非常实惠的工具,是开始 (以及继续)用 HRTIM 做实验的最佳选择 (订购码:STM32F3348-DISCO)。它包含了编程接口,芯片编程和调试所需的附加材料只是 USB 连接线。所有 I/O 均可在 2.54 mm 间隔的引脚上使用,因此也可连接到穿孔 / 条状板 / 试验电路板。套件还有两个功率转换器:一个用于 LED 驱动的反向降压转换器和一个低电压降压 / 升压转换器,均具有独立的输入和输出。
) t/ @1 _" N) F/ [示波器是必备的,最后它与逻辑分析仪一起,用于配置对超过 4 个通道的监测。为了显示出细微的高分辨率步长,示波器的采样率必须至少超过 1GS/s,具有交错采样选项,可将时间精度提高超过 217ps 定时器分辨率。
1 v3 _7 ~* E5 o; Z7 f3 G在早期调试阶段,一个或几个函数发生器可帮助仿真来自功率转换器的反馈 (逻辑脉冲或模拟信号)。该发生器必须有触发输入,用于一些特殊用途。如果缺少,也可利用空闲的定时单元,由 HRTIM 本身来仿真反馈信号,这需要多编写一些代码 (或重复利用软件示例)。1 N* A& J1 }/ ~% J

' l+ e1 C7 t0 Z8 ]8 }  S% b
1.3 工具设置# w0 b) k* Q$ w, N6 h
必须安装一个编译器 (所有示例均适用 32K)以及支持 ST-LINK-V2 调试接口的 IDE- f2 q, P. \$ t# d
下面给出的代码片段与编译器无关:% ]2 N0 j1 y! l  ?
它们将被简单地复制到面向各种工具链的通用 HRTIM工程模板中。( D6 e: M9 u4 U
对于下面的工具链,软件源随工作空间给出:& k7 M/ t% Y* Y: @' L
IAR (EWARM 7.10.3)
: E; {6 [1 }+ F! ZKEIL® (MDK-ARM 4.7)
' O4 ?$ g0 v& V' i5 H, T
/ n# y1 {# R- `% d9 S& \
1.4 STM32F334 HRTIM 设置
' N; e( K! V( h4 v: l1.4.1 系统时钟初始化" K. P* {. B* {% `7 M( ?  t+ I
为了实现高分辨率, HRTIM 需要由 PLL 高频输出直接馈送。有两种选择可供使用:9 \8 h8 c, x7 ~
基于晶体的高速外部(HSE)振荡器,由 PLL 倍频后可提供 144MHz 的频率。这种情况下,此高分辨率为 217ps 144MHz 时钟周期的 1/32);6 ^' x* c* B: S, f4 u5 v* O& x5 J* h
高速内部(HSI)振荡器,能够提供 128MHz 的频率(8MHz PLL 倍频 16 倍)。这种情况下,高分辨率步长为 244ps 128MHz 时钟周期的 1/32)。该选项适用于有限的温度范围,相关情况参见 STM32F334 数据手册。0 {' r" S" F3 w
HAL 库初始化 (HAL_Init)后,立即在主程序中使用 SystemClock_Config() 函数,完成时钟初始化。
! n  f* a  M' w8 b& KCPU 时钟也来源于 PLL (除以 2 之后),因此它可达到 PLL 输出频率的一半 (使用 HSE
! Q; K9 \( |+ P时为 72MH,使用 HSI 时为 64MHz)。它还可被降低,以减少 MCU 功耗,同时保持高分辨% B8 R/ [- `- ^9 n6 U
率功能。
8 l, v. l. q9 [7 D6 \4 t可最后在主程序中执行 SystemCoreClockUpdate 函数来验证 CPU 工作频率:该频率在! J' E9 p3 F$ d2 x# i" Y
SystemCoreClock 变量中更新。% ]9 J. l3 x0 T. @
1.4.2 HRTIM 初始化
, C9 m- w" j$ o3 O本章逐步地详细介绍如何初始化 HRTIM,包括各个函数调用。实际上,这在HAL_HRTIM_Init HAL_HRTIM_MspInit 程序中完成。
7 D9 A8 z) z" K
1 a: n' [) F3 R9 V: i0 ]/ l# N
HRTIM 时钟初始化
* l9 w/ s2 N8 ?0 X: {& S& A/ P$ tMCU 上电并开始运行, HRTIM 在编程之前就必须进行时钟控制。这利用复位和时钟控制RCC)来实现,包括 2 个步骤:. G% }: l* p* ]  v* U
1.
* x& O( ~7 E6 I% xRCC_CFGR3 寄存器中的 HRTIM 选择高速 PLL 输出:- a) H0 V9 A( l$ i
__HAL_RCC_HRTIM1_CONFIG(RCC_HRTIM1CLK_PLLCLK);( A( ~+ T; F; D9 F' t
2. 为在 APB2 总线上映射的寄存器进行时钟使能。$ I& m$ M9 L% v: T8 M! s# ~
__HRTIM1_CLK_ENABLE();' C" E, C* B- f: b+ N3 g% i0 x

1 e1 G4 {6 v% n+ Z
1.4.3 HRTIM DLL 初始化! b- j+ l( p) f  Q) K0 C4 Q! m# V. f
HRTIM 的延迟锁相环 (DLL)可提供细粒度计时,将高频率 (144 128MHz)时钟周期分为 32 个均匀分布的间隔。
+ s) Q2 `5 j: k- o2 A2 i在使用高分辨率前,此 DLL 必须至少校准一次。如果电压或温度条件发生改变,在 HRTIM操作过程中可透明地重新进行该校准。也可由硬件使能周期校准。7 J2 f5 ~# {& h& ~/ R8 {
下面的代码段显示如何完成校准。当 DLLRDY 标志被置位后,高分辨率可用。
; j2 n) B% v# G% F$ h$ i/ s5 t9 z7 e/* DLL 校准:使能了周期校准,周期设置为 14µs */HRTIM1->sCommonRegs.DLLCR = HRTIM_CALIBRATIONRATE_14| HRTIM_DLLCR_CALEN;/* 检查 DLL 校准完成的标志位 */' j! \# [- m  {3 ]* u. e- q* G
while(HRTIM1->sCommonRegs.ISR & HRTIM_IT_DLLRDY == RESET);
2 B, H# M. W; E, W8 c建议使能周期校准,默认情况下采用最小校准周期 (设为 14µs)。; O8 J1 x. s2 W6 Y
注: 如果 DLL 未锁定 (通常是由于 HSE 振荡器未正常配置),下面的代码将引起执行延迟。
8 O  r& v  g. _3 P% ~- Y; L8 _HAL 库包含一个函数来实现校准,它具有超时验证,如有必要可重定向至差错处理程序。基HAL 的软件示例中使用了此函数。
2 r$ d  C" ?$ I5 L1.4.4 HRTIM I/O 初始化
# M  J  w0 N$ n! E3 s1 U- K. GHRTIM 输入和输出映射到标准 I/O 端口,必须像其他 I/O 外设一样进行编程。 HRTIM 端口通道影射为:
3 z6 v- F  q  s0 i6 X( w$ ~AF13 通道 (面向 HRTIM I/O 端口,位于端口 A B);2 ~' ~0 c- \: y, j4 S
AF3 通道 (面向 HRTIM I/O 端口,位于端口 C);6 u7 `7 [0 ?3 H, G8 l" I# @
HRTIM I/O 初始化必须在两个阶段中完成。在 HRTIM 寄存器之前,首先在HAL_HRTIM_MspInit 函数中初始化 HRTIM 输入。
  }5 Q2 |2 s, u- F2 k- z+ Z4 o- [HRTIM 输出必须在 HRTIM 控制寄存器编程 (示例中它在 GPIO_HRTIM_outputs_Config 数中完成)后且当计数器使能时进行初始化。这是为了保证来自 GPIO 电路的控制信号传输HRTIM 定时器之前,在 HRTIM 中能够正确定义输出状态。
2 I6 N) Y9 V! f$ ]8 e& [) G; B$ k7 n! u- l/ g" C% x& {" ]
1.4.5 其他外设初始化
) ~9 F9 a) g6 P" y1 ZHRTIM 与多种 MCU 外设交互作用,如下所列。进行 IHRTIM 操作时不强制要求对它们全部6 o6 O$ {% `% _: F" D2 y+ O
进行初始化。下列外设的初始化代码在后面所述的一些示例中提供。% B* a; ]; l) t7 Q

: v  V5 I8 m1 {! w7 K! e( r
嵌套向量中断控制器 (Nested Vectored Interrupt ControllerNVIC/ Z# \# U4 F* k- O
HRTIM 中断请求分组为 7 种中断向量。所有错误均分组到一个特殊向量中,可设置为非常高的优先级。
- B- }, H: G& I- r& y# m- l4 YHRTIM 相关的 NVIC 部分在 HAL_HRTIM_MspInit 函数中进行编程。4 G  L: ?- o/ }( |

1 v" b% Y3 H. bDMA 控制器
1 t# Z% m2 Z3 c# O+ p5 `* ]大部分中断请求可用作 DMA 请求,分组到 6 DMA 通道 (每个定时单元一个,包括主定时器)
& v& x; A* S" w$ R& `9 a% b当启动定时器时,基于 DMA HRTIM 操作使能,利用专门的开始 / 停止函数如HAL_HRTIM_WaveformCounterStart_DMA
  G, A" n! W4 S! U  N" i9 M  }8 j3 _" H. P5 T
比较器- S; x8 x) I1 [1 t6 Q; @5 r, }
3 个内置比较器可用来调节模拟信号:它们必须在输出到达 HRTIM 前进行初始化。
; f/ p5 e* A! W- b初始化包括模拟输入编程、时钟使能和极性。
; O% X. p' t$ }+ w$ h
0 }1 [: o" r' a  c, W! c
运算放大器
/ q, V$ \( \4 H6 F( w3 `, f2 B内置运算放大器能够放大进入 ADC 或比较器的低电压信号,也可直接充当比较器 (相比普通比较器,它速率较低)。它必须与比较器一样进行初始化。! E. _+ b6 Z& q5 B# i& I+ ~! m& V
* f' g: C' C/ p; ~  j% y
ADC 转换器" E1 s6 k3 M5 u' t
HRTIM 能够触发两个 ADC 转换器中的任意一个。应初始化它们以接收外部触发器信号 (在其常规和 / 或注入转换序列上)。5 p/ W+ @& w' U
ADC 的另一个可能用途在于使用模拟看门狗在 HRTIM 上触发外部事件 (用于输出置位 / 位或计数器复位)。' u2 s! ~' _( B: w, d4 Q: w4 P

9 d, e8 v( m4 L) w( H. A$ [
DAC 转换器
$ x6 X$ g  j0 n1 W- E0 MDAC 转换器通常用于定义比较器阈值。它们可利用 HRTIM DAC 触发器,与 HRTIM 操作同步更新。! C! u- M( Z: e6 X; k; j- X) \. ]0 o
6 t& h) j5 @. f# r% s4 u6 l7 F
通用定时器
2 C! z5 h" E. z+ YHRTIM 也可连接到其他片上定时器,有以下用途:. w* G! I9 B, P" C1 _
作为外部事件;
9 v% ]+ {+ }" @' l& ^+ _作为突发模式触发器或时钟;6 w" p& b( a6 o4 A" E
用于 HRTIM 寄存器更新触发。- F( j$ |6 p" ?7 B6 N; f, ~

' \+ m* }0 ^0 A/ |6 l
1.4.6 HRTIM 功能检查# y8 x2 g7 i$ N% V- s
当所有初始化完成,可验证 HRTIM 能够利用下面的简单代码来运行。此示例代码HRTIM_BasicPWM 示例)使能了 HRTIM TD1 输出并通过软件对其进行切换。
: t2 h2 Z8 P2 p, t/* 使用 PLLx2 时钟来实现 HRTIM */$ Z4 M2 x. }+ D2 m
__HAL_RCC_HRTIM1_CONFIG(RCC_HRTIM1CLK_PLLCLK);DocID026506 Rev 1 [English Rev 1] 9/335 L6 e- x8 p5 y! _. F
/* 使能 HRTIM 时钟 */  t8 q. c" |6 _, ?
__HRTIM1_CLK_ENABLE();* A% C' z- x  f5 Z* q. @; s
/* DLL 校准:使能了周期校准,周期设置为 14µs */
- q6 F9 T/ H+ K! [: n" ZHRTIM1->sCommonRegs.DLLCR = HRTIM_CALIBRATIONRATE_14| HRTIM_DLLCR_CALEN;
9 F/ y0 k4 v* @4 q+ @; T/* 检查 DLL 校准完成的标志位 */9 m2 h6 y+ k6 v) [4 l& Q2 K) w
while(HRTIM1->sCommonRegs.ISR & HRTIM_IT_DLLRDY == RESET);# Y& g' Y' K4 R0 [% O
HRTIM1->sCommonRegs.OENR = HRTIM_OENR_TD1OEN; /* 使能 TD1 输出 */) H* ?/ t, a# I& G4 D' p' [
GPIO_HRTIM_outputs_Config(); /* 初始化 HRTIM 输出 */
1 c7 n" Y6 |3 a0 P# Vwhile(1)
4 K0 C1 _! V0 t2 ~ {3 T# N4 g- m: _  X- c, J2 u
/* 通过软件来置位和复位 TD1 */
/ U7 t3 h4 F0 p* P, M- l) B HRTIM1->sTimerxRegs[HRTIM_TIMERINDEX_TIMER_D].SETx1R = HRTIM_SET1R_SST;
( {, e$ r9 o% s3 l. i HRTIM1->sTimerxRegs[HRTIM_TIMERINDEX_TIMER_D].RSTx1R = HRTIM_RST1R_SRT;
' m: z. r5 p' N* X3 F$ p# i# Z, M }
% S& K) n& ]& y# B* s, I( h1 Q& e0 W, B4 p1 F
此处复制的代码片段可从 HRTIM_Snippets HRTIM_BasicPWM 示例中获取。两种情况下都须通过 #define HRTIM_CHECK 语句来选择示例。
" n0 b- [" B  l0 i# }7 ^6 G, t$ c对于本文档其余部分,时钟和 DLL 初始化部分将不再重复,而代之以对HRTIM_Minimal_Config() 函数的调用。
) C- z+ ^& l- \5 F: j/ V8 o8 V/ @- M
完整版请查看:附件
  A7 |& j) T! ~% y

DM00121475_ZHV1.pdf

下载

820.72 KB, 下载次数: 125

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

举报

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

下载看看

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版