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

HRTIM 指南

[复制链接]
STMCU小助手 发布时间:2022-7-14 18:00
前言
* Z0 D# o3 ~" O; z) p5 j: x0 D在 STM32 微控制器中, STM32F334xx 产品的目标市场是需要高度精确计时数字信号、尤其是数字功率转换应用的细分市场。包括:
: s) o% h4 k% y1 P2 u• 数字电源;2 W9 A, G1 r8 E' k0 f' M! z9 b' @
• 照明;: W( \$ M7 Z; u8 s, z$ A$ J
• 不间断电源;! x7 z0 c7 D# L5 z( e/ S
• 太阳能逆变器;1 y2 G; l7 F) |, w
• 无线充电器。
/ k  g' B1 }1 y$ E* |/ y+ \STM32F334xx 微控制器具有高分辨率定时器 (HRTIM)外设,可产生多达 10 个信号,能够处理用于控制、同步或保护的各种不同输入信号。其模块化架构允许对大部分转换拓扑和多并联转换器进行处理,并可在运行中重新配置它们。
4 ^( N0 I- b5 P通过 STM32F334 参考手册初步了解时,此外设可能看起来比较复杂,这主要是由于它有大量的控制寄存器组。为了补充这份详尽的说明,我们另外提供了一个文档,其中包括快速上手说明以及示例汇总。
8 ]& u9 K- |/ ]# \. v5 a在其第一章中,本指南旨在表明 HRTIM 编程很简单。首先说明环境 (就像是有菜谱的同时也需要有厨房)设置,接着给出了若干简单示例,通过实践帮助理解。这些基本案例用来逐步介绍定时器功能,并提供编程指导。不熟悉 HRTIM 的读者应该仔细阅读本章。
# h. a/ o1 L, e) O! A0 m: _) q第二部分是转换器集合,可在开始新设计时使用,从中选取现成的代码示例,或者从中得到灵感和编程技巧来处理本文档中未描述的拓扑。但是需要注意,本指南不包括转换器设计本
- @. T; o% r5 D; l  v1 |  F身 (控制技术和元件设计),这些内容在专门的应用笔记中有描述。3 u7 g, q7 O4 r, Z- ]3 D& ?8 s
如有必要,每个示例都提供了简要的转换器说明 (拓扑和到 MCU 的连接)、控制波形和代码段。& u- s! }7 K) a7 Q  R" y
( q" }. E  Z( B
1 完成环境的准备2 L* C+ T! J0 i5 V4 }
本章中,我们会确保在开始前所有必需的要素均准备就绪,因此可以仅关注 HRTIM 编程。$ d2 ^& J; b& q$ o3 K4 ?) ^
下列文件作为参考:
2 [1 P& _9 u, w! I5 PSTM32F334x4/x6/x8 数据手册! t! i/ F2 M4 A) J, }4 }1 O9 D9 V
STM32F334x4/x6/x8 勘误表
  D- `5 K, S& D$ n. a% j9 _+ r9 lRM0364 参考手册 STM32F334xx 高级 ARM® 为基础的的 32 MCU+ ?: C5 a5 }; a; V& v
UM1733STM32F334 探索套件入门
9 r% ]$ R* x, p* l) `4 \UM1735STM32F3 系列的探索套件 - 采用 STM32F334C8 MCU
7 c1 k' p% s: N. n6 b) _& n1 oUM1736STM32F334 探索软件开发工具入门- G9 N; Z- G$ @7 S2 w, h+ N
AN4885:使用 STM32F3348 Discovery 进行高亮度 LED 调光) u/ G7 J# H/ P* r) ~
预先阅读 RM0364 中的 HRTIM 章节会有帮助。) o$ C6 L8 I& S7 I: @& z
1.1 必备条件# S: ~/ ]! X8 w- C8 ^) C: W
在享受 HRTIM 的优势之前,我们列出其前提条件。希望读者具有基本的 C 编程技巧,关于MCU 和开发环境的少量经验,以及关于开关模式电源的理论背景。控制策略和元件尺寸标注细节不在本应用笔记范围内,它们可在大量文献中获取。
+ w# Y9 l/ f3 c9 p9 }+ w. [+ ?/ `为简单起见,本指南仅考虑逻辑信号或直接由 MCU 处理的模拟电压,这样就是与电平无关的。不过有些参考文献涉及外部元件接口和电源切换影响 (当定时器或 MCU 具有处理它们的功能时)。
1 y$ b3 _5 C7 D( c3 ]! Y最后,需要提醒的是,如果 STM32F334 HRTIM 用于具有危险电压的应用中,则应由熟练的技术人员来操作功率应用,以避免电击、烧伤甚或死亡的风险。
$ H$ g0 R0 T% ~2 o1 C6 g- {% C
$ F$ ?+ r: c# q  I! M
1.2 硬件设置3 ]+ d# M4 M8 ?. F8 v" D0 }
STM32F334 探索板是价格非常实惠的工具,是开始 (以及继续)用 HRTIM 做实验的最佳选择 (订购码:STM32F3348-DISCO)。它包含了编程接口,芯片编程和调试所需的附加材料只是 USB 连接线。所有 I/O 均可在 2.54 mm 间隔的引脚上使用,因此也可连接到穿孔 / 条状板 / 试验电路板。套件还有两个功率转换器:一个用于 LED 驱动的反向降压转换器和一个低电压降压 / 升压转换器,均具有独立的输入和输出。
) D! \: n5 r2 }7 Q0 ]( V示波器是必备的,最后它与逻辑分析仪一起,用于配置对超过 4 个通道的监测。为了显示出细微的高分辨率步长,示波器的采样率必须至少超过 1GS/s,具有交错采样选项,可将时间精度提高超过 217ps 定时器分辨率。4 z, `( ]0 E1 c- ?6 ^
在早期调试阶段,一个或几个函数发生器可帮助仿真来自功率转换器的反馈 (逻辑脉冲或模拟信号)。该发生器必须有触发输入,用于一些特殊用途。如果缺少,也可利用空闲的定时单元,由 HRTIM 本身来仿真反馈信号,这需要多编写一些代码 (或重复利用软件示例)。
% S7 h/ k! x* P1 j7 A% I7 \4 [8 v5 N7 q5 s
1.3 工具设置# o) F6 P0 d7 x! q2 U0 B! a" }3 H) X
必须安装一个编译器 (所有示例均适用 32K)以及支持 ST-LINK-V2 调试接口的 IDE
& Q7 Z% E! a' M( Z7 E) ^2 V; ]8 U4 h下面给出的代码片段与编译器无关:# y1 S! B& y7 d1 h9 w2 N: X
它们将被简单地复制到面向各种工具链的通用 HRTIM工程模板中。9 H1 S- @: F# r2 X, S
对于下面的工具链,软件源随工作空间给出:
* M" j! w) u8 [. Q. {IAR (EWARM 7.10.3)
) A+ ]4 ?9 N. t3 W/ t/ C) }KEIL® (MDK-ARM 4.7)4 J3 i7 ~* f9 Z- x9 r0 u

1 v; C* n* H8 g; L9 ?
1.4 STM32F334 HRTIM 设置, I; o# s* `) j' E. |5 v
1.4.1 系统时钟初始化
0 z/ j0 ^& @' X% ^: p1 w为了实现高分辨率, HRTIM 需要由 PLL 高频输出直接馈送。有两种选择可供使用:* Z: {3 r5 \6 X# d" w- m6 T4 ~  i
基于晶体的高速外部(HSE)振荡器,由 PLL 倍频后可提供 144MHz 的频率。这种情况下,此高分辨率为 217ps 144MHz 时钟周期的 1/32);
2 M5 |- z& V  A% H' r: D0 E4 _高速内部(HSI)振荡器,能够提供 128MHz 的频率(8MHz PLL 倍频 16 倍)。这种情况下,高分辨率步长为 244ps 128MHz 时钟周期的 1/32)。该选项适用于有限的温度范围,相关情况参见 STM32F334 数据手册。
  s* a: w( S6 k4 l3 RHAL 库初始化 (HAL_Init)后,立即在主程序中使用 SystemClock_Config() 函数,完成时钟初始化。* t- m$ I2 o6 h4 Y" f  z2 ]9 E
CPU 时钟也来源于 PLL (除以 2 之后),因此它可达到 PLL 输出频率的一半 (使用 HSE
- f5 q3 ]4 j7 g! W时为 72MH,使用 HSI 时为 64MHz)。它还可被降低,以减少 MCU 功耗,同时保持高分辨
# T$ U" d. f! S/ s率功能。
' D6 j( c5 a8 Z' h可最后在主程序中执行 SystemCoreClockUpdate 函数来验证 CPU 工作频率:该频率在
( i% D! e$ W7 S0 \% b" v9 ^1 ~SystemCoreClock 变量中更新。
; V4 J* `5 Y7 T/ Y3 h, y) g1.4.2 HRTIM 初始化
! z1 R' J% z* c2 R3 G: c$ N本章逐步地详细介绍如何初始化 HRTIM,包括各个函数调用。实际上,这在HAL_HRTIM_Init HAL_HRTIM_MspInit 程序中完成。
# n  I/ x3 O4 V' J- h
4 k. T3 i: [& }
HRTIM 时钟初始化# U$ |; O2 w: m% X( |
MCU 上电并开始运行, HRTIM 在编程之前就必须进行时钟控制。这利用复位和时钟控制RCC)来实现,包括 2 个步骤:4 a8 }7 L  z7 j
1.
8 C) E8 y7 y6 b$ M. G* DRCC_CFGR3 寄存器中的 HRTIM 选择高速 PLL 输出:8 @2 h) Y0 L; b" x5 V5 T1 L
__HAL_RCC_HRTIM1_CONFIG(RCC_HRTIM1CLK_PLLCLK);
6 D& G  b( Y& t# Z8 f: I- E7 D2. 为在 APB2 总线上映射的寄存器进行时钟使能。! o& J0 X' f3 n  Q8 L1 I
__HRTIM1_CLK_ENABLE();
5 w% r/ G8 T4 X* g9 ]. M5 T& u, c# r
1.4.3 HRTIM DLL 初始化; a. F1 Q8 S  F
HRTIM 的延迟锁相环 (DLL)可提供细粒度计时,将高频率 (144 128MHz)时钟周期分为 32 个均匀分布的间隔。/ J% q! c! s, b) R# f$ {% a& k3 y
在使用高分辨率前,此 DLL 必须至少校准一次。如果电压或温度条件发生改变,在 HRTIM操作过程中可透明地重新进行该校准。也可由硬件使能周期校准。
0 Y! C5 k0 G% Y& z/ t, T) I* \  H8 ?下面的代码段显示如何完成校准。当 DLLRDY 标志被置位后,高分辨率可用。# K' g* m7 t. x4 f# L
/* DLL 校准:使能了周期校准,周期设置为 14µs */HRTIM1->sCommonRegs.DLLCR = HRTIM_CALIBRATIONRATE_14| HRTIM_DLLCR_CALEN;/* 检查 DLL 校准完成的标志位 */6 j& }: H6 N0 B/ I+ E8 T
while(HRTIM1->sCommonRegs.ISR & HRTIM_IT_DLLRDY == RESET);
- p! O3 x0 l  c  r4 V8 B5 y建议使能周期校准,默认情况下采用最小校准周期 (设为 14µs)。
( q+ r1 s/ l0 z# }+ {注: 如果 DLL 未锁定 (通常是由于 HSE 振荡器未正常配置),下面的代码将引起执行延迟。' j- F: b7 Z% f$ U3 Z( B7 S5 m
HAL 库包含一个函数来实现校准,它具有超时验证,如有必要可重定向至差错处理程序。基HAL 的软件示例中使用了此函数。# ?. X4 o* C8 d0 {1 H" I
1.4.4 HRTIM I/O 初始化% F; s9 r/ I' s
HRTIM 输入和输出映射到标准 I/O 端口,必须像其他 I/O 外设一样进行编程。 HRTIM 端口通道影射为:, ]- f, D9 s1 ^3 e9 [$ O3 {+ A
AF13 通道 (面向 HRTIM I/O 端口,位于端口 A B);
+ a% U' G" U; e2 ZAF3 通道 (面向 HRTIM I/O 端口,位于端口 C);
! o4 o1 T& g8 {5 }; IHRTIM I/O 初始化必须在两个阶段中完成。在 HRTIM 寄存器之前,首先在HAL_HRTIM_MspInit 函数中初始化 HRTIM 输入。
' z" ^8 \. ^- K! sHRTIM 输出必须在 HRTIM 控制寄存器编程 (示例中它在 GPIO_HRTIM_outputs_Config 数中完成)后且当计数器使能时进行初始化。这是为了保证来自 GPIO 电路的控制信号传输HRTIM 定时器之前,在 HRTIM 中能够正确定义输出状态。
# H% y4 a6 y! A" y# V: J3 W2 v) I7 z% z) ~& c
1.4.5 其他外设初始化6 S8 j) i+ G1 w% z9 p0 `- {. B
HRTIM 与多种 MCU 外设交互作用,如下所列。进行 IHRTIM 操作时不强制要求对它们全部0 a9 ]5 X% l/ l% _* V
进行初始化。下列外设的初始化代码在后面所述的一些示例中提供。# D( T  _( j1 P. }6 u' w4 J

+ ?& p, Q+ Y4 k, ~6 r  Z" f" G
嵌套向量中断控制器 (Nested Vectored Interrupt ControllerNVIC" w8 t4 ^  S7 K
HRTIM 中断请求分组为 7 种中断向量。所有错误均分组到一个特殊向量中,可设置为非常高的优先级。4 s% y5 ~3 D* |. f; Y
HRTIM 相关的 NVIC 部分在 HAL_HRTIM_MspInit 函数中进行编程。
& D! d, d1 }, F( z1 J9 s# r( n  ]/ H9 V, E2 b5 J
DMA 控制器/ h" D. d- V5 q- H0 t+ Y3 J$ r" H
大部分中断请求可用作 DMA 请求,分组到 6 DMA 通道 (每个定时单元一个,包括主定时器)
  x, s5 `5 P- [/ m当启动定时器时,基于 DMA HRTIM 操作使能,利用专门的开始 / 停止函数如HAL_HRTIM_WaveformCounterStart_DMA8 D+ \. M) m, `
, ?; F% w7 c: q8 a, ]* e
比较器, Q9 y& r9 g8 }4 }, `
3 个内置比较器可用来调节模拟信号:它们必须在输出到达 HRTIM 前进行初始化。& I  |! p% Z5 g7 @' A
初始化包括模拟输入编程、时钟使能和极性。
8 j! j- [3 o4 D( L* t: M/ o! P9 C5 R3 H, ^! q
运算放大器
/ g7 ?) l; i& s# e2 H内置运算放大器能够放大进入 ADC 或比较器的低电压信号,也可直接充当比较器 (相比普通比较器,它速率较低)。它必须与比较器一样进行初始化。* M- q( w- y- t8 V

4 A  _% X  R8 t$ a
ADC 转换器
7 m9 m; X; k& t+ I0 UHRTIM 能够触发两个 ADC 转换器中的任意一个。应初始化它们以接收外部触发器信号 (在其常规和 / 或注入转换序列上)。( \1 M6 q* ?; E9 l8 R
ADC 的另一个可能用途在于使用模拟看门狗在 HRTIM 上触发外部事件 (用于输出置位 / 位或计数器复位)。
/ T, c% X% J% {, ~; h+ Z; @1 _' m( n5 n+ z7 H4 r
DAC 转换器
* x3 h- ^# z9 F$ @: u' RDAC 转换器通常用于定义比较器阈值。它们可利用 HRTIM DAC 触发器,与 HRTIM 操作同步更新。
. I3 l1 L: C! ?9 f8 K" ?, C5 g0 t7 M' ^: f! B
通用定时器% p, z6 F9 R6 J, m  d
HRTIM 也可连接到其他片上定时器,有以下用途:
+ L7 k3 M- Y8 q$ R作为外部事件;
: N8 [. |1 n" O; v9 m作为突发模式触发器或时钟;
5 r( p* N1 i( o7 W/ [7 \用于 HRTIM 寄存器更新触发。4 d" I% @( x5 ~

' N' X8 c' m7 \/ V( k
1.4.6 HRTIM 功能检查% ^5 W( ^6 u; j+ U
当所有初始化完成,可验证 HRTIM 能够利用下面的简单代码来运行。此示例代码HRTIM_BasicPWM 示例)使能了 HRTIM TD1 输出并通过软件对其进行切换。6 m* j! @# Y) K; m2 F
/* 使用 PLLx2 时钟来实现 HRTIM */$ ]0 J" B2 e* Q% ~' u
__HAL_RCC_HRTIM1_CONFIG(RCC_HRTIM1CLK_PLLCLK);DocID026506 Rev 1 [English Rev 1] 9/33
% T4 M# S6 P+ p, v; b4 n2 d) o/* 使能 HRTIM 时钟 */
, |( Y% P, A! h3 o9 W. }6 H. U2 j__HRTIM1_CLK_ENABLE();
, ~6 a. s9 d% o2 o* v; q1 w3 R/* DLL 校准:使能了周期校准,周期设置为 14µs */5 m8 i  w$ I; _; ]$ g( f( Z
HRTIM1->sCommonRegs.DLLCR = HRTIM_CALIBRATIONRATE_14| HRTIM_DLLCR_CALEN;
! ?, C, V( @0 _7 M9 A1 L9 Z& Z/* 检查 DLL 校准完成的标志位 */7 u' Y& t1 t5 x! [! h
while(HRTIM1->sCommonRegs.ISR & HRTIM_IT_DLLRDY == RESET);
3 G: z$ V/ D. x5 P- u; w$ bHRTIM1->sCommonRegs.OENR = HRTIM_OENR_TD1OEN; /* 使能 TD1 输出 */
2 y# T6 \! r1 j4 cGPIO_HRTIM_outputs_Config(); /* 初始化 HRTIM 输出 */
( T$ y  d5 g* ^/ r- b% l' _9 awhile(1)
* q9 N9 L0 R/ t {
: R. @$ ~9 ?* V5 n  t* d /* 通过软件来置位和复位 TD1 */
4 y3 K. _4 a$ t# S5 j: e7 B HRTIM1->sTimerxRegs[HRTIM_TIMERINDEX_TIMER_D].SETx1R = HRTIM_SET1R_SST;
  E( m3 e: K: ]! y" z* t HRTIM1->sTimerxRegs[HRTIM_TIMERINDEX_TIMER_D].RSTx1R = HRTIM_RST1R_SRT;$ J8 Y5 v' ?  q+ g7 ?; E! ~' e0 ^: x
}
% a, A9 ^/ _) z2 O  w0 r, E
1 I, O& a  p( T6 H6 j) V3 N
此处复制的代码片段可从 HRTIM_Snippets HRTIM_BasicPWM 示例中获取。两种情况下都须通过 #define HRTIM_CHECK 语句来选择示例。
* m: ]0 V6 s+ u/ X. o4 p对于本文档其余部分,时钟和 DLL 初始化部分将不再重复,而代之以对HRTIM_Minimal_Config() 函数的调用。
- G9 k* c1 w4 t+ O% t: F9 O& [5 E7 q8 x* j
完整版请查看:附件
0 g  Z! J, A, P0 d8 H+ S

DM00121475_ZHV1.pdf

下载

820.72 KB, 下载次数: 130

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