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

HRTIM 指南

[复制链接]
STMCU小助手 发布时间:2022-7-14 18:00
前言% e3 R2 \( a! f0 J2 z
在 STM32 微控制器中, STM32F334xx 产品的目标市场是需要高度精确计时数字信号、尤其是数字功率转换应用的细分市场。包括:
  }; y* a) [3 t& V9 z' a9 t0 I• 数字电源;  {& N: Q/ _6 y
• 照明;
0 R& i  A  K! f# f1 }' D, m• 不间断电源;
3 @2 o( f/ {5 {; ^9 \• 太阳能逆变器;: g8 T# v: P. C: h+ b
• 无线充电器。+ C+ H9 _# v  n. @' V0 c+ I
STM32F334xx 微控制器具有高分辨率定时器 (HRTIM)外设,可产生多达 10 个信号,能够处理用于控制、同步或保护的各种不同输入信号。其模块化架构允许对大部分转换拓扑和多并联转换器进行处理,并可在运行中重新配置它们。$ U/ v, }3 F6 S8 u* X! C
通过 STM32F334 参考手册初步了解时,此外设可能看起来比较复杂,这主要是由于它有大量的控制寄存器组。为了补充这份详尽的说明,我们另外提供了一个文档,其中包括快速上手说明以及示例汇总。
3 D3 P- }3 O4 D6 S在其第一章中,本指南旨在表明 HRTIM 编程很简单。首先说明环境 (就像是有菜谱的同时也需要有厨房)设置,接着给出了若干简单示例,通过实践帮助理解。这些基本案例用来逐步介绍定时器功能,并提供编程指导。不熟悉 HRTIM 的读者应该仔细阅读本章。- @4 [$ @9 @" l- X3 M6 b- w
第二部分是转换器集合,可在开始新设计时使用,从中选取现成的代码示例,或者从中得到灵感和编程技巧来处理本文档中未描述的拓扑。但是需要注意,本指南不包括转换器设计本# |- ^7 L9 |; F% f7 a
身 (控制技术和元件设计),这些内容在专门的应用笔记中有描述。5 V8 p2 r6 S0 M
如有必要,每个示例都提供了简要的转换器说明 (拓扑和到 MCU 的连接)、控制波形和代码段。
; L1 r1 d5 i: ~( k8 G# q/ B0 M% Y0 y; a9 s/ n2 c1 J5 q6 \
1 完成环境的准备
5 a7 a3 t; D0 r) l8 x2 q本章中,我们会确保在开始前所有必需的要素均准备就绪,因此可以仅关注 HRTIM 编程。! N( }; L% S3 a3 T7 ]
下列文件作为参考:
, X9 E, R* V1 [, ?STM32F334x4/x6/x8 数据手册! c: x( G0 f; v$ g- E( M4 C, _
STM32F334x4/x6/x8 勘误表/ z6 F0 ?* u  n7 }
RM0364 参考手册 STM32F334xx 高级 ARM® 为基础的的 32 MCU! \3 e- Z: ~0 |& U* `8 o
UM1733STM32F334 探索套件入门/ t* j; g* Q$ V4 E
UM1735STM32F3 系列的探索套件 - 采用 STM32F334C8 MCU
5 p7 M4 K  ^0 k0 x$ j; A# ^UM1736STM32F334 探索软件开发工具入门: x/ j0 U" T) b
AN4885:使用 STM32F3348 Discovery 进行高亮度 LED 调光0 ?6 \2 z. Z1 `  Y* S* F9 y
预先阅读 RM0364 中的 HRTIM 章节会有帮助。
; B/ Y1 Q% n5 ]# @+ V% d
1.1 必备条件
/ J& Y. g6 C: \, R* D0 [9 }在享受 HRTIM 的优势之前,我们列出其前提条件。希望读者具有基本的 C 编程技巧,关于MCU 和开发环境的少量经验,以及关于开关模式电源的理论背景。控制策略和元件尺寸标注细节不在本应用笔记范围内,它们可在大量文献中获取。
3 u& N; W$ V. t( s& P0 H; a1 }7 ^为简单起见,本指南仅考虑逻辑信号或直接由 MCU 处理的模拟电压,这样就是与电平无关的。不过有些参考文献涉及外部元件接口和电源切换影响 (当定时器或 MCU 具有处理它们的功能时)。
, L) k6 F3 y: ~, i最后,需要提醒的是,如果 STM32F334 HRTIM 用于具有危险电压的应用中,则应由熟练的技术人员来操作功率应用,以避免电击、烧伤甚或死亡的风险。7 y* e' V# q! A1 r$ ]
" u+ q: H0 A7 ]8 s8 Z
1.2 硬件设置
1 \2 |$ ]% N4 r. |' M7 `2 X( W2 kSTM32F334 探索板是价格非常实惠的工具,是开始 (以及继续)用 HRTIM 做实验的最佳选择 (订购码:STM32F3348-DISCO)。它包含了编程接口,芯片编程和调试所需的附加材料只是 USB 连接线。所有 I/O 均可在 2.54 mm 间隔的引脚上使用,因此也可连接到穿孔 / 条状板 / 试验电路板。套件还有两个功率转换器:一个用于 LED 驱动的反向降压转换器和一个低电压降压 / 升压转换器,均具有独立的输入和输出。
# Q  c7 u7 i/ `/ X  ^示波器是必备的,最后它与逻辑分析仪一起,用于配置对超过 4 个通道的监测。为了显示出细微的高分辨率步长,示波器的采样率必须至少超过 1GS/s,具有交错采样选项,可将时间精度提高超过 217ps 定时器分辨率。5 t8 w' i/ n0 F; w  q
在早期调试阶段,一个或几个函数发生器可帮助仿真来自功率转换器的反馈 (逻辑脉冲或模拟信号)。该发生器必须有触发输入,用于一些特殊用途。如果缺少,也可利用空闲的定时单元,由 HRTIM 本身来仿真反馈信号,这需要多编写一些代码 (或重复利用软件示例)。
- v/ H: M; E! G' E3 Y
/ Q0 [4 t9 ~/ r" F. ?7 y0 _
1.3 工具设置( l$ x5 [. u9 a$ K$ Z* b% n
必须安装一个编译器 (所有示例均适用 32K)以及支持 ST-LINK-V2 调试接口的 IDE
) [( w7 A3 `, P下面给出的代码片段与编译器无关:
) j8 Q  s- w' q% h. k6 Q# H它们将被简单地复制到面向各种工具链的通用 HRTIM工程模板中。. \, Y) i$ A8 {* u
对于下面的工具链,软件源随工作空间给出:
! |. e& `6 c: g+ Q. gIAR (EWARM 7.10.3)
# y/ ^0 M0 ?# Q. ^1 K% B" _  UKEIL® (MDK-ARM 4.7)
- i9 N  e- U7 J! @) {4 t+ g' c" K
. q, L& K* h. z* C5 t: Y, q7 `
1.4 STM32F334 HRTIM 设置
. ]) A5 |# S. J% V% G1.4.1 系统时钟初始化: I9 f1 r* f% K# M# a7 o& v. U0 {
为了实现高分辨率, HRTIM 需要由 PLL 高频输出直接馈送。有两种选择可供使用:! O5 @! F9 F$ p7 Q, b: b
基于晶体的高速外部(HSE)振荡器,由 PLL 倍频后可提供 144MHz 的频率。这种情况下,此高分辨率为 217ps 144MHz 时钟周期的 1/32);' {7 {( i8 ~9 G7 D2 `1 U
高速内部(HSI)振荡器,能够提供 128MHz 的频率(8MHz PLL 倍频 16 倍)。这种情况下,高分辨率步长为 244ps 128MHz 时钟周期的 1/32)。该选项适用于有限的温度范围,相关情况参见 STM32F334 数据手册。3 S7 D" l( q0 N1 S
HAL 库初始化 (HAL_Init)后,立即在主程序中使用 SystemClock_Config() 函数,完成时钟初始化。# {; N. N7 f/ Z$ j+ _+ \! u( a% Q
CPU 时钟也来源于 PLL (除以 2 之后),因此它可达到 PLL 输出频率的一半 (使用 HSE
6 p& L! _$ X: L4 b8 L0 x时为 72MH,使用 HSI 时为 64MHz)。它还可被降低,以减少 MCU 功耗,同时保持高分辨
1 r' ?7 U- y7 Z' m率功能。
" O0 b9 H7 Y$ ?9 t. B可最后在主程序中执行 SystemCoreClockUpdate 函数来验证 CPU 工作频率:该频率在/ E# D$ R! r. B6 b
SystemCoreClock 变量中更新。
8 q+ S8 t2 p, ~5 W7 Z+ t1.4.2 HRTIM 初始化2 i. ^2 h3 n6 J( U8 d* r* M
本章逐步地详细介绍如何初始化 HRTIM,包括各个函数调用。实际上,这在HAL_HRTIM_Init HAL_HRTIM_MspInit 程序中完成。4 D+ Q4 V  _- x6 `3 ~" w
1 Z6 Z1 {8 z/ t
HRTIM 时钟初始化9 c' P9 w8 Y# E6 c
MCU 上电并开始运行, HRTIM 在编程之前就必须进行时钟控制。这利用复位和时钟控制RCC)来实现,包括 2 个步骤:. J, P9 B5 |( {! E$ ?9 j* _
1. $ p. }7 D: w. Z- a$ {! I) }1 V
RCC_CFGR3 寄存器中的 HRTIM 选择高速 PLL 输出:+ b; l0 A; ?) c3 `& Z. ^/ t
__HAL_RCC_HRTIM1_CONFIG(RCC_HRTIM1CLK_PLLCLK);
$ v( |) F% ]+ w: k2 _# e3 }2. 为在 APB2 总线上映射的寄存器进行时钟使能。% N1 Z9 t; h. i0 Y8 l
__HRTIM1_CLK_ENABLE();
/ d" k. J/ b6 h  A7 A8 z
  a  V7 i. w0 T6 S, ~
1.4.3 HRTIM DLL 初始化
' ^1 ^! @' V4 }, ^HRTIM 的延迟锁相环 (DLL)可提供细粒度计时,将高频率 (144 128MHz)时钟周期分为 32 个均匀分布的间隔。' |4 e# Z3 a0 L, Z0 h/ o
在使用高分辨率前,此 DLL 必须至少校准一次。如果电压或温度条件发生改变,在 HRTIM操作过程中可透明地重新进行该校准。也可由硬件使能周期校准。
, ^$ ^6 i5 S# _, W! N  _下面的代码段显示如何完成校准。当 DLLRDY 标志被置位后,高分辨率可用。2 e0 i8 J2 d1 F( _! M/ t- U
/* DLL 校准:使能了周期校准,周期设置为 14µs */HRTIM1->sCommonRegs.DLLCR = HRTIM_CALIBRATIONRATE_14| HRTIM_DLLCR_CALEN;/* 检查 DLL 校准完成的标志位 */1 X; {4 k1 s% A3 G
while(HRTIM1->sCommonRegs.ISR & HRTIM_IT_DLLRDY == RESET);7 M/ K7 _: B' Z5 N* n9 l) r; b
建议使能周期校准,默认情况下采用最小校准周期 (设为 14µs)。, f: f5 i4 g- ]7 y8 Y1 t9 {
注: 如果 DLL 未锁定 (通常是由于 HSE 振荡器未正常配置),下面的代码将引起执行延迟。& m' K9 v2 _& `: s
HAL 库包含一个函数来实现校准,它具有超时验证,如有必要可重定向至差错处理程序。基HAL 的软件示例中使用了此函数。
- |+ y$ O" r+ h- L' w- Z3 v1.4.4 HRTIM I/O 初始化
- m2 t- z* G, I  p4 dHRTIM 输入和输出映射到标准 I/O 端口,必须像其他 I/O 外设一样进行编程。 HRTIM 端口通道影射为:- H3 u  n2 B" A: p
AF13 通道 (面向 HRTIM I/O 端口,位于端口 A B);
9 Y9 r% X' b4 J+ p8 R$ YAF3 通道 (面向 HRTIM I/O 端口,位于端口 C);) I6 A- B( Z( w8 p* X( ?
HRTIM I/O 初始化必须在两个阶段中完成。在 HRTIM 寄存器之前,首先在HAL_HRTIM_MspInit 函数中初始化 HRTIM 输入。8 I$ z5 L% h) ~6 f9 Q
HRTIM 输出必须在 HRTIM 控制寄存器编程 (示例中它在 GPIO_HRTIM_outputs_Config 数中完成)后且当计数器使能时进行初始化。这是为了保证来自 GPIO 电路的控制信号传输HRTIM 定时器之前,在 HRTIM 中能够正确定义输出状态。
/ i* V4 f0 ^+ e( t
8 G% o$ g  U) X9 p# P- @! F! p- ^0 c
1.4.5 其他外设初始化& M8 S5 Z1 J. v" ~
HRTIM 与多种 MCU 外设交互作用,如下所列。进行 IHRTIM 操作时不强制要求对它们全部, u3 J% q+ C3 k* d  l
进行初始化。下列外设的初始化代码在后面所述的一些示例中提供。
8 i! V+ X( @$ {/ ?+ k, u: t0 K) Q: z# Y; [6 j
嵌套向量中断控制器 (Nested Vectored Interrupt ControllerNVIC1 A. x0 H$ L; U) ]
HRTIM 中断请求分组为 7 种中断向量。所有错误均分组到一个特殊向量中,可设置为非常高的优先级。
$ Q5 ]( w/ `, M! _" gHRTIM 相关的 NVIC 部分在 HAL_HRTIM_MspInit 函数中进行编程。0 ~; z; H& b% a4 t
# n) w! ?  @9 Z" C
DMA 控制器
- y. A- r  G/ v% F大部分中断请求可用作 DMA 请求,分组到 6 DMA 通道 (每个定时单元一个,包括主定时器)
2 q8 `% D/ V' F5 D' o' ]当启动定时器时,基于 DMA HRTIM 操作使能,利用专门的开始 / 停止函数如HAL_HRTIM_WaveformCounterStart_DMA/ x; y4 G. [" F& X
3 I7 V3 w1 ^1 L" a( [
比较器3 @1 @7 E. h8 l
3 个内置比较器可用来调节模拟信号:它们必须在输出到达 HRTIM 前进行初始化。' x- C: |  Z5 z7 A" t. Q
初始化包括模拟输入编程、时钟使能和极性。
" u1 m  Q" m+ a7 M9 t
/ z" D8 @% q2 Z, _6 [5 ?
运算放大器' ^3 \' [4 c: ^: c
内置运算放大器能够放大进入 ADC 或比较器的低电压信号,也可直接充当比较器 (相比普通比较器,它速率较低)。它必须与比较器一样进行初始化。4 z2 v. q4 J# V8 o( `: A7 R5 Z

8 s7 g& ]- x# ~, T
ADC 转换器, n2 ~- e9 p4 ^; @) o
HRTIM 能够触发两个 ADC 转换器中的任意一个。应初始化它们以接收外部触发器信号 (在其常规和 / 或注入转换序列上)。
6 ]6 A. L8 Z$ e1 G% o7 ~/ OADC 的另一个可能用途在于使用模拟看门狗在 HRTIM 上触发外部事件 (用于输出置位 / 位或计数器复位)。5 A0 _+ B" N6 A$ C$ A3 W
6 C% l$ J+ w* `# ~% O# Y. B7 W
DAC 转换器3 B5 i' E- e# R, [* V
DAC 转换器通常用于定义比较器阈值。它们可利用 HRTIM DAC 触发器,与 HRTIM 操作同步更新。
: X; H, D0 O: ]6 D) v0 \
( @! ?  n$ N* S% d: z
通用定时器) H. ]5 d$ y* d2 q( m9 _/ i: P
HRTIM 也可连接到其他片上定时器,有以下用途:
1 H: w% h2 v: M! }* e/ ]作为外部事件;/ v6 a& s9 G0 v) {6 i
作为突发模式触发器或时钟;
- I5 \$ P1 D8 |  d& y' U* o8 C用于 HRTIM 寄存器更新触发。9 q6 z2 w9 J7 S; m+ \
( w- }2 X2 {/ P- F
1.4.6 HRTIM 功能检查, i; j. ?" N  ^8 d0 D' @
当所有初始化完成,可验证 HRTIM 能够利用下面的简单代码来运行。此示例代码HRTIM_BasicPWM 示例)使能了 HRTIM TD1 输出并通过软件对其进行切换。
& l# }+ ]9 `3 x- w! ?/ @/* 使用 PLLx2 时钟来实现 HRTIM */
9 a; K" i" i8 W# [" u- i- c__HAL_RCC_HRTIM1_CONFIG(RCC_HRTIM1CLK_PLLCLK);DocID026506 Rev 1 [English Rev 1] 9/33
  Y( G0 J' Q. Y. S# f/ _1 A7 l/* 使能 HRTIM 时钟 */
- _0 Q- R/ r$ r__HRTIM1_CLK_ENABLE();9 E1 V) D$ J' {2 G9 P% C# w5 |( W: Z1 c
/* DLL 校准:使能了周期校准,周期设置为 14µs */
- i- K; ?3 l3 p' FHRTIM1->sCommonRegs.DLLCR = HRTIM_CALIBRATIONRATE_14| HRTIM_DLLCR_CALEN;
3 Q! ~7 k) ]0 ]& z- C" \' F/* 检查 DLL 校准完成的标志位 */( b$ e3 P# m/ ]/ f
while(HRTIM1->sCommonRegs.ISR & HRTIM_IT_DLLRDY == RESET);
3 W+ ~$ f0 J7 C* p7 ^; {, qHRTIM1->sCommonRegs.OENR = HRTIM_OENR_TD1OEN; /* 使能 TD1 输出 */
& d! O+ C$ Q, Q: YGPIO_HRTIM_outputs_Config(); /* 初始化 HRTIM 输出 */
  M7 m4 u# M, hwhile(1)* t: e3 S4 G% x% c7 D! N/ U& V
{
" H6 L# J. A. ^) _( c4 ` /* 通过软件来置位和复位 TD1 */
" Q0 _9 m9 m. T. M" n7 E. t' g HRTIM1->sTimerxRegs[HRTIM_TIMERINDEX_TIMER_D].SETx1R = HRTIM_SET1R_SST;; |$ E- N9 c% v/ E
HRTIM1->sTimerxRegs[HRTIM_TIMERINDEX_TIMER_D].RSTx1R = HRTIM_RST1R_SRT;. U4 H2 }8 |7 L9 W: J, v8 U6 R
}9 Z8 f9 Q" b. ~6 k  V2 p7 F) s
, |- `% h& X" z; d# y& _+ l
此处复制的代码片段可从 HRTIM_Snippets HRTIM_BasicPWM 示例中获取。两种情况下都须通过 #define HRTIM_CHECK 语句来选择示例。
, G& e$ [/ g% x+ i: R对于本文档其余部分,时钟和 DLL 初始化部分将不再重复,而代之以对HRTIM_Minimal_Config() 函数的调用。
+ c( ^$ T4 c0 I; }+ E  l# r1 B; e0 r+ f  ~& J- Y9 R- ^4 I# w
完整版请查看:附件: v* a! Z& \& U7 E* h; _4 Y

DM00121475_ZHV1.pdf

下载

820.72 KB, 下载次数: 143

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