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

HRTIM 指南

[复制链接]
STMCU小助手 发布时间:2022-7-14 18:00
前言
5 d  W9 H) s) T在 STM32 微控制器中, STM32F334xx 产品的目标市场是需要高度精确计时数字信号、尤其是数字功率转换应用的细分市场。包括:. U# g7 j3 d2 }) w# `( O$ d
• 数字电源;/ b. s, \% F* ]+ i& z3 \5 P
• 照明;
& a  k* L6 ?$ i+ S9 v% K* [) D• 不间断电源;
  t! J  }2 J) _1 W5 `% x% L, R0 X• 太阳能逆变器;" h* b* _/ b  ~2 b
• 无线充电器。) z4 V# g/ C5 K/ T  ^1 R6 O! t
STM32F334xx 微控制器具有高分辨率定时器 (HRTIM)外设,可产生多达 10 个信号,能够处理用于控制、同步或保护的各种不同输入信号。其模块化架构允许对大部分转换拓扑和多并联转换器进行处理,并可在运行中重新配置它们。  Q8 w" Q9 D3 N$ H& i& Q
通过 STM32F334 参考手册初步了解时,此外设可能看起来比较复杂,这主要是由于它有大量的控制寄存器组。为了补充这份详尽的说明,我们另外提供了一个文档,其中包括快速上手说明以及示例汇总。
4 l6 b7 d# a/ \, b) I2 Q* _在其第一章中,本指南旨在表明 HRTIM 编程很简单。首先说明环境 (就像是有菜谱的同时也需要有厨房)设置,接着给出了若干简单示例,通过实践帮助理解。这些基本案例用来逐步介绍定时器功能,并提供编程指导。不熟悉 HRTIM 的读者应该仔细阅读本章。
9 G* u* d3 z8 v# D5 C" K第二部分是转换器集合,可在开始新设计时使用,从中选取现成的代码示例,或者从中得到灵感和编程技巧来处理本文档中未描述的拓扑。但是需要注意,本指南不包括转换器设计本' i! l4 O6 M+ ]' `
身 (控制技术和元件设计),这些内容在专门的应用笔记中有描述。4 K& ^4 X7 @- o' {+ g5 H
如有必要,每个示例都提供了简要的转换器说明 (拓扑和到 MCU 的连接)、控制波形和代码段。
5 O, d% h) s4 u. b; @0 v% k* D9 h& M! i9 I5 a2 S% s; f7 @$ k6 t# j
1 完成环境的准备
0 H; x- o0 u6 N; z本章中,我们会确保在开始前所有必需的要素均准备就绪,因此可以仅关注 HRTIM 编程。
0 o& {, Z5 r8 w  ~下列文件作为参考:$ e" D" @* O2 ?
STM32F334x4/x6/x8 数据手册  L7 l1 ]- n+ y# s( W4 x8 b
STM32F334x4/x6/x8 勘误表7 Z& I$ r7 x1 s0 g
RM0364 参考手册 STM32F334xx 高级 ARM® 为基础的的 32 MCU
% {0 n& f  r, {: J( C9 D& i' hUM1733STM32F334 探索套件入门
9 R1 c2 T* R% A" GUM1735STM32F3 系列的探索套件 - 采用 STM32F334C8 MCU0 X! _: F5 q% o  ~. C
UM1736STM32F334 探索软件开发工具入门
1 F1 e* W- q& A6 v; pAN4885:使用 STM32F3348 Discovery 进行高亮度 LED 调光5 S9 X1 Z5 J, ^1 ~
预先阅读 RM0364 中的 HRTIM 章节会有帮助。
( W" [& Y9 a+ H3 D8 I9 R& }2 N7 |! N
1.1 必备条件8 D" t* R0 a  f% z
在享受 HRTIM 的优势之前,我们列出其前提条件。希望读者具有基本的 C 编程技巧,关于MCU 和开发环境的少量经验,以及关于开关模式电源的理论背景。控制策略和元件尺寸标注细节不在本应用笔记范围内,它们可在大量文献中获取。/ [/ v+ K: g0 T- b
为简单起见,本指南仅考虑逻辑信号或直接由 MCU 处理的模拟电压,这样就是与电平无关的。不过有些参考文献涉及外部元件接口和电源切换影响 (当定时器或 MCU 具有处理它们的功能时)。
7 g1 K3 t. {' [& M+ `5 S最后,需要提醒的是,如果 STM32F334 HRTIM 用于具有危险电压的应用中,则应由熟练的技术人员来操作功率应用,以避免电击、烧伤甚或死亡的风险。
; O3 J$ g( p0 y. _  H% t$ A* \3 [" L9 R  h, |
1.2 硬件设置8 K  S$ i/ K3 x/ J
STM32F334 探索板是价格非常实惠的工具,是开始 (以及继续)用 HRTIM 做实验的最佳选择 (订购码:STM32F3348-DISCO)。它包含了编程接口,芯片编程和调试所需的附加材料只是 USB 连接线。所有 I/O 均可在 2.54 mm 间隔的引脚上使用,因此也可连接到穿孔 / 条状板 / 试验电路板。套件还有两个功率转换器:一个用于 LED 驱动的反向降压转换器和一个低电压降压 / 升压转换器,均具有独立的输入和输出。2 O$ h% }5 G" G
示波器是必备的,最后它与逻辑分析仪一起,用于配置对超过 4 个通道的监测。为了显示出细微的高分辨率步长,示波器的采样率必须至少超过 1GS/s,具有交错采样选项,可将时间精度提高超过 217ps 定时器分辨率。
5 Y+ |6 z' \, o+ z在早期调试阶段,一个或几个函数发生器可帮助仿真来自功率转换器的反馈 (逻辑脉冲或模拟信号)。该发生器必须有触发输入,用于一些特殊用途。如果缺少,也可利用空闲的定时单元,由 HRTIM 本身来仿真反馈信号,这需要多编写一些代码 (或重复利用软件示例)。
( b: g7 A; c. `5 n7 g1 ?1 @1 B' Y9 I* F9 z; ~
1.3 工具设置8 Z8 w: ]* H9 n1 H  x5 i! J
必须安装一个编译器 (所有示例均适用 32K)以及支持 ST-LINK-V2 调试接口的 IDE/ N! |) b" b/ g) e7 ]& p
下面给出的代码片段与编译器无关:3 [+ h4 w3 d( y# o6 N
它们将被简单地复制到面向各种工具链的通用 HRTIM工程模板中。
: `: [: ~2 ?2 `- j' e. d) F对于下面的工具链,软件源随工作空间给出:
1 |- A, G2 x% g/ n: M+ m, LIAR (EWARM 7.10.3) 9 z1 F6 L; p8 }
KEIL® (MDK-ARM 4.7)
0 Z$ f  H& Z2 y) S* p( O* ^4 ]8 j7 }' Z
1.4 STM32F334 HRTIM 设置# n4 i. P/ B- h, r
1.4.1 系统时钟初始化7 \2 Z& j+ G  D, s1 R
为了实现高分辨率, HRTIM 需要由 PLL 高频输出直接馈送。有两种选择可供使用:  m. t, g. q9 `5 m
基于晶体的高速外部(HSE)振荡器,由 PLL 倍频后可提供 144MHz 的频率。这种情况下,此高分辨率为 217ps 144MHz 时钟周期的 1/32);: p5 N% Y, I* V- M- `5 C
高速内部(HSI)振荡器,能够提供 128MHz 的频率(8MHz PLL 倍频 16 倍)。这种情况下,高分辨率步长为 244ps 128MHz 时钟周期的 1/32)。该选项适用于有限的温度范围,相关情况参见 STM32F334 数据手册。  o9 ^* \" A5 y$ t3 Y. C
HAL 库初始化 (HAL_Init)后,立即在主程序中使用 SystemClock_Config() 函数,完成时钟初始化。' V: c0 `% Y/ p8 s
CPU 时钟也来源于 PLL (除以 2 之后),因此它可达到 PLL 输出频率的一半 (使用 HSE6 ?6 k% S! n1 b& _- ]
时为 72MH,使用 HSI 时为 64MHz)。它还可被降低,以减少 MCU 功耗,同时保持高分辨% t3 y+ T% @. m& U, h
率功能。
7 v& p9 \7 f' Y' b' m' {" N可最后在主程序中执行 SystemCoreClockUpdate 函数来验证 CPU 工作频率:该频率在% m. `5 p! D1 A( ?
SystemCoreClock 变量中更新。
; j3 g& ^7 z( W9 |& f2 @1.4.2 HRTIM 初始化
: x% U4 [! D% E& F  b1 ]7 f本章逐步地详细介绍如何初始化 HRTIM,包括各个函数调用。实际上,这在HAL_HRTIM_Init HAL_HRTIM_MspInit 程序中完成。) t5 g/ h& L2 M6 r) i3 X2 S
) G5 |$ [! A2 @! Q" A& @
HRTIM 时钟初始化0 ]$ V  S, P$ F4 l7 {$ j
MCU 上电并开始运行, HRTIM 在编程之前就必须进行时钟控制。这利用复位和时钟控制RCC)来实现,包括 2 个步骤:
& J$ O9 I: ?' l& J1. & P9 z2 v+ L" N4 s
RCC_CFGR3 寄存器中的 HRTIM 选择高速 PLL 输出:
& z) b* }7 U) H" U/ {__HAL_RCC_HRTIM1_CONFIG(RCC_HRTIM1CLK_PLLCLK);
& ^0 b: s8 C  S1 h2. 为在 APB2 总线上映射的寄存器进行时钟使能。
' X7 a1 D/ @- ]6 I# ^__HRTIM1_CLK_ENABLE();
& r4 Z" M: a; q1 V2 c8 }2 v: m1 `
: C* W5 y, P1 [/ v3 n9 ^+ c
1.4.3 HRTIM DLL 初始化
! z0 A  c/ r7 B2 W- \HRTIM 的延迟锁相环 (DLL)可提供细粒度计时,将高频率 (144 128MHz)时钟周期分为 32 个均匀分布的间隔。
' k8 ?3 S7 Y- R8 }: D在使用高分辨率前,此 DLL 必须至少校准一次。如果电压或温度条件发生改变,在 HRTIM操作过程中可透明地重新进行该校准。也可由硬件使能周期校准。$ O2 B% i; D" z. w
下面的代码段显示如何完成校准。当 DLLRDY 标志被置位后,高分辨率可用。
* }% f) c2 {- z9 k& u2 q2 k% B/* DLL 校准:使能了周期校准,周期设置为 14µs */HRTIM1->sCommonRegs.DLLCR = HRTIM_CALIBRATIONRATE_14| HRTIM_DLLCR_CALEN;/* 检查 DLL 校准完成的标志位 */
- q) g* k  Q* ~7 t3 g' ~3 q9 t! n while(HRTIM1->sCommonRegs.ISR & HRTIM_IT_DLLRDY == RESET);
' L& X3 _, l/ h: g% [建议使能周期校准,默认情况下采用最小校准周期 (设为 14µs)。; z: h* I  u* J) h3 L' p+ E
注: 如果 DLL 未锁定 (通常是由于 HSE 振荡器未正常配置),下面的代码将引起执行延迟。" B' `0 U6 d# k' ]+ a# X
HAL 库包含一个函数来实现校准,它具有超时验证,如有必要可重定向至差错处理程序。基HAL 的软件示例中使用了此函数。
9 T6 r8 Y8 t9 ~" u6 M" \4 ~1.4.4 HRTIM I/O 初始化! C. F3 S: L: q4 a5 B! Z
HRTIM 输入和输出映射到标准 I/O 端口,必须像其他 I/O 外设一样进行编程。 HRTIM 端口通道影射为:
- e! @! n) v* NAF13 通道 (面向 HRTIM I/O 端口,位于端口 A B);: b( E' C5 k: o) T; h
AF3 通道 (面向 HRTIM I/O 端口,位于端口 C);
, j, P% ~7 ^9 y- j$ wHRTIM I/O 初始化必须在两个阶段中完成。在 HRTIM 寄存器之前,首先在HAL_HRTIM_MspInit 函数中初始化 HRTIM 输入。
8 j9 S# {8 g1 p1 v; p5 p. LHRTIM 输出必须在 HRTIM 控制寄存器编程 (示例中它在 GPIO_HRTIM_outputs_Config 数中完成)后且当计数器使能时进行初始化。这是为了保证来自 GPIO 电路的控制信号传输HRTIM 定时器之前,在 HRTIM 中能够正确定义输出状态。
& t; o1 Z& z: k8 y& ]4 s
3 f. E* v3 G2 \0 p6 c1 Q
1.4.5 其他外设初始化
/ N5 B7 f. c3 C% [( I6 T" a$ kHRTIM 与多种 MCU 外设交互作用,如下所列。进行 IHRTIM 操作时不强制要求对它们全部
5 p, _  H# v% U# j2 E4 ^" Q进行初始化。下列外设的初始化代码在后面所述的一些示例中提供。
9 A8 @& Q3 e! U5 V( c9 X) ?) f, C& R
嵌套向量中断控制器 (Nested Vectored Interrupt ControllerNVIC
/ Y( [" Q" e8 C3 e% ?4 Y5 gHRTIM 中断请求分组为 7 种中断向量。所有错误均分组到一个特殊向量中,可设置为非常高的优先级。
) d+ w9 t5 C# d% k% \HRTIM 相关的 NVIC 部分在 HAL_HRTIM_MspInit 函数中进行编程。; J$ f( R5 _' h" u
2 }* w) D* {+ \2 {
DMA 控制器- ^! Z! V* l0 Q, v( s$ y
大部分中断请求可用作 DMA 请求,分组到 6 DMA 通道 (每个定时单元一个,包括主定时器)
4 c/ n- n: M) E/ v% @当启动定时器时,基于 DMA HRTIM 操作使能,利用专门的开始 / 停止函数如HAL_HRTIM_WaveformCounterStart_DMA
! C% B5 @9 S5 b: b4 y- E6 \$ ?! n* q0 C5 t
比较器
: y' A! ]$ I1 d- k) t+ P& M2 _5 w, \1 F3 个内置比较器可用来调节模拟信号:它们必须在输出到达 HRTIM 前进行初始化。
2 i; ], _; r9 R8 K( w  b5 ]8 F初始化包括模拟输入编程、时钟使能和极性。
3 M7 \- `/ q1 }* x3 m! O
1 S0 n: |! O3 C/ j& j, G
运算放大器! ]( I# A; m1 D
内置运算放大器能够放大进入 ADC 或比较器的低电压信号,也可直接充当比较器 (相比普通比较器,它速率较低)。它必须与比较器一样进行初始化。
( M, ^% ?; Z7 }) e2 H. ?$ T. F0 o2 s9 o
ADC 转换器
) H" }6 s' d: U) IHRTIM 能够触发两个 ADC 转换器中的任意一个。应初始化它们以接收外部触发器信号 (在其常规和 / 或注入转换序列上)。
. C3 ~( d6 f$ _' j, a7 s8 zADC 的另一个可能用途在于使用模拟看门狗在 HRTIM 上触发外部事件 (用于输出置位 / 位或计数器复位)。* \8 W) {" O  O& b

( Z* i: ~- @% S2 d- y
DAC 转换器
) R% k1 w- I( P6 p- m! C* N+ R$ Z9 uDAC 转换器通常用于定义比较器阈值。它们可利用 HRTIM DAC 触发器,与 HRTIM 操作同步更新。
) g* z2 `0 Z/ x) N* o2 g4 G! r' v
; M9 o) a7 n1 j
通用定时器
5 ]2 b6 ?; I* {% V5 kHRTIM 也可连接到其他片上定时器,有以下用途:9 P! n( I+ p$ x( j1 i% w
作为外部事件;
! d. t0 p6 x& k3 H: q# J' |作为突发模式触发器或时钟;
3 D3 L. s( j  ~! K0 J/ F用于 HRTIM 寄存器更新触发。- x3 v" w' p# S9 u

& n& {3 J, a; A/ i8 W3 J
1.4.6 HRTIM 功能检查  u+ x: O& J0 B8 }& C) E
当所有初始化完成,可验证 HRTIM 能够利用下面的简单代码来运行。此示例代码HRTIM_BasicPWM 示例)使能了 HRTIM TD1 输出并通过软件对其进行切换。
' d4 `  ~  a4 `$ r: J$ |; G  u/* 使用 PLLx2 时钟来实现 HRTIM */
0 u# j% E$ ]& F- |; w. L__HAL_RCC_HRTIM1_CONFIG(RCC_HRTIM1CLK_PLLCLK);DocID026506 Rev 1 [English Rev 1] 9/336 O" d5 p. g( ^
/* 使能 HRTIM 时钟 */
1 E- H. |$ D# y* V+ @- t  Q__HRTIM1_CLK_ENABLE();
+ g( P! ~, U1 \! P2 {0 W) B/* DLL 校准:使能了周期校准,周期设置为 14µs */6 m5 S! o- H7 _/ A% r
HRTIM1->sCommonRegs.DLLCR = HRTIM_CALIBRATIONRATE_14| HRTIM_DLLCR_CALEN;
2 Y, t# e" X: L: j/* 检查 DLL 校准完成的标志位 */
# Z- t+ l" n. E/ z" Hwhile(HRTIM1->sCommonRegs.ISR & HRTIM_IT_DLLRDY == RESET);) Q$ C4 \+ a, T  b8 g+ u" o
HRTIM1->sCommonRegs.OENR = HRTIM_OENR_TD1OEN; /* 使能 TD1 输出 */
8 ^% _0 J( J: r: [  g1 ?GPIO_HRTIM_outputs_Config(); /* 初始化 HRTIM 输出 */* Y4 S2 \: ]* Z4 ]" t2 y
while(1)& U8 |4 `+ ^( m. y( G! c/ C
{
1 w# c8 g% ]4 V" q& C /* 通过软件来置位和复位 TD1 */: ]% _; p: n7 a1 g9 B; l. Q( x
HRTIM1->sTimerxRegs[HRTIM_TIMERINDEX_TIMER_D].SETx1R = HRTIM_SET1R_SST;1 S, e% X/ t( J5 Q; y  N  B
HRTIM1->sTimerxRegs[HRTIM_TIMERINDEX_TIMER_D].RSTx1R = HRTIM_RST1R_SRT;- Y2 W; R6 l& W* q6 a
}
$ n0 s9 P* F9 w* t- W) ]+ f
. R+ x9 T& g. V8 m7 v
此处复制的代码片段可从 HRTIM_Snippets HRTIM_BasicPWM 示例中获取。两种情况下都须通过 #define HRTIM_CHECK 语句来选择示例。, G6 ~" i8 y4 M) A' ?
对于本文档其余部分,时钟和 DLL 初始化部分将不再重复,而代之以对HRTIM_Minimal_Config() 函数的调用。
8 F! s$ ]" f7 e% }7 M
6 |+ e. Y1 [6 i9 i# V% c完整版请查看:附件4 f7 Z$ {2 S2 K" M& t9 K

DM00121475_ZHV1.pdf

下载

820.72 KB, 下载次数: 86

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

举报

1个回答
wf237574800 回答时间:2024-5-3 16:29:24
[md]
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版