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

HRTIM 指南

[复制链接]
STMCU小助手 发布时间:2022-7-14 18:00
前言
6 [6 f0 C  E* U$ y9 G3 r: P在 STM32 微控制器中, STM32F334xx 产品的目标市场是需要高度精确计时数字信号、尤其是数字功率转换应用的细分市场。包括:( a2 w& N- G7 o% q. x
• 数字电源;
: B0 J# F# g0 h+ N$ P+ @' t. v• 照明;
* X8 c, c9 ~6 v. S• 不间断电源;
/ f! W# h& n+ @: I9 e3 F• 太阳能逆变器;
3 J9 S' J; ^% `• 无线充电器。
8 }% R; N  `9 \2 }1 d" t. ~STM32F334xx 微控制器具有高分辨率定时器 (HRTIM)外设,可产生多达 10 个信号,能够处理用于控制、同步或保护的各种不同输入信号。其模块化架构允许对大部分转换拓扑和多并联转换器进行处理,并可在运行中重新配置它们。
/ ]  f' _; B" z4 r- C$ @4 `通过 STM32F334 参考手册初步了解时,此外设可能看起来比较复杂,这主要是由于它有大量的控制寄存器组。为了补充这份详尽的说明,我们另外提供了一个文档,其中包括快速上手说明以及示例汇总。* e% e/ v. y# e) G3 O, C
在其第一章中,本指南旨在表明 HRTIM 编程很简单。首先说明环境 (就像是有菜谱的同时也需要有厨房)设置,接着给出了若干简单示例,通过实践帮助理解。这些基本案例用来逐步介绍定时器功能,并提供编程指导。不熟悉 HRTIM 的读者应该仔细阅读本章。
3 @; e8 @7 W/ f第二部分是转换器集合,可在开始新设计时使用,从中选取现成的代码示例,或者从中得到灵感和编程技巧来处理本文档中未描述的拓扑。但是需要注意,本指南不包括转换器设计本. t8 X' F# X* Y8 X
身 (控制技术和元件设计),这些内容在专门的应用笔记中有描述。
; B* T" r2 M  L* r如有必要,每个示例都提供了简要的转换器说明 (拓扑和到 MCU 的连接)、控制波形和代码段。
! {$ t$ K6 s( ~% \7 U% F
/ o0 m! [" {' \" ]
1 完成环境的准备$ a" c8 d# r$ K4 x! k( o( ^
本章中,我们会确保在开始前所有必需的要素均准备就绪,因此可以仅关注 HRTIM 编程。8 A. e" V# B+ K4 Q. B
下列文件作为参考:
$ x% B( ]: T  c# f7 F# KSTM32F334x4/x6/x8 数据手册6 d, g' C3 H# v, m1 s$ x3 L% J" E
STM32F334x4/x6/x8 勘误表% q  o) D# ~+ D4 m/ }9 }! g1 ^
RM0364 参考手册 STM32F334xx 高级 ARM® 为基础的的 32 MCU
, v, ?* b% L: aUM1733STM32F334 探索套件入门
5 D# |! x3 O4 |UM1735STM32F3 系列的探索套件 - 采用 STM32F334C8 MCU
$ R  k7 n' m: `2 oUM1736STM32F334 探索软件开发工具入门
: _# Q6 y* A6 R1 rAN4885:使用 STM32F3348 Discovery 进行高亮度 LED 调光
8 a) b. p1 E: g( \4 U& L, N7 d预先阅读 RM0364 中的 HRTIM 章节会有帮助。
3 t# o, b5 [/ [9 _
1.1 必备条件
7 x5 ^* \7 A$ \. ]- U7 s# Q. h3 ?7 Q在享受 HRTIM 的优势之前,我们列出其前提条件。希望读者具有基本的 C 编程技巧,关于MCU 和开发环境的少量经验,以及关于开关模式电源的理论背景。控制策略和元件尺寸标注细节不在本应用笔记范围内,它们可在大量文献中获取。
- Q( A# K4 {6 v4 _为简单起见,本指南仅考虑逻辑信号或直接由 MCU 处理的模拟电压,这样就是与电平无关的。不过有些参考文献涉及外部元件接口和电源切换影响 (当定时器或 MCU 具有处理它们的功能时)。7 M" C" p; x; G4 k8 H( M
最后,需要提醒的是,如果 STM32F334 HRTIM 用于具有危险电压的应用中,则应由熟练的技术人员来操作功率应用,以避免电击、烧伤甚或死亡的风险。, s9 q# R) W1 s6 j8 k

3 y5 ~* p; O* v" k7 e9 c+ f; {
1.2 硬件设置
/ {& S. t% F4 F! O% s- f8 Y, ^STM32F334 探索板是价格非常实惠的工具,是开始 (以及继续)用 HRTIM 做实验的最佳选择 (订购码:STM32F3348-DISCO)。它包含了编程接口,芯片编程和调试所需的附加材料只是 USB 连接线。所有 I/O 均可在 2.54 mm 间隔的引脚上使用,因此也可连接到穿孔 / 条状板 / 试验电路板。套件还有两个功率转换器:一个用于 LED 驱动的反向降压转换器和一个低电压降压 / 升压转换器,均具有独立的输入和输出。0 N( _- |0 j& S# T* V
示波器是必备的,最后它与逻辑分析仪一起,用于配置对超过 4 个通道的监测。为了显示出细微的高分辨率步长,示波器的采样率必须至少超过 1GS/s,具有交错采样选项,可将时间精度提高超过 217ps 定时器分辨率。4 P9 g# v1 p' T
在早期调试阶段,一个或几个函数发生器可帮助仿真来自功率转换器的反馈 (逻辑脉冲或模拟信号)。该发生器必须有触发输入,用于一些特殊用途。如果缺少,也可利用空闲的定时单元,由 HRTIM 本身来仿真反馈信号,这需要多编写一些代码 (或重复利用软件示例)。
3 s+ Y1 w" d. o1 t1 H5 p7 p' z+ C& ~. {( t, Q' b- k& r9 l
1.3 工具设置
3 u! @8 V8 _8 Q4 l必须安装一个编译器 (所有示例均适用 32K)以及支持 ST-LINK-V2 调试接口的 IDE
7 f% j6 [, i# B. f8 l! j0 \) q' K下面给出的代码片段与编译器无关:
1 F" W, v$ I$ g; \* w9 ^2 X) b: V它们将被简单地复制到面向各种工具链的通用 HRTIM工程模板中。4 h8 w! \& }. i6 Q/ X: a
对于下面的工具链,软件源随工作空间给出:9 ~* T$ D5 W3 ~2 ~4 Q3 f
IAR (EWARM 7.10.3)
  n& [" q( A: T8 |+ S  eKEIL® (MDK-ARM 4.7)" z8 c6 _. u, r6 y+ N
* }, H; V: r6 s: X
1.4 STM32F334 HRTIM 设置
- _' x0 r9 Q& f/ N: Y1.4.1 系统时钟初始化
4 ?5 T& n4 `* O9 e% V$ d为了实现高分辨率, HRTIM 需要由 PLL 高频输出直接馈送。有两种选择可供使用:, u" @4 g  M1 ^0 f  i
基于晶体的高速外部(HSE)振荡器,由 PLL 倍频后可提供 144MHz 的频率。这种情况下,此高分辨率为 217ps 144MHz 时钟周期的 1/32);
, ?1 J9 Q8 O* x高速内部(HSI)振荡器,能够提供 128MHz 的频率(8MHz PLL 倍频 16 倍)。这种情况下,高分辨率步长为 244ps 128MHz 时钟周期的 1/32)。该选项适用于有限的温度范围,相关情况参见 STM32F334 数据手册。
  l" p1 F" Q! ?8 R1 K, yHAL 库初始化 (HAL_Init)后,立即在主程序中使用 SystemClock_Config() 函数,完成时钟初始化。% `- i1 [0 y1 p3 K$ N! f- R" Z& o
CPU 时钟也来源于 PLL (除以 2 之后),因此它可达到 PLL 输出频率的一半 (使用 HSE
+ P, k4 R0 c( \5 D. A$ A时为 72MH,使用 HSI 时为 64MHz)。它还可被降低,以减少 MCU 功耗,同时保持高分辨
& V4 _5 C+ A( n0 D3 `率功能。) x/ X9 n) P1 F4 O+ D  y
可最后在主程序中执行 SystemCoreClockUpdate 函数来验证 CPU 工作频率:该频率在
' _% E5 G+ p) bSystemCoreClock 变量中更新。
3 P, |! ~4 s' i, W0 t& C1.4.2 HRTIM 初始化9 j& R, K7 `8 k
本章逐步地详细介绍如何初始化 HRTIM,包括各个函数调用。实际上,这在HAL_HRTIM_Init HAL_HRTIM_MspInit 程序中完成。6 h, O7 G; A; U
! R1 a0 y+ G" s% C! i
HRTIM 时钟初始化1 c2 Y: W0 S6 H1 f
MCU 上电并开始运行, HRTIM 在编程之前就必须进行时钟控制。这利用复位和时钟控制RCC)来实现,包括 2 个步骤:
  i* V. g# H4 C, j5 \1 X. r: i1. : W7 @  G# H5 J2 }. z, u9 _1 X1 T
RCC_CFGR3 寄存器中的 HRTIM 选择高速 PLL 输出:4 ^  v* [1 f# t8 E
__HAL_RCC_HRTIM1_CONFIG(RCC_HRTIM1CLK_PLLCLK);: b% g6 m7 A  ]
2. 为在 APB2 总线上映射的寄存器进行时钟使能。4 B; A6 w, L+ ?5 u" f
__HRTIM1_CLK_ENABLE();
6 o% _1 o- l; {( [
$ i+ h# z8 s) R4 i4 s
1.4.3 HRTIM DLL 初始化8 X7 r) Z6 E6 B+ T, G; b2 l
HRTIM 的延迟锁相环 (DLL)可提供细粒度计时,将高频率 (144 128MHz)时钟周期分为 32 个均匀分布的间隔。; Z0 ]+ E9 A4 p
在使用高分辨率前,此 DLL 必须至少校准一次。如果电压或温度条件发生改变,在 HRTIM操作过程中可透明地重新进行该校准。也可由硬件使能周期校准。
: [4 t7 Z2 U9 b/ _6 T下面的代码段显示如何完成校准。当 DLLRDY 标志被置位后,高分辨率可用。
( W7 r6 {0 a+ A* v( f$ H, |/* DLL 校准:使能了周期校准,周期设置为 14µs */HRTIM1->sCommonRegs.DLLCR = HRTIM_CALIBRATIONRATE_14| HRTIM_DLLCR_CALEN;/* 检查 DLL 校准完成的标志位 */
. i+ `" o0 ~+ o1 R( ^# {3 I while(HRTIM1->sCommonRegs.ISR & HRTIM_IT_DLLRDY == RESET);) w/ a4 b7 w( g( h: }7 V
建议使能周期校准,默认情况下采用最小校准周期 (设为 14µs)。! s' r6 [% g1 ?6 @3 }
注: 如果 DLL 未锁定 (通常是由于 HSE 振荡器未正常配置),下面的代码将引起执行延迟。
. F& C/ f+ H6 s# hHAL 库包含一个函数来实现校准,它具有超时验证,如有必要可重定向至差错处理程序。基HAL 的软件示例中使用了此函数。
7 J" A4 ~4 z, ?+ @2 q  ~% B1.4.4 HRTIM I/O 初始化- j/ H6 a0 E# N5 w$ Q% ~3 M9 J
HRTIM 输入和输出映射到标准 I/O 端口,必须像其他 I/O 外设一样进行编程。 HRTIM 端口通道影射为:
+ A$ ^# b. w* a7 u; ZAF13 通道 (面向 HRTIM I/O 端口,位于端口 A B);
$ l. K5 r* e4 f5 P) {) OAF3 通道 (面向 HRTIM I/O 端口,位于端口 C);, x7 p6 R- q: |
HRTIM I/O 初始化必须在两个阶段中完成。在 HRTIM 寄存器之前,首先在HAL_HRTIM_MspInit 函数中初始化 HRTIM 输入。
8 ~* x/ V4 @3 c0 w% sHRTIM 输出必须在 HRTIM 控制寄存器编程 (示例中它在 GPIO_HRTIM_outputs_Config 数中完成)后且当计数器使能时进行初始化。这是为了保证来自 GPIO 电路的控制信号传输HRTIM 定时器之前,在 HRTIM 中能够正确定义输出状态。
- g1 @, d: E7 y- B2 M- v
8 [2 C; Q, l: j, s6 `
1.4.5 其他外设初始化8 @+ L; f/ Z# Z0 h  A
HRTIM 与多种 MCU 外设交互作用,如下所列。进行 IHRTIM 操作时不强制要求对它们全部$ g5 u& j) e+ y2 d9 I. ^+ `- A
进行初始化。下列外设的初始化代码在后面所述的一些示例中提供。% B9 a4 |+ L; P/ R/ F$ n9 A6 R+ t/ J

' q+ V$ d+ l1 {! v9 c
嵌套向量中断控制器 (Nested Vectored Interrupt ControllerNVIC
0 Q, ~5 p  _/ E  ~  HHRTIM 中断请求分组为 7 种中断向量。所有错误均分组到一个特殊向量中,可设置为非常高的优先级。
: f8 B" L$ F( P6 V8 ]+ t; AHRTIM 相关的 NVIC 部分在 HAL_HRTIM_MspInit 函数中进行编程。
& u6 o. Q9 M" l! y. |3 W' v4 C+ J6 {1 D  K& N# T
DMA 控制器& g- j  H/ \  ^; y2 j/ r
大部分中断请求可用作 DMA 请求,分组到 6 DMA 通道 (每个定时单元一个,包括主定时器)5 k' p0 Q8 Q' _- V6 [7 _
当启动定时器时,基于 DMA HRTIM 操作使能,利用专门的开始 / 停止函数如HAL_HRTIM_WaveformCounterStart_DMA- l* N7 V! {: \/ R4 i% P, N
+ |" n: C3 T2 ]# A
比较器1 K8 i! ]! Q9 {" X  b
3 个内置比较器可用来调节模拟信号:它们必须在输出到达 HRTIM 前进行初始化。( \7 A8 x: S- I( E# o
初始化包括模拟输入编程、时钟使能和极性。
. h/ t9 f# N% _6 Q: I- x2 Y. ^
: N7 @, k  p! m" L
运算放大器0 J) x/ H4 T3 \$ O: [2 c& C
内置运算放大器能够放大进入 ADC 或比较器的低电压信号,也可直接充当比较器 (相比普通比较器,它速率较低)。它必须与比较器一样进行初始化。( q2 g+ I3 p$ C

# C4 K! I" j0 O# {
ADC 转换器/ X/ M0 P) m* c- @0 M& C3 C3 t4 d: J
HRTIM 能够触发两个 ADC 转换器中的任意一个。应初始化它们以接收外部触发器信号 (在其常规和 / 或注入转换序列上)。0 |* A4 ]5 F& m5 E
ADC 的另一个可能用途在于使用模拟看门狗在 HRTIM 上触发外部事件 (用于输出置位 / 位或计数器复位)。6 `/ k& _* S% }- C: h

% d& r0 V! S* z5 ~. [! O2 _
DAC 转换器
6 ]3 b$ P- S7 P7 X3 p; G/ l% hDAC 转换器通常用于定义比较器阈值。它们可利用 HRTIM DAC 触发器,与 HRTIM 操作同步更新。- _) B( H% e* i5 M7 P

$ U. H# \# i7 O" G* z9 S$ d+ F  C
通用定时器$ L* N8 P) }+ t+ G  h& \2 n8 K1 p" k, ^
HRTIM 也可连接到其他片上定时器,有以下用途:% k3 i, G$ r5 t9 M. S( D
作为外部事件;1 n3 H8 x% I  t% d( D$ w
作为突发模式触发器或时钟;$ }. M. ~8 x0 j6 ~
用于 HRTIM 寄存器更新触发。3 k+ q; s2 Q9 `3 d6 B$ p5 Y1 h" l

* y. A  q; H8 g# M
1.4.6 HRTIM 功能检查
& {1 c& X1 Q4 I当所有初始化完成,可验证 HRTIM 能够利用下面的简单代码来运行。此示例代码HRTIM_BasicPWM 示例)使能了 HRTIM TD1 输出并通过软件对其进行切换。4 h! X( S1 d: X+ o, j+ O( b8 |
/* 使用 PLLx2 时钟来实现 HRTIM */
. Y% k# n, S1 J7 p__HAL_RCC_HRTIM1_CONFIG(RCC_HRTIM1CLK_PLLCLK);DocID026506 Rev 1 [English Rev 1] 9/33+ S5 e. D- R* l" @! C
/* 使能 HRTIM 时钟 */
6 F. j; j% J" f__HRTIM1_CLK_ENABLE();
. }. F+ k! _( \9 V2 [  W/* DLL 校准:使能了周期校准,周期设置为 14µs */& o. r2 P! p0 g  v5 U) d
HRTIM1->sCommonRegs.DLLCR = HRTIM_CALIBRATIONRATE_14| HRTIM_DLLCR_CALEN;
7 J% f5 `" c. c6 @) u/* 检查 DLL 校准完成的标志位 */9 W: @1 T( p! \  q1 s3 p& @0 T
while(HRTIM1->sCommonRegs.ISR & HRTIM_IT_DLLRDY == RESET);3 t5 W' Y3 D; u4 X
HRTIM1->sCommonRegs.OENR = HRTIM_OENR_TD1OEN; /* 使能 TD1 输出 */
# o4 v+ s/ c5 K6 K& N- q4 F* @* AGPIO_HRTIM_outputs_Config(); /* 初始化 HRTIM 输出 */8 H6 Q- q9 G: C
while(1)
  S  P7 m' B5 |, D# Y! T! s+ T {
4 b: a7 Q# D: N /* 通过软件来置位和复位 TD1 */
- J( @. ^: Q% ~* H) k, R HRTIM1->sTimerxRegs[HRTIM_TIMERINDEX_TIMER_D].SETx1R = HRTIM_SET1R_SST;
9 z/ X; }/ K/ a HRTIM1->sTimerxRegs[HRTIM_TIMERINDEX_TIMER_D].RSTx1R = HRTIM_RST1R_SRT;, E5 U4 p! a" Q7 G0 X' g
}
5 H. s0 f% D( e0 {# ^- s* U# O& r
此处复制的代码片段可从 HRTIM_Snippets HRTIM_BasicPWM 示例中获取。两种情况下都须通过 #define HRTIM_CHECK 语句来选择示例。! c; u4 x4 B9 h! `: H6 l
对于本文档其余部分,时钟和 DLL 初始化部分将不再重复,而代之以对HRTIM_Minimal_Config() 函数的调用。8 Z* }0 Q+ D- P: S- {; A/ t9 g
' f0 G- i, n8 n4 [$ y# P: y
完整版请查看:附件
2 Y$ I$ S' f& h' M$ y( D0 a

DM00121475_ZHV1.pdf

下载

820.72 KB, 下载次数: 138

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