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

HRTIM 指南

[复制链接]
STMCU小助手 发布时间:2022-7-14 18:00
前言, O! A- u" k1 R4 r
在 STM32 微控制器中, STM32F334xx 产品的目标市场是需要高度精确计时数字信号、尤其是数字功率转换应用的细分市场。包括:, i$ w0 f4 J  G; X5 C7 |5 F$ x
• 数字电源;
/ ^1 E! X( Y( q) B• 照明;- ^8 c1 y! I* P; i( a7 [
• 不间断电源;
! b: I0 }2 M! j( }4 W. p• 太阳能逆变器;( W9 B  c0 r" z" y& j: `/ u* Z* O
• 无线充电器。3 E# X6 x. {1 W
STM32F334xx 微控制器具有高分辨率定时器 (HRTIM)外设,可产生多达 10 个信号,能够处理用于控制、同步或保护的各种不同输入信号。其模块化架构允许对大部分转换拓扑和多并联转换器进行处理,并可在运行中重新配置它们。8 z$ a  {0 G$ j1 E& w9 M9 X2 n4 T
通过 STM32F334 参考手册初步了解时,此外设可能看起来比较复杂,这主要是由于它有大量的控制寄存器组。为了补充这份详尽的说明,我们另外提供了一个文档,其中包括快速上手说明以及示例汇总。
1 s) [- b+ l4 l4 x# g8 v+ Y在其第一章中,本指南旨在表明 HRTIM 编程很简单。首先说明环境 (就像是有菜谱的同时也需要有厨房)设置,接着给出了若干简单示例,通过实践帮助理解。这些基本案例用来逐步介绍定时器功能,并提供编程指导。不熟悉 HRTIM 的读者应该仔细阅读本章。
% v) k3 F5 H4 d" W* i) _8 o3 i& k第二部分是转换器集合,可在开始新设计时使用,从中选取现成的代码示例,或者从中得到灵感和编程技巧来处理本文档中未描述的拓扑。但是需要注意,本指南不包括转换器设计本
% t! |; Z1 o  H% }* \: r" b身 (控制技术和元件设计),这些内容在专门的应用笔记中有描述。8 A. N/ g) F) C4 t
如有必要,每个示例都提供了简要的转换器说明 (拓扑和到 MCU 的连接)、控制波形和代码段。/ [/ _. ?7 m7 |4 T; J5 Z7 }
1 S  u2 j9 }9 i4 O0 E& \/ m/ _
1 完成环境的准备
0 ^' H3 M/ g# _" W本章中,我们会确保在开始前所有必需的要素均准备就绪,因此可以仅关注 HRTIM 编程。+ |! b4 J, C0 X) ^! p& W/ J
下列文件作为参考:4 I9 }  r9 h( V; Q: W5 f1 B
• STM32F334x4/x6/x8 数据手册
. }1 R7 w& a1 o! S/ j( j3 Q5 ~: b• STM32F334x4/x6/x8 勘误表3 @3 V1 @- E6 }4 l
• RM0364 参考手册 STM32F334xx 高级 ARM® 为基础的的 32 位 MCU
7 y+ }) n0 \+ m3 b. ?• UM1733:STM32F334 探索套件入门
- n: c7 T2 g  Y) R- R, e. q• UM1735:STM32F3 系列的探索套件 - 采用 STM32F334C8 MCU
! c& F, a6 J! n5 j6 j! |• UM1736:STM32F334 探索软件开发工具入门
9 b' {* B6 m) q# |• AN4885:使用 STM32F3348 Discovery 进行高亮度 LED 调光( F% M. c" J9 F5 U) M$ N1 b5 D
预先阅读 RM0364 中的 HRTIM 章节会有帮助。
! e! c- ?# O5 S% R* m
1.1 必备条件! [3 c4 C& v4 u3 o% d7 I
在享受 HRTIM 的优势之前,我们列出其前提条件。希望读者具有基本的 C 编程技巧,关于MCU 和开发环境的少量经验,以及关于开关模式电源的理论背景。控制策略和元件尺寸标注细节不在本应用笔记范围内,它们可在大量文献中获取。$ c/ h- o: E! ?  Q
为简单起见,本指南仅考虑逻辑信号或直接由 MCU 处理的模拟电压,这样就是与电平无关的。不过有些参考文献涉及外部元件接口和电源切换影响 (当定时器或 MCU 具有处理它们的功能时)。; W) |5 J8 T# b: ?' S+ L) r9 i. {
最后,需要提醒的是,如果 STM32F334 和 HRTIM 用于具有危险电压的应用中,则应由熟练的技术人员来操作功率应用,以避免电击、烧伤甚或死亡的风险。# ?& i4 ^5 c# I- j
3 ~" \2 G6 X$ N" ^. l  I
1.2 硬件设置; a4 Q2 `" x5 X
STM32F334 探索板是价格非常实惠的工具,是开始 (以及继续)用 HRTIM 做实验的最佳选择 (订购码:STM32F3348-DISCO)。它包含了编程接口,芯片编程和调试所需的附加材料只是 USB 连接线。所有 I/O 均可在 2.54 mm 间隔的引脚上使用,因此也可连接到穿孔板 / 条状板 / 试验电路板。套件还有两个功率转换器:一个用于 LED 驱动的反向降压转换器和一个低电压降压 / 升压转换器,均具有独立的输入和输出。
3 L; E/ Y" n2 R/ H6 k; a# v示波器是必备的,最后它与逻辑分析仪一起,用于配置对超过 4 个通道的监测。为了显示出细微的高分辨率步长,示波器的采样率必须至少超过 1GS/s,具有交错采样选项,可将时间精度提高超过 217ps 定时器分辨率。
$ h8 h8 B3 }3 o8 J; D在早期调试阶段,一个或几个函数发生器可帮助仿真来自功率转换器的反馈 (逻辑脉冲或模拟信号)。该发生器必须有触发输入,用于一些特殊用途。如果缺少,也可利用空闲的定时单元,由 HRTIM 本身来仿真反馈信号,这需要多编写一些代码 (或重复利用软件示例)。
3 u1 f; s! Y6 N
/ A. E9 y1 Y# {+ O
1.3 工具设置6 H5 T/ \' b% y; q
必须安装一个编译器 (所有示例均适用 32K)以及支持 ST-LINK-V2 调试接口的 IDE。3 Z. {3 U$ }% L# |" t2 z; `
下面给出的代码片段与编译器无关:$ H" J( P% X% E6 ]9 H
它们将被简单地复制到面向各种工具链的通用 HRTIM工程模板中。& \$ k7 R5 O4 e+ F1 ^
对于下面的工具链,软件源随工作空间给出:" s% Q1 `2 N: R3 A* C; [  I
• IAR (EWARM 7.10.3) ; 7 B; l3 N! Q# l! ?* U3 H0 S
• KEIL® (MDK-ARM 4.7)。
8 x( k/ }1 m% N, r1 J) `! t; C! r+ f/ J+ w4 X/ N# D
1.4 STM32F334 和 HRTIM 设置
8 J* m& H( J! ]* n8 ?8 a# ]/ [1.4.1 系统时钟初始化
2 B" Y* a0 \3 ^" d5 l) U0 I为了实现高分辨率, HRTIM 需要由 PLL 高频输出直接馈送。有两种选择可供使用:) L0 g* ~2 R" L, x) Y- ~6 }
• 基于晶体的高速外部(HSE)振荡器,由 PLL 倍频后可提供 144MHz 的频率。这种情况下,此高分辨率为 217ps (144MHz 时钟周期的 1/32);
# x6 [. [% Z' x% j* K• 高速内部(HSI)振荡器,能够提供 128MHz 的频率(8MHz 由 PLL 倍频 16 倍)。这种情况下,高分辨率步长为 244ps (128MHz 时钟周期的 1/32)。该选项适用于有限的温度范围,相关情况参见 STM32F334 数据手册。
$ D: Q. R6 `; W在 HAL 库初始化 (HAL_Init)后,立即在主程序中使用 SystemClock_Config() 函数,完成时钟初始化。. P2 B1 t7 l9 k% n( Z, ~, b
CPU 时钟也来源于 PLL (除以 2 之后),因此它可达到 PLL 输出频率的一半 (使用 HSE
  h) r) G2 C" j3 N. l时为 72MH,使用 HSI 时为 64MHz)。它还可被降低,以减少 MCU 功耗,同时保持高分辨7 P; |# R8 Q% D( i
率功能。; L! m3 R0 E2 t4 F. ~+ ^
可最后在主程序中执行 SystemCoreClockUpdate 函数来验证 CPU 工作频率:该频率在
$ A+ ?" `' H- n8 pSystemCoreClock 变量中更新。/ x$ w" n# z3 G8 a
1.4.2 HRTIM 初始化! y! r( z# _6 P
本章逐步地详细介绍如何初始化 HRTIM,包括各个函数调用。实际上,这在HAL_HRTIM_Init 和 HAL_HRTIM_MspInit 程序中完成。
! ?. M: b" f2 a: M, o, B  n. T" K8 o) @0 h. k: x, {
HRTIM 时钟初始化" s* c3 `9 N. ?# N% T% S; N
当 MCU 上电并开始运行, HRTIM 在编程之前就必须进行时钟控制。这利用复位和时钟控制 (RCC)来实现,包括 2 个步骤:2 k. a0 c+ [0 o2 T, S
1.
' V# ^2 _. ^4 Q1 y( v为 RCC_CFGR3 寄存器中的 HRTIM 选择高速 PLL 输出:
3 ^3 A! Q; y) y__HAL_RCC_HRTIM1_CONFIG(RCC_HRTIM1CLK_PLLCLK);! l4 r" }  D8 H% s
2. 为在 APB2 总线上映射的寄存器进行时钟使能。
3 ^! t1 m" q  I( u__HRTIM1_CLK_ENABLE();- v  U$ [3 W8 x
/ B7 D+ L+ l1 B2 j; N& l' _
1.4.3 HRTIM DLL 初始化  H- f1 y% B; `- F" F& U: ?4 s
HRTIM 的延迟锁相环 (DLL)可提供细粒度计时,将高频率 (144 或 128MHz)时钟周期分为 32 个均匀分布的间隔。
( f: J9 M+ Q7 d( Z1 E: f# s在使用高分辨率前,此 DLL 必须至少校准一次。如果电压或温度条件发生改变,在 HRTIM操作过程中可透明地重新进行该校准。也可由硬件使能周期校准。
' Q6 D( o- t' c2 W  ^1 D  ?) P下面的代码段显示如何完成校准。当 DLLRDY 标志被置位后,高分辨率可用。4 i3 ]) g( a0 h3 X1 p0 v$ v) ^& F
/* DLL 校准:使能了周期校准,周期设置为 14µs */HRTIM1->sCommonRegs.DLLCR = HRTIM_CALIBRATIONRATE_14| HRTIM_DLLCR_CALEN;/* 检查 DLL 校准完成的标志位 */
5 g' J1 H5 h, {# O6 B while(HRTIM1->sCommonRegs.ISR & HRTIM_IT_DLLRDY == RESET);- L4 L1 s% l. f  J
建议使能周期校准,默认情况下采用最小校准周期 (设为 14µs)。
: h0 b- |, U" }- i- ?注: 如果 DLL 未锁定 (通常是由于 HSE 振荡器未正常配置),下面的代码将引起执行延迟。
8 ]" w: A! E, n& C( L. |HAL 库包含一个函数来实现校准,它具有超时验证,如有必要可重定向至差错处理程序。基于 HAL 的软件示例中使用了此函数。$ C: ]$ T: `9 b5 m( w2 ^- g2 ~
1.4.4 HRTIM I/O 初始化
: J: L' j2 i9 Q6 q+ s( p# D; QHRTIM 输入和输出映射到标准 I/O 端口,必须像其他 I/O 外设一样进行编程。 HRTIM 端口通道影射为:
- i1 h% Q4 |) F$ s• AF13 通道 (面向 HRTIM I/O 端口,位于端口 A 和 B);) U7 Q* h6 `& M! j8 {
• AF3 通道 (面向 HRTIM I/O 端口,位于端口 C);
( A8 ]- y' N  p& T# t/ ]HRTIM I/O 初始化必须在两个阶段中完成。在 HRTIM 寄存器之前,首先在HAL_HRTIM_MspInit 函数中初始化 HRTIM 输入。
# m+ Q3 l: i) m. g$ ~HRTIM 输出必须在 HRTIM 控制寄存器编程 (示例中它在 GPIO_HRTIM_outputs_Config 函数中完成)后且当计数器使能时进行初始化。这是为了保证来自 GPIO 电路的控制信号传输到 HRTIM 定时器之前,在 HRTIM 中能够正确定义输出状态。; g; h8 o. S) E) q3 x* h

& B" }+ A/ ~4 [: |/ s
1.4.5 其他外设初始化# Y2 x1 ~9 K9 b8 V8 h* I1 b
HRTIM 与多种 MCU 外设交互作用,如下所列。进行 IHRTIM 操作时不强制要求对它们全部
4 @9 ]& A1 ?5 z- e进行初始化。下列外设的初始化代码在后面所述的一些示例中提供。
1 x3 Q/ r, x6 w# B. M9 \8 ]5 r0 N
" x4 ?% f- v. ]  p
嵌套向量中断控制器 (Nested Vectored Interrupt Controller, NVIC)
+ U# Y2 N0 B. `) u& `4 bHRTIM 中断请求分组为 7 种中断向量。所有错误均分组到一个特殊向量中,可设置为非常高的优先级。
6 |! Z/ @! p) C# ?6 P9 U" m与 HRTIM 相关的 NVIC 部分在 HAL_HRTIM_MspInit 函数中进行编程。
1 D3 o1 U7 f( o2 O# t5 x2 N8 C& k9 H" b1 E7 ~
DMA 控制器
) P5 N- {6 ~# N& ?* R, K大部分中断请求可用作 DMA 请求,分组到 6 个 DMA 通道 (每个定时单元一个,包括主定时器)。
& L. c  P) Q  P+ [, S3 J当启动定时器时,基于 DMA 的 HRTIM 操作使能,利用专门的开始 / 停止函数如HAL_HRTIM_WaveformCounterStart_DMA。: n8 h9 S9 K9 t! C; z

; W6 ]6 q( J+ a: Q' {" I3 c* x- U比较器
) a9 `. _" [! ?  i) }3 个内置比较器可用来调节模拟信号:它们必须在输出到达 HRTIM 前进行初始化。
4 \2 D' a  R) R) t2 t1 \: V6 a初始化包括模拟输入编程、时钟使能和极性。
2 O0 w5 M* t( @" Q' D% w
' g* C( w. H  ^& v4 F
运算放大器
7 W( l" P, f7 r: j: [- i5 c内置运算放大器能够放大进入 ADC 或比较器的低电压信号,也可直接充当比较器 (相比普通比较器,它速率较低)。它必须与比较器一样进行初始化。
$ a! ?# T* C( g) U& v* o; a/ J& u9 R  i$ C
ADC 转换器
3 |2 b: h+ m$ q: XHRTIM 能够触发两个 ADC 转换器中的任意一个。应初始化它们以接收外部触发器信号 (在其常规和 / 或注入转换序列上)。: P7 J5 d8 V/ M7 P  a
ADC 的另一个可能用途在于使用模拟看门狗在 HRTIM 上触发外部事件 (用于输出置位 / 复位或计数器复位)。/ W8 I6 A# [( ?' b  K4 r& P
3 P$ V, \" X6 a0 \/ z$ Y5 \
DAC 转换器- t) ~0 ~0 A  [4 Q5 n% ^' ]
DAC 转换器通常用于定义比较器阈值。它们可利用 HRTIM 的 DAC 触发器,与 HRTIM 操作同步更新。9 f3 I- [, Y, x6 @

  a  \* ^. L9 A' H  G
通用定时器& h5 u3 G6 f, \. P- x# ]4 I
HRTIM 也可连接到其他片上定时器,有以下用途:2 ]  z4 _, A/ e9 B
• 作为外部事件;
5 a, h2 @! z) z" b' o: J; V2 u8 e• 作为突发模式触发器或时钟;
+ p; k+ Z2 m% V. w; {• 用于 HRTIM 寄存器更新触发。: s/ R" s9 k9 g9 |

7 p$ f7 X& s+ G% \/ e
1.4.6 HRTIM 功能检查
! t) p/ }6 q% ^当所有初始化完成,可验证 HRTIM 能够利用下面的简单代码来运行。此示例代码(HRTIM_BasicPWM 示例)使能了 HRTIM TD1 输出并通过软件对其进行切换。; k! g- E% F+ W! p0 z( ]- j1 N# {2 E
/* 使用 PLLx2 时钟来实现 HRTIM *// C2 t/ \: v' V+ R$ S& [
__HAL_RCC_HRTIM1_CONFIG(RCC_HRTIM1CLK_PLLCLK);DocID026506 Rev 1 [English Rev 1] 9/33  ]" `5 v$ w% u% x+ Y' O; A* B! P
/* 使能 HRTIM 时钟 */
) q& y- o) w' t" s2 V8 y3 J2 k/ Z__HRTIM1_CLK_ENABLE();) ?! k7 A: _8 W  o: f. b
/* DLL 校准:使能了周期校准,周期设置为 14µs */# d) c2 x  [9 x6 _
HRTIM1->sCommonRegs.DLLCR = HRTIM_CALIBRATIONRATE_14| HRTIM_DLLCR_CALEN;1 O) F# B$ |8 i, H+ Y) j
/* 检查 DLL 校准完成的标志位 */
4 }7 g1 b% o6 H0 d! gwhile(HRTIM1->sCommonRegs.ISR & HRTIM_IT_DLLRDY == RESET);4 l0 N- R, Q2 O8 G, o; Z) f0 e7 {
HRTIM1->sCommonRegs.OENR = HRTIM_OENR_TD1OEN; /* 使能 TD1 输出 */
' A. L) v/ J' X* M& E& lGPIO_HRTIM_outputs_Config(); /* 初始化 HRTIM 输出 */: ~% x4 R5 {8 p, i
while(1)
( m& T2 I' _% |  _# k5 o$ p {
. J) D5 @( O1 u& T /* 通过软件来置位和复位 TD1 */
( c. d% e5 H$ E' { HRTIM1->sTimerxRegs[HRTIM_TIMERINDEX_TIMER_D].SETx1R = HRTIM_SET1R_SST;# Q' e9 `- M4 l/ u
HRTIM1->sTimerxRegs[HRTIM_TIMERINDEX_TIMER_D].RSTx1R = HRTIM_RST1R_SRT;
5 U5 p6 E' E7 ^9 w }
: H$ w6 k7 p  P6 n: Z1 C
' _& u6 F/ }( I- N- d9 [" C
此处复制的代码片段可从 HRTIM_Snippets 和 HRTIM_BasicPWM 示例中获取。两种情况下都须通过 #define HRTIM_CHECK 语句来选择示例。
# k6 x/ q/ w* [: Y对于本文档其余部分,时钟和 DLL 初始化部分将不再重复,而代之以对HRTIM_Minimal_Config() 函数的调用。
1 I) G2 s; b5 f# q2 R. o5 Y) l7 F8 _/ Z* [( `1 G* T' f
完整版请查看:附件5 a. ^% @$ m( i: ^, e8 C

DM00121475_ZHV1.pdf

下载

820.72 KB, 下载次数: 197

赞 收藏 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 手机版