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

HRTIM 指南

[复制链接]
STMCU小助手 发布时间:2022-7-14 18:00
前言
0 v. W' z/ e, l" G/ O- @; e在 STM32 微控制器中, STM32F334xx 产品的目标市场是需要高度精确计时数字信号、尤其是数字功率转换应用的细分市场。包括:
3 ~; k: ]* V; j. E$ ]• 数字电源;
' A) i1 c& a; m• 照明;
( T( j5 g3 E2 I1 Y# M6 x0 e  g1 S• 不间断电源;1 }8 A5 j& R' o  [0 r" R
• 太阳能逆变器;: u: Z9 u8 B, M& V
• 无线充电器。
- p% n& J( I& n7 p! e( FSTM32F334xx 微控制器具有高分辨率定时器 (HRTIM)外设,可产生多达 10 个信号,能够处理用于控制、同步或保护的各种不同输入信号。其模块化架构允许对大部分转换拓扑和多并联转换器进行处理,并可在运行中重新配置它们。) \) B. X# e1 t0 k
通过 STM32F334 参考手册初步了解时,此外设可能看起来比较复杂,这主要是由于它有大量的控制寄存器组。为了补充这份详尽的说明,我们另外提供了一个文档,其中包括快速上手说明以及示例汇总。' h$ E" ?- |9 z; r% D/ U
在其第一章中,本指南旨在表明 HRTIM 编程很简单。首先说明环境 (就像是有菜谱的同时也需要有厨房)设置,接着给出了若干简单示例,通过实践帮助理解。这些基本案例用来逐步介绍定时器功能,并提供编程指导。不熟悉 HRTIM 的读者应该仔细阅读本章。4 v! b. D6 T4 _. ]- j$ i
第二部分是转换器集合,可在开始新设计时使用,从中选取现成的代码示例,或者从中得到灵感和编程技巧来处理本文档中未描述的拓扑。但是需要注意,本指南不包括转换器设计本' N/ T  W9 H% |9 i( d+ N/ W
身 (控制技术和元件设计),这些内容在专门的应用笔记中有描述。5 o6 O8 K# b, Z2 L# p8 @
如有必要,每个示例都提供了简要的转换器说明 (拓扑和到 MCU 的连接)、控制波形和代码段。
. [, `; d8 d# b* Y$ l
3 l; M9 }6 U$ I
1 完成环境的准备) c" t7 P; G  t' p3 a5 h2 {
本章中,我们会确保在开始前所有必需的要素均准备就绪,因此可以仅关注 HRTIM 编程。
) T# T2 I; h8 c9 ]下列文件作为参考:: h6 ~1 Q) l/ U, Y
STM32F334x4/x6/x8 数据手册
  i* ]$ V% x4 [STM32F334x4/x6/x8 勘误表4 I9 q8 u, c' P# s
RM0364 参考手册 STM32F334xx 高级 ARM® 为基础的的 32 MCU
' a* b4 V- q- {9 [- W: OUM1733STM32F334 探索套件入门
+ s0 M$ F) o" eUM1735STM32F3 系列的探索套件 - 采用 STM32F334C8 MCU
  K$ d/ k3 G# u0 ^7 [UM1736STM32F334 探索软件开发工具入门
0 K4 C( P0 f6 [, OAN4885:使用 STM32F3348 Discovery 进行高亮度 LED 调光
4 K4 D( w6 b7 l预先阅读 RM0364 中的 HRTIM 章节会有帮助。
4 L5 e, s0 [! A) _2 K8 z
1.1 必备条件3 f( |7 H* x  O* D8 E
在享受 HRTIM 的优势之前,我们列出其前提条件。希望读者具有基本的 C 编程技巧,关于MCU 和开发环境的少量经验,以及关于开关模式电源的理论背景。控制策略和元件尺寸标注细节不在本应用笔记范围内,它们可在大量文献中获取。/ l* a& M5 I4 K2 S6 j; n
为简单起见,本指南仅考虑逻辑信号或直接由 MCU 处理的模拟电压,这样就是与电平无关的。不过有些参考文献涉及外部元件接口和电源切换影响 (当定时器或 MCU 具有处理它们的功能时)。/ n. R: C- _7 t
最后,需要提醒的是,如果 STM32F334 HRTIM 用于具有危险电压的应用中,则应由熟练的技术人员来操作功率应用,以避免电击、烧伤甚或死亡的风险。
0 n' b) V  H* p/ B- f+ h: \" L  l/ ~* U- U' y0 h6 x
1.2 硬件设置
4 g9 r- r. y, H5 v0 {0 u( E( \STM32F334 探索板是价格非常实惠的工具,是开始 (以及继续)用 HRTIM 做实验的最佳选择 (订购码:STM32F3348-DISCO)。它包含了编程接口,芯片编程和调试所需的附加材料只是 USB 连接线。所有 I/O 均可在 2.54 mm 间隔的引脚上使用,因此也可连接到穿孔 / 条状板 / 试验电路板。套件还有两个功率转换器:一个用于 LED 驱动的反向降压转换器和一个低电压降压 / 升压转换器,均具有独立的输入和输出。
+ q) ^$ S# L( H, M' i( U示波器是必备的,最后它与逻辑分析仪一起,用于配置对超过 4 个通道的监测。为了显示出细微的高分辨率步长,示波器的采样率必须至少超过 1GS/s,具有交错采样选项,可将时间精度提高超过 217ps 定时器分辨率。) _4 s% _( k  P6 g4 @7 M& r
在早期调试阶段,一个或几个函数发生器可帮助仿真来自功率转换器的反馈 (逻辑脉冲或模拟信号)。该发生器必须有触发输入,用于一些特殊用途。如果缺少,也可利用空闲的定时单元,由 HRTIM 本身来仿真反馈信号,这需要多编写一些代码 (或重复利用软件示例)。2 Q* ?+ L# c* }, h5 m  S

3 e: O1 U( E/ g% O$ P) d! b, f2 c0 k
1.3 工具设置, g" s/ ~; J0 ?* U/ A
必须安装一个编译器 (所有示例均适用 32K)以及支持 ST-LINK-V2 调试接口的 IDE+ k# E. r/ d* Q: R* ~
下面给出的代码片段与编译器无关:4 v8 C- v* v% _4 V/ C; K5 T: u1 Q0 E
它们将被简单地复制到面向各种工具链的通用 HRTIM工程模板中。4 H; p  x# w8 g; V0 i2 j
对于下面的工具链,软件源随工作空间给出:
% y( f: i# Y# \& V5 ]/ B5 F6 l" F; ^IAR (EWARM 7.10.3)
: W, j! R! M) MKEIL® (MDK-ARM 4.7)
4 y" h" f7 h+ f* M# \: W8 ?. M/ n) ~3 ^" {1 Y) ]- K) e, Y
1.4 STM32F334 HRTIM 设置
# \8 \" T4 d+ f4 s% h1.4.1 系统时钟初始化0 t8 g0 l- C" r
为了实现高分辨率, HRTIM 需要由 PLL 高频输出直接馈送。有两种选择可供使用:8 m+ d! l: C& \6 N* }0 S" [- x
基于晶体的高速外部(HSE)振荡器,由 PLL 倍频后可提供 144MHz 的频率。这种情况下,此高分辨率为 217ps 144MHz 时钟周期的 1/32);
! C) I7 ^% l/ x4 r; U7 O/ q高速内部(HSI)振荡器,能够提供 128MHz 的频率(8MHz PLL 倍频 16 倍)。这种情况下,高分辨率步长为 244ps 128MHz 时钟周期的 1/32)。该选项适用于有限的温度范围,相关情况参见 STM32F334 数据手册。
2 Q, i: h0 C( H' E  VHAL 库初始化 (HAL_Init)后,立即在主程序中使用 SystemClock_Config() 函数,完成时钟初始化。, F) z; B) a! o# X) V' d
CPU 时钟也来源于 PLL (除以 2 之后),因此它可达到 PLL 输出频率的一半 (使用 HSE  J# y( X5 f3 K7 y. X
时为 72MH,使用 HSI 时为 64MHz)。它还可被降低,以减少 MCU 功耗,同时保持高分辨
! S5 X) ?; f9 n率功能。. U" j; F1 }. [- b
可最后在主程序中执行 SystemCoreClockUpdate 函数来验证 CPU 工作频率:该频率在
5 m9 W+ b* s8 x: }- l; _! oSystemCoreClock 变量中更新。9 w4 w7 e( T! d) v  t: ]5 C
1.4.2 HRTIM 初始化, s6 q8 h3 d# L
本章逐步地详细介绍如何初始化 HRTIM,包括各个函数调用。实际上,这在HAL_HRTIM_Init HAL_HRTIM_MspInit 程序中完成。  Q. I- U/ p- b$ V

; G; y+ H( a( @) c' B' t& O
HRTIM 时钟初始化. s- H$ s% D8 Y, Q4 q
MCU 上电并开始运行, HRTIM 在编程之前就必须进行时钟控制。这利用复位和时钟控制RCC)来实现,包括 2 个步骤:0 u' r8 B( D) N# v- g
1.
( q' `6 m5 _0 A: l% LRCC_CFGR3 寄存器中的 HRTIM 选择高速 PLL 输出:! o' F' s& f5 B
__HAL_RCC_HRTIM1_CONFIG(RCC_HRTIM1CLK_PLLCLK);
; O/ X0 H+ M! {/ [2. 为在 APB2 总线上映射的寄存器进行时钟使能。
9 L2 |% `5 ~( v  g, n# f__HRTIM1_CLK_ENABLE();4 c5 J% |+ H6 q2 J3 K. Y

' E+ l8 |0 H( P4 f
1.4.3 HRTIM DLL 初始化
" b$ n% n. `/ |  e& ~HRTIM 的延迟锁相环 (DLL)可提供细粒度计时,将高频率 (144 128MHz)时钟周期分为 32 个均匀分布的间隔。
5 @$ ?/ v6 ^4 M* k在使用高分辨率前,此 DLL 必须至少校准一次。如果电压或温度条件发生改变,在 HRTIM操作过程中可透明地重新进行该校准。也可由硬件使能周期校准。
0 f& `0 F: M9 N下面的代码段显示如何完成校准。当 DLLRDY 标志被置位后,高分辨率可用。
$ Y, K: @. B9 ?/* DLL 校准:使能了周期校准,周期设置为 14µs */HRTIM1->sCommonRegs.DLLCR = HRTIM_CALIBRATIONRATE_14| HRTIM_DLLCR_CALEN;/* 检查 DLL 校准完成的标志位 */
3 T% }6 ~7 Z5 v' c  E4 _ while(HRTIM1->sCommonRegs.ISR & HRTIM_IT_DLLRDY == RESET);
8 k- H( O4 A/ N6 _6 ~6 S建议使能周期校准,默认情况下采用最小校准周期 (设为 14µs)。
8 Q0 C! ^0 F" E. j注: 如果 DLL 未锁定 (通常是由于 HSE 振荡器未正常配置),下面的代码将引起执行延迟。
; N1 R" T2 K0 IHAL 库包含一个函数来实现校准,它具有超时验证,如有必要可重定向至差错处理程序。基HAL 的软件示例中使用了此函数。0 X0 r3 t2 P; X) ~- Q9 ]
1.4.4 HRTIM I/O 初始化
  N5 t& y  H1 ^HRTIM 输入和输出映射到标准 I/O 端口,必须像其他 I/O 外设一样进行编程。 HRTIM 端口通道影射为:% {/ F2 b% S, a2 m4 ^" {1 [. c6 [& Q
AF13 通道 (面向 HRTIM I/O 端口,位于端口 A B);
  [; e+ o- U! \( ?AF3 通道 (面向 HRTIM I/O 端口,位于端口 C);
* v5 E3 C4 }  THRTIM I/O 初始化必须在两个阶段中完成。在 HRTIM 寄存器之前,首先在HAL_HRTIM_MspInit 函数中初始化 HRTIM 输入。- j0 _1 r* e# Q9 p  u
HRTIM 输出必须在 HRTIM 控制寄存器编程 (示例中它在 GPIO_HRTIM_outputs_Config 数中完成)后且当计数器使能时进行初始化。这是为了保证来自 GPIO 电路的控制信号传输HRTIM 定时器之前,在 HRTIM 中能够正确定义输出状态。; H1 S5 G8 k: o9 j" s
: y7 P# [6 b/ [2 N" l
1.4.5 其他外设初始化
6 ?' {( W4 b' x4 u; h/ \HRTIM 与多种 MCU 外设交互作用,如下所列。进行 IHRTIM 操作时不强制要求对它们全部
, K, b; a2 y/ k7 n3 w5 X进行初始化。下列外设的初始化代码在后面所述的一些示例中提供。- ]7 f1 H+ n* z
: p" K& O+ U% [; f8 U) j. a
嵌套向量中断控制器 (Nested Vectored Interrupt ControllerNVIC
- O7 \+ m+ s1 u% K: Y- K: ?+ j" C8 OHRTIM 中断请求分组为 7 种中断向量。所有错误均分组到一个特殊向量中,可设置为非常高的优先级。1 r* `0 _5 L9 E0 G1 X! `# F
HRTIM 相关的 NVIC 部分在 HAL_HRTIM_MspInit 函数中进行编程。; f% w2 ?6 d6 }# K* Y! h5 K$ N+ y" ]

) _) x; @8 u; |  F+ iDMA 控制器
' l6 V9 l+ u* a7 l1 g8 r大部分中断请求可用作 DMA 请求,分组到 6 DMA 通道 (每个定时单元一个,包括主定时器)# \" Y8 A; ?/ j3 D5 D% k
当启动定时器时,基于 DMA HRTIM 操作使能,利用专门的开始 / 停止函数如HAL_HRTIM_WaveformCounterStart_DMA, o: k- q: |' g" h6 V) ~

# G% m3 q* q+ j比较器& X1 V! G! \, E+ X" ~; L
3 个内置比较器可用来调节模拟信号:它们必须在输出到达 HRTIM 前进行初始化。8 t  U% j& J, k4 t- I' q" U) h* w$ M. o
初始化包括模拟输入编程、时钟使能和极性。- ]+ z9 A( s5 n( E; J" C/ h; v( O
" |) h: _4 P. b
运算放大器/ U! ~1 _7 m# J4 H, O
内置运算放大器能够放大进入 ADC 或比较器的低电压信号,也可直接充当比较器 (相比普通比较器,它速率较低)。它必须与比较器一样进行初始化。" E  k. C* @9 w* v- t; ]1 k

+ F8 _# C/ N: \0 ]4 c) _
ADC 转换器4 @: a' Q) L* h( c
HRTIM 能够触发两个 ADC 转换器中的任意一个。应初始化它们以接收外部触发器信号 (在其常规和 / 或注入转换序列上)。
5 h+ ~* _  Z5 V+ D5 @" ~ADC 的另一个可能用途在于使用模拟看门狗在 HRTIM 上触发外部事件 (用于输出置位 / 位或计数器复位)。& e* _; D, ^/ i0 e
8 ?* _2 K& L" R- }" ?  d. I0 {2 q( f
DAC 转换器
" i& B! B$ J( j  Y8 @; xDAC 转换器通常用于定义比较器阈值。它们可利用 HRTIM DAC 触发器,与 HRTIM 操作同步更新。, D# u( z9 E, c

2 l6 h" T8 C" M/ w3 y* k: m
通用定时器- K. Y, G& f: @5 S
HRTIM 也可连接到其他片上定时器,有以下用途:
8 q9 }6 x8 S% E" `" f& s5 G作为外部事件;$ I& w" z0 H. {. G/ i1 d' k* ?
作为突发模式触发器或时钟;
8 o/ |; }+ `' {1 |用于 HRTIM 寄存器更新触发。
7 N7 E8 f, h/ y9 o8 X. V$ {8 k3 c
7 d6 P' q  ]" |" e+ w) {) D; p) U1 h
1.4.6 HRTIM 功能检查
/ a+ W  V9 V, s/ ~5 ]1 G9 v当所有初始化完成,可验证 HRTIM 能够利用下面的简单代码来运行。此示例代码HRTIM_BasicPWM 示例)使能了 HRTIM TD1 输出并通过软件对其进行切换。
. r+ |$ {1 S" E  n3 W/* 使用 PLLx2 时钟来实现 HRTIM */
* Y8 ~5 w5 T( e& v3 X) e__HAL_RCC_HRTIM1_CONFIG(RCC_HRTIM1CLK_PLLCLK);DocID026506 Rev 1 [English Rev 1] 9/33
* Z" h1 S" A4 a7 i* b1 C" ^, A2 j/* 使能 HRTIM 时钟 */
) Z6 F% {1 S4 v5 f1 P- g, g1 U__HRTIM1_CLK_ENABLE();
$ i! a9 W5 X- T5 F) z) c/* DLL 校准:使能了周期校准,周期设置为 14µs */6 v$ y3 V% h# ^( o
HRTIM1->sCommonRegs.DLLCR = HRTIM_CALIBRATIONRATE_14| HRTIM_DLLCR_CALEN;+ `: n) t1 v, V; _
/* 检查 DLL 校准完成的标志位 */
: z! l7 x* f3 I6 ?8 Cwhile(HRTIM1->sCommonRegs.ISR & HRTIM_IT_DLLRDY == RESET);
+ }: ?7 J( r% V3 F$ m$ k7 DHRTIM1->sCommonRegs.OENR = HRTIM_OENR_TD1OEN; /* 使能 TD1 输出 */
2 K- [  u7 e6 E* [GPIO_HRTIM_outputs_Config(); /* 初始化 HRTIM 输出 */
) f- z: ^" _1 \while(1)
6 Y. R, r) j1 I# K0 `1 Y {
# S* v$ [  C  J+ J( `% G, W' L# _ /* 通过软件来置位和复位 TD1 */- j2 e4 X- D3 g" V* ?
HRTIM1->sTimerxRegs[HRTIM_TIMERINDEX_TIMER_D].SETx1R = HRTIM_SET1R_SST;
4 [5 X; n' `& |  W2 ] HRTIM1->sTimerxRegs[HRTIM_TIMERINDEX_TIMER_D].RSTx1R = HRTIM_RST1R_SRT;! H1 E$ g7 x. m' g1 q5 s6 s6 U
}
8 U! @$ F" U5 J+ w$ K3 j* ^  ?
. V$ r. X1 r+ _# M
此处复制的代码片段可从 HRTIM_Snippets HRTIM_BasicPWM 示例中获取。两种情况下都须通过 #define HRTIM_CHECK 语句来选择示例。6 G6 g& ^: c+ E/ K0 P( t1 F
对于本文档其余部分,时钟和 DLL 初始化部分将不再重复,而代之以对HRTIM_Minimal_Config() 函数的调用。# P) s/ `' X0 d! I9 ~# t
# y, ~0 ^- }1 c4 B
完整版请查看:附件# ^! S  m6 _! \  Q

DM00121475_ZHV1.pdf

下载

820.72 KB, 下载次数: 145

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

举报

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

下载看看

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版