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

HRTIM 指南

[复制链接]
STMCU小助手 发布时间:2022-7-14 18:00
前言. N0 c. ]# O0 U% G( }
在 STM32 微控制器中, STM32F334xx 产品的目标市场是需要高度精确计时数字信号、尤其是数字功率转换应用的细分市场。包括:
& u+ F2 E9 w; o4 ~• 数字电源;! J5 M+ F; K- w# Q$ f
• 照明;* l9 A0 N+ |' W7 f7 Q% ^* q& R
• 不间断电源;0 C7 p; t3 H7 U: o- c8 i0 u9 k
• 太阳能逆变器;7 R6 E  ]0 e$ y( q
• 无线充电器。
- @) s+ N( e, ^: F6 @$ DSTM32F334xx 微控制器具有高分辨率定时器 (HRTIM)外设,可产生多达 10 个信号,能够处理用于控制、同步或保护的各种不同输入信号。其模块化架构允许对大部分转换拓扑和多并联转换器进行处理,并可在运行中重新配置它们。* [( g1 N  Y8 z, x- G3 _/ m
通过 STM32F334 参考手册初步了解时,此外设可能看起来比较复杂,这主要是由于它有大量的控制寄存器组。为了补充这份详尽的说明,我们另外提供了一个文档,其中包括快速上手说明以及示例汇总。- }, z  n4 W$ w( o
在其第一章中,本指南旨在表明 HRTIM 编程很简单。首先说明环境 (就像是有菜谱的同时也需要有厨房)设置,接着给出了若干简单示例,通过实践帮助理解。这些基本案例用来逐步介绍定时器功能,并提供编程指导。不熟悉 HRTIM 的读者应该仔细阅读本章。
2 G. `- W) D; i- ~& |* O( h) M& H* |5 n第二部分是转换器集合,可在开始新设计时使用,从中选取现成的代码示例,或者从中得到灵感和编程技巧来处理本文档中未描述的拓扑。但是需要注意,本指南不包括转换器设计本  g3 m! ~) [) W, H! V5 t( `/ J( Y
身 (控制技术和元件设计),这些内容在专门的应用笔记中有描述。
: `# Q: z& D7 g  n如有必要,每个示例都提供了简要的转换器说明 (拓扑和到 MCU 的连接)、控制波形和代码段。' [$ L5 h0 v# {" m# [; r

& r# L; H/ A5 T; T+ D- U0 D1 M! c
1 完成环境的准备0 H& b  j' w. E0 z
本章中,我们会确保在开始前所有必需的要素均准备就绪,因此可以仅关注 HRTIM 编程。
# [! c" S4 c  E* C  A下列文件作为参考:0 b' E$ z/ R: X1 M& D* o, g! }0 T
• STM32F334x4/x6/x8 数据手册
% ?( V% H' G/ t• STM32F334x4/x6/x8 勘误表
. ~& x4 h5 t3 a, G% W/ z% u" E• RM0364 参考手册 STM32F334xx 高级 ARM® 为基础的的 32 位 MCU
$ L. e1 U; U- u2 n' t6 D0 r• UM1733:STM32F334 探索套件入门! I( v$ J" j) }% K
• UM1735:STM32F3 系列的探索套件 - 采用 STM32F334C8 MCU
" x! s$ I$ x2 ~5 _( I• UM1736:STM32F334 探索软件开发工具入门
/ s: Z3 v% m% ^. ]9 j; N/ t/ v• AN4885:使用 STM32F3348 Discovery 进行高亮度 LED 调光
3 l5 G6 B6 I; e/ u- ~* ~1 O8 r2 x预先阅读 RM0364 中的 HRTIM 章节会有帮助。
# P  w+ Q. f$ U; o
1.1 必备条件
; c" _' R3 E8 B2 P5 ~2 n7 }3 k在享受 HRTIM 的优势之前,我们列出其前提条件。希望读者具有基本的 C 编程技巧,关于MCU 和开发环境的少量经验,以及关于开关模式电源的理论背景。控制策略和元件尺寸标注细节不在本应用笔记范围内,它们可在大量文献中获取。% L: L/ Q. h4 P1 b0 N  K: r+ M
为简单起见,本指南仅考虑逻辑信号或直接由 MCU 处理的模拟电压,这样就是与电平无关的。不过有些参考文献涉及外部元件接口和电源切换影响 (当定时器或 MCU 具有处理它们的功能时)。
. K5 B0 V& M& Q最后,需要提醒的是,如果 STM32F334 和 HRTIM 用于具有危险电压的应用中,则应由熟练的技术人员来操作功率应用,以避免电击、烧伤甚或死亡的风险。
0 S. R$ ~+ q0 K
+ ~* R  [- w$ ^) X
1.2 硬件设置% l, H& x) K7 D& s
STM32F334 探索板是价格非常实惠的工具,是开始 (以及继续)用 HRTIM 做实验的最佳选择 (订购码:STM32F3348-DISCO)。它包含了编程接口,芯片编程和调试所需的附加材料只是 USB 连接线。所有 I/O 均可在 2.54 mm 间隔的引脚上使用,因此也可连接到穿孔板 / 条状板 / 试验电路板。套件还有两个功率转换器:一个用于 LED 驱动的反向降压转换器和一个低电压降压 / 升压转换器,均具有独立的输入和输出。* V. D/ O& y; [9 x; o
示波器是必备的,最后它与逻辑分析仪一起,用于配置对超过 4 个通道的监测。为了显示出细微的高分辨率步长,示波器的采样率必须至少超过 1GS/s,具有交错采样选项,可将时间精度提高超过 217ps 定时器分辨率。
. ^$ k* E! Q: n/ d) u6 R在早期调试阶段,一个或几个函数发生器可帮助仿真来自功率转换器的反馈 (逻辑脉冲或模拟信号)。该发生器必须有触发输入,用于一些特殊用途。如果缺少,也可利用空闲的定时单元,由 HRTIM 本身来仿真反馈信号,这需要多编写一些代码 (或重复利用软件示例)。
; @* u" w4 u+ \: U' x+ Y# H4 P% Q% U6 h& ?
1.3 工具设置: ]% f# H/ C: P, V; N
必须安装一个编译器 (所有示例均适用 32K)以及支持 ST-LINK-V2 调试接口的 IDE。
, f. u; o9 b' e# o6 l! B下面给出的代码片段与编译器无关:
4 x3 p( ^# w% r* ~7 A  S它们将被简单地复制到面向各种工具链的通用 HRTIM工程模板中。7 T3 [' {1 f' O' h  y6 f/ T3 g
对于下面的工具链,软件源随工作空间给出:, Q) R* R9 g7 |0 W4 \
• IAR (EWARM 7.10.3) ; 0 S! R. p$ k5 ~9 \8 W/ i
• KEIL® (MDK-ARM 4.7)。
& K. f0 r( v6 K) _5 [2 @8 ?# }& n0 @" _* J5 h3 y
1.4 STM32F334 和 HRTIM 设置
: q2 v0 D# ]' H) U1 @1 F1 ]1.4.1 系统时钟初始化
  j% n5 f+ v. d; {# [为了实现高分辨率, HRTIM 需要由 PLL 高频输出直接馈送。有两种选择可供使用:* g/ F4 S$ P; O3 _- w" T
• 基于晶体的高速外部(HSE)振荡器,由 PLL 倍频后可提供 144MHz 的频率。这种情况下,此高分辨率为 217ps (144MHz 时钟周期的 1/32);
' z( {$ c! u& ^2 l. ?/ b7 L• 高速内部(HSI)振荡器,能够提供 128MHz 的频率(8MHz 由 PLL 倍频 16 倍)。这种情况下,高分辨率步长为 244ps (128MHz 时钟周期的 1/32)。该选项适用于有限的温度范围,相关情况参见 STM32F334 数据手册。
/ a" g+ C, b) N% Q在 HAL 库初始化 (HAL_Init)后,立即在主程序中使用 SystemClock_Config() 函数,完成时钟初始化。) z# E* a. G6 r* t) _
CPU 时钟也来源于 PLL (除以 2 之后),因此它可达到 PLL 输出频率的一半 (使用 HSE1 ^. O, E( M8 x
时为 72MH,使用 HSI 时为 64MHz)。它还可被降低,以减少 MCU 功耗,同时保持高分辨
! g/ O! w( I' {7 b率功能。
( P$ D) |4 i( ^% X2 c6 Y可最后在主程序中执行 SystemCoreClockUpdate 函数来验证 CPU 工作频率:该频率在
; B7 p9 l4 L) ]& z1 \9 t3 VSystemCoreClock 变量中更新。
! y) e) o2 F, T4 r) x3 Z% h- x7 d1.4.2 HRTIM 初始化
8 c0 A% q7 `* p' \) C' @4 D- d本章逐步地详细介绍如何初始化 HRTIM,包括各个函数调用。实际上,这在HAL_HRTIM_Init 和 HAL_HRTIM_MspInit 程序中完成。
6 k+ m6 x4 w8 p( o4 |9 d/ `
* I" F' `6 W$ ]1 R
HRTIM 时钟初始化
& s* X- e* H, {; ?当 MCU 上电并开始运行, HRTIM 在编程之前就必须进行时钟控制。这利用复位和时钟控制 (RCC)来实现,包括 2 个步骤:* w; u. Q' d( E0 h7 K0 q+ r
1. 5 h  P& Q# L4 N% A# {# v
为 RCC_CFGR3 寄存器中的 HRTIM 选择高速 PLL 输出:8 L: T( q+ l8 J/ O+ I2 G/ _' q% c+ F* w
__HAL_RCC_HRTIM1_CONFIG(RCC_HRTIM1CLK_PLLCLK);1 y% A# S1 G: A/ G5 A
2. 为在 APB2 总线上映射的寄存器进行时钟使能。
# }5 _/ v4 v3 }, f* H8 C! _5 j" r__HRTIM1_CLK_ENABLE();
* W4 c& C* m. C* e$ k: z' U2 o* i2 ]8 d% C' ?( \' e( P* m2 p7 R1 N
1.4.3 HRTIM DLL 初始化( Y2 ]0 q0 g# |; h8 y
HRTIM 的延迟锁相环 (DLL)可提供细粒度计时,将高频率 (144 或 128MHz)时钟周期分为 32 个均匀分布的间隔。; e; t: l( L! |( O! j* ]
在使用高分辨率前,此 DLL 必须至少校准一次。如果电压或温度条件发生改变,在 HRTIM操作过程中可透明地重新进行该校准。也可由硬件使能周期校准。
) s: y) N) B* ?( J# z1 i下面的代码段显示如何完成校准。当 DLLRDY 标志被置位后,高分辨率可用。
0 o' W" ?# J8 S- d/* DLL 校准:使能了周期校准,周期设置为 14µs */HRTIM1->sCommonRegs.DLLCR = HRTIM_CALIBRATIONRATE_14| HRTIM_DLLCR_CALEN;/* 检查 DLL 校准完成的标志位 */8 s# N- i* v. p- K  y
while(HRTIM1->sCommonRegs.ISR & HRTIM_IT_DLLRDY == RESET);. U; _+ q& ?! g7 |% F8 p$ u
建议使能周期校准,默认情况下采用最小校准周期 (设为 14µs)。8 R; Y* Z" |, E& z1 c
注: 如果 DLL 未锁定 (通常是由于 HSE 振荡器未正常配置),下面的代码将引起执行延迟。
! h  d1 G/ O  P; m$ zHAL 库包含一个函数来实现校准,它具有超时验证,如有必要可重定向至差错处理程序。基于 HAL 的软件示例中使用了此函数。
- b/ t: p$ q  x: i4 I1 L- R1.4.4 HRTIM I/O 初始化
" n* I% F5 V% Y# [HRTIM 输入和输出映射到标准 I/O 端口,必须像其他 I/O 外设一样进行编程。 HRTIM 端口通道影射为:7 b) H) T" ~6 B+ f  t8 c- Q: z( u
• AF13 通道 (面向 HRTIM I/O 端口,位于端口 A 和 B);) v7 a) j; B; Q) J9 ?& u; |. Q
• AF3 通道 (面向 HRTIM I/O 端口,位于端口 C);8 H, G* M, }$ L6 q, T4 _
HRTIM I/O 初始化必须在两个阶段中完成。在 HRTIM 寄存器之前,首先在HAL_HRTIM_MspInit 函数中初始化 HRTIM 输入。
5 z: m3 A. x$ y) @0 ]HRTIM 输出必须在 HRTIM 控制寄存器编程 (示例中它在 GPIO_HRTIM_outputs_Config 函数中完成)后且当计数器使能时进行初始化。这是为了保证来自 GPIO 电路的控制信号传输到 HRTIM 定时器之前,在 HRTIM 中能够正确定义输出状态。9 {4 W) H1 k8 U8 f/ j0 _+ r" C/ Y0 t& A0 b

8 F+ T/ l. O0 q7 ~: I2 g
1.4.5 其他外设初始化$ U9 j$ m+ Z+ S3 y! W- l
HRTIM 与多种 MCU 外设交互作用,如下所列。进行 IHRTIM 操作时不强制要求对它们全部
7 W9 \" a2 ]9 p( [# A5 E- o) ]0 P进行初始化。下列外设的初始化代码在后面所述的一些示例中提供。5 J+ A2 ^* D8 G8 r! l% K
% a: J& j1 o" l3 i) J$ T
嵌套向量中断控制器 (Nested Vectored Interrupt Controller, NVIC)* A4 z" w, {! [( P
HRTIM 中断请求分组为 7 种中断向量。所有错误均分组到一个特殊向量中,可设置为非常高的优先级。. b4 ^- N9 C+ ?( v9 e& u
与 HRTIM 相关的 NVIC 部分在 HAL_HRTIM_MspInit 函数中进行编程。
& B) D( D8 l4 y8 K+ u
7 ?# V; v; b. q6 i0 o9 j# v3 sDMA 控制器# t7 }9 S! ?0 e" d! v3 U0 w+ R
大部分中断请求可用作 DMA 请求,分组到 6 个 DMA 通道 (每个定时单元一个,包括主定时器)。
! C2 D6 p1 v/ l  V当启动定时器时,基于 DMA 的 HRTIM 操作使能,利用专门的开始 / 停止函数如HAL_HRTIM_WaveformCounterStart_DMA。9 Z$ A  N/ o$ F+ z
* Q( R8 S; F4 K/ P  P. K
比较器2 O: y  x- n5 U" I" H
3 个内置比较器可用来调节模拟信号:它们必须在输出到达 HRTIM 前进行初始化。8 ]1 j8 ]1 w* J! O2 o( v
初始化包括模拟输入编程、时钟使能和极性。: A2 X" n; W, s6 A* ?7 ^

' X0 t0 R: M4 T$ N# D6 g$ m8 Z
运算放大器9 K9 C/ |& q4 h
内置运算放大器能够放大进入 ADC 或比较器的低电压信号,也可直接充当比较器 (相比普通比较器,它速率较低)。它必须与比较器一样进行初始化。+ n% G- L$ W9 K8 M) f
. q4 v* Z" W% |6 M1 |# d( A% h
ADC 转换器
/ S8 j( t6 G& v' ~+ y+ @HRTIM 能够触发两个 ADC 转换器中的任意一个。应初始化它们以接收外部触发器信号 (在其常规和 / 或注入转换序列上)。( T* B7 O  L0 |+ ?* U' h: i3 u
ADC 的另一个可能用途在于使用模拟看门狗在 HRTIM 上触发外部事件 (用于输出置位 / 复位或计数器复位)。
9 C+ H! S) M3 f+ h% X# j% B! l- y
DAC 转换器4 d+ x9 {6 a5 w8 U  p
DAC 转换器通常用于定义比较器阈值。它们可利用 HRTIM 的 DAC 触发器,与 HRTIM 操作同步更新。+ j: c" `2 N  `6 W3 i; b# A$ O9 h
8 Z; G1 X) m2 |. \
通用定时器9 p* @2 I' d- _! P3 V& h) h& U
HRTIM 也可连接到其他片上定时器,有以下用途:: Q+ G* G5 k/ i" }* Q. L- P, e6 T0 L
• 作为外部事件;
0 N$ F3 ]2 X  b, `• 作为突发模式触发器或时钟;, A* H- n9 q) p
• 用于 HRTIM 寄存器更新触发。/ Q- _9 }: B  ~; q" ~/ m' {. U
0 A' x1 T7 n* y# G9 \
1.4.6 HRTIM 功能检查
( r9 ]6 y* l. _当所有初始化完成,可验证 HRTIM 能够利用下面的简单代码来运行。此示例代码(HRTIM_BasicPWM 示例)使能了 HRTIM TD1 输出并通过软件对其进行切换。
- w) j# A: e, o/* 使用 PLLx2 时钟来实现 HRTIM */$ O" K# l/ E9 q, |, C. q& g9 |; `
__HAL_RCC_HRTIM1_CONFIG(RCC_HRTIM1CLK_PLLCLK);DocID026506 Rev 1 [English Rev 1] 9/33% u6 m, I+ t, @. _5 ]' N# `
/* 使能 HRTIM 时钟 */
3 r7 X' h5 m5 k6 \2 l# a__HRTIM1_CLK_ENABLE();
- F3 K8 E6 ?8 Y6 ~+ H# ?/* DLL 校准:使能了周期校准,周期设置为 14µs */1 d+ E) Z! K, W8 K; W2 [0 }" ^
HRTIM1->sCommonRegs.DLLCR = HRTIM_CALIBRATIONRATE_14| HRTIM_DLLCR_CALEN;5 V5 E) P+ H1 i3 ?  |+ A
/* 检查 DLL 校准完成的标志位 */# x6 r; ?+ H$ I* D' D! H& }
while(HRTIM1->sCommonRegs.ISR & HRTIM_IT_DLLRDY == RESET);0 p% Y8 t2 {& p6 V" N0 q" D; ?
HRTIM1->sCommonRegs.OENR = HRTIM_OENR_TD1OEN; /* 使能 TD1 输出 */0 |+ P. k5 m3 r0 y& d' e
GPIO_HRTIM_outputs_Config(); /* 初始化 HRTIM 输出 */
  ]" V7 \; G$ C* j) q/ ~2 Nwhile(1)* {% I) h6 ~. n7 G$ ]
{6 T5 t3 `  L4 g& F3 r4 f" U
/* 通过软件来置位和复位 TD1 */
, ]( O2 Y. l: r+ A9 n0 O HRTIM1->sTimerxRegs[HRTIM_TIMERINDEX_TIMER_D].SETx1R = HRTIM_SET1R_SST;; k  r. F0 D2 _# D  ?4 A- @% \0 z
HRTIM1->sTimerxRegs[HRTIM_TIMERINDEX_TIMER_D].RSTx1R = HRTIM_RST1R_SRT;5 n+ i- X$ i) Z
}
- X: A& w2 s% E/ k& n6 [: ^
5 j* J& J+ _4 ~! z+ i
此处复制的代码片段可从 HRTIM_Snippets 和 HRTIM_BasicPWM 示例中获取。两种情况下都须通过 #define HRTIM_CHECK 语句来选择示例。1 Z1 D; C2 v1 S3 y( O( o
对于本文档其余部分,时钟和 DLL 初始化部分将不再重复,而代之以对HRTIM_Minimal_Config() 函数的调用。" c' v. p; x) G

1 A0 O' @$ w! N9 ?完整版请查看:附件0 V8 _/ L7 E+ q2 j6 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 手机版