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

HRTIM 指南

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

7 E0 m$ U+ t' L: E' X  J: g0 R
1.2 硬件设置* k/ v! A2 G. m7 `1 J
STM32F334 探索板是价格非常实惠的工具,是开始 (以及继续)用 HRTIM 做实验的最佳选择 (订购码:STM32F3348-DISCO)。它包含了编程接口,芯片编程和调试所需的附加材料只是 USB 连接线。所有 I/O 均可在 2.54 mm 间隔的引脚上使用,因此也可连接到穿孔 / 条状板 / 试验电路板。套件还有两个功率转换器:一个用于 LED 驱动的反向降压转换器和一个低电压降压 / 升压转换器,均具有独立的输入和输出。( P  F- b$ I1 y/ l3 g
示波器是必备的,最后它与逻辑分析仪一起,用于配置对超过 4 个通道的监测。为了显示出细微的高分辨率步长,示波器的采样率必须至少超过 1GS/s,具有交错采样选项,可将时间精度提高超过 217ps 定时器分辨率。
" `; x" c9 q1 E/ ?/ d9 ]; C在早期调试阶段,一个或几个函数发生器可帮助仿真来自功率转换器的反馈 (逻辑脉冲或模拟信号)。该发生器必须有触发输入,用于一些特殊用途。如果缺少,也可利用空闲的定时单元,由 HRTIM 本身来仿真反馈信号,这需要多编写一些代码 (或重复利用软件示例)。
. Q3 V! c# c2 ~. _: `. ?  J
, e' Z- ^2 c6 m6 H
1.3 工具设置
. P% Q0 K: l0 Q+ y: W7 m' H9 a必须安装一个编译器 (所有示例均适用 32K)以及支持 ST-LINK-V2 调试接口的 IDE  \8 R3 T  v$ H$ d( B& v; j  V
下面给出的代码片段与编译器无关:8 p/ \0 H% t/ Q1 ?: \1 a
它们将被简单地复制到面向各种工具链的通用 HRTIM工程模板中。$ W1 T+ x2 E7 H% B8 @0 w8 Y2 z
对于下面的工具链,软件源随工作空间给出:
$ Y0 |! X: @1 w3 wIAR (EWARM 7.10.3)
7 ~& g6 {7 X5 {6 P4 n/ MKEIL® (MDK-ARM 4.7); l+ s$ L6 A7 {7 k
' l2 ?" ^9 e5 ~& N
1.4 STM32F334 HRTIM 设置
5 X# l) U9 r* b, j- L5 g' @/ G  _7 Z, F1.4.1 系统时钟初始化
, h- t9 Z: x5 z' \3 E. l; @( R为了实现高分辨率, HRTIM 需要由 PLL 高频输出直接馈送。有两种选择可供使用:9 ~/ ^; A0 K; _& G, P
基于晶体的高速外部(HSE)振荡器,由 PLL 倍频后可提供 144MHz 的频率。这种情况下,此高分辨率为 217ps 144MHz 时钟周期的 1/32);
) O+ ]* y3 v, P( H高速内部(HSI)振荡器,能够提供 128MHz 的频率(8MHz PLL 倍频 16 倍)。这种情况下,高分辨率步长为 244ps 128MHz 时钟周期的 1/32)。该选项适用于有限的温度范围,相关情况参见 STM32F334 数据手册。5 @5 e' ]9 E7 S' [' U" `
HAL 库初始化 (HAL_Init)后,立即在主程序中使用 SystemClock_Config() 函数,完成时钟初始化。
* B9 t$ V  P* S9 MCPU 时钟也来源于 PLL (除以 2 之后),因此它可达到 PLL 输出频率的一半 (使用 HSE9 R% S7 e5 X7 D6 b6 }, V/ T+ H% l( g+ {
时为 72MH,使用 HSI 时为 64MHz)。它还可被降低,以减少 MCU 功耗,同时保持高分辨
, t* _9 L" {4 a, W: X- f$ F2 q6 w率功能。
" d! \$ O1 N0 Y1 R' `可最后在主程序中执行 SystemCoreClockUpdate 函数来验证 CPU 工作频率:该频率在
. y5 z, P) n) }$ A/ e% ?' ~SystemCoreClock 变量中更新。
8 }/ Q. `$ A  y# f6 s  T( b1.4.2 HRTIM 初始化1 O4 I8 n7 K( ^! }- ]: `8 Y0 s
本章逐步地详细介绍如何初始化 HRTIM,包括各个函数调用。实际上,这在HAL_HRTIM_Init HAL_HRTIM_MspInit 程序中完成。- M8 g! k* y' M6 _) X
! Z5 J$ L, s6 Y( y' ?. F+ |% n: d$ W
HRTIM 时钟初始化% u  H  L  {5 v! K
MCU 上电并开始运行, HRTIM 在编程之前就必须进行时钟控制。这利用复位和时钟控制RCC)来实现,包括 2 个步骤:) H3 J- @3 H0 m0 i# W* B) h; ~' c
1. + }* N9 q+ R$ K. J" |. G- K2 a
RCC_CFGR3 寄存器中的 HRTIM 选择高速 PLL 输出:
7 V& d/ Y4 ^4 N. G0 @8 P2 t+ _. z__HAL_RCC_HRTIM1_CONFIG(RCC_HRTIM1CLK_PLLCLK);
  D1 g  R1 S: A1 J2. 为在 APB2 总线上映射的寄存器进行时钟使能。8 D3 y; A# q9 E* \5 ~
__HRTIM1_CLK_ENABLE();6 h# ~1 m8 j$ n" o/ C, a

. C: d" s6 H. v
1.4.3 HRTIM DLL 初始化
$ N, j) U+ @2 g* h5 g% F4 oHRTIM 的延迟锁相环 (DLL)可提供细粒度计时,将高频率 (144 128MHz)时钟周期分为 32 个均匀分布的间隔。
0 G3 d6 }7 E& W/ H在使用高分辨率前,此 DLL 必须至少校准一次。如果电压或温度条件发生改变,在 HRTIM操作过程中可透明地重新进行该校准。也可由硬件使能周期校准。
' K$ r0 f7 Q/ j  T下面的代码段显示如何完成校准。当 DLLRDY 标志被置位后,高分辨率可用。0 Q2 r! r/ F( O) @$ g
/* DLL 校准:使能了周期校准,周期设置为 14µs */HRTIM1->sCommonRegs.DLLCR = HRTIM_CALIBRATIONRATE_14| HRTIM_DLLCR_CALEN;/* 检查 DLL 校准完成的标志位 */
) c; {6 F. q. H( U while(HRTIM1->sCommonRegs.ISR & HRTIM_IT_DLLRDY == RESET);7 {$ `9 M$ `) m+ N7 D1 s; m0 ~
建议使能周期校准,默认情况下采用最小校准周期 (设为 14µs)。
% l/ ]0 S, N2 K1 a7 O. l4 H, k注: 如果 DLL 未锁定 (通常是由于 HSE 振荡器未正常配置),下面的代码将引起执行延迟。* p# O# J% ?: i$ K
HAL 库包含一个函数来实现校准,它具有超时验证,如有必要可重定向至差错处理程序。基HAL 的软件示例中使用了此函数。
" r- Y! b6 Y4 y1.4.4 HRTIM I/O 初始化
' ^! L7 x* a) q8 D* k3 ^HRTIM 输入和输出映射到标准 I/O 端口,必须像其他 I/O 外设一样进行编程。 HRTIM 端口通道影射为:
( S5 {+ v* B0 s& a4 x; A. g9 ?2 nAF13 通道 (面向 HRTIM I/O 端口,位于端口 A B);$ I6 P# [; k/ ^7 n' C: ]
AF3 通道 (面向 HRTIM I/O 端口,位于端口 C);
- w6 |3 q7 m2 D/ s, Q. n) b+ [HRTIM I/O 初始化必须在两个阶段中完成。在 HRTIM 寄存器之前,首先在HAL_HRTIM_MspInit 函数中初始化 HRTIM 输入。
# D1 H: E' V. r! K0 U  f$ YHRTIM 输出必须在 HRTIM 控制寄存器编程 (示例中它在 GPIO_HRTIM_outputs_Config 数中完成)后且当计数器使能时进行初始化。这是为了保证来自 GPIO 电路的控制信号传输HRTIM 定时器之前,在 HRTIM 中能够正确定义输出状态。. H! F& C4 D, I2 S

/ P3 x# j7 R4 v1 V3 [
1.4.5 其他外设初始化( Z7 E' S( l/ t( [6 N6 e, x) n
HRTIM 与多种 MCU 外设交互作用,如下所列。进行 IHRTIM 操作时不强制要求对它们全部
+ ]4 ~8 T6 i1 p6 b; }5 d进行初始化。下列外设的初始化代码在后面所述的一些示例中提供。
1 T! v4 O% x4 b! O) p4 w4 p' L& i) l% ]3 c
嵌套向量中断控制器 (Nested Vectored Interrupt ControllerNVIC5 \- g: a+ U( ]
HRTIM 中断请求分组为 7 种中断向量。所有错误均分组到一个特殊向量中,可设置为非常高的优先级。% Z  ~7 j9 {- q  j& U+ S5 g
HRTIM 相关的 NVIC 部分在 HAL_HRTIM_MspInit 函数中进行编程。
+ |0 I  Z8 Q) P( t. u. _$ s$ b* u- H: V% q0 K* Y* c: H
DMA 控制器
. j% P2 F3 T, Z/ G+ B! t大部分中断请求可用作 DMA 请求,分组到 6 DMA 通道 (每个定时单元一个,包括主定时器)3 [+ Y9 Z/ g$ \
当启动定时器时,基于 DMA HRTIM 操作使能,利用专门的开始 / 停止函数如HAL_HRTIM_WaveformCounterStart_DMA8 x6 j4 r5 ]) q( W  M
& u; v2 p, v% g4 Z
比较器# N/ |$ u- Y, b. g
3 个内置比较器可用来调节模拟信号:它们必须在输出到达 HRTIM 前进行初始化。
- S; H5 u- P% d3 Q, ^3 F. F! `0 w初始化包括模拟输入编程、时钟使能和极性。  W# Y6 w( t/ q6 W3 F

) ]* O+ E- X! f2 r9 W
运算放大器% W$ c( z, P4 G! g3 L# \  o0 |" k
内置运算放大器能够放大进入 ADC 或比较器的低电压信号,也可直接充当比较器 (相比普通比较器,它速率较低)。它必须与比较器一样进行初始化。
3 a# @# R$ U2 _2 O0 K/ Q" a3 Q# K  ?7 N9 r7 q6 L2 d* L8 J
ADC 转换器: R$ q0 h8 _( m" t. u  q, ]9 ^: B+ S, f
HRTIM 能够触发两个 ADC 转换器中的任意一个。应初始化它们以接收外部触发器信号 (在其常规和 / 或注入转换序列上)。! y9 A$ Z1 L) M- T
ADC 的另一个可能用途在于使用模拟看门狗在 HRTIM 上触发外部事件 (用于输出置位 / 位或计数器复位)。+ O- @2 s  ?( h% v3 W- e
- [- S' C* f2 H
DAC 转换器- S& h% D- E4 z7 g# F
DAC 转换器通常用于定义比较器阈值。它们可利用 HRTIM DAC 触发器,与 HRTIM 操作同步更新。; E) j/ A, `1 q! @
1 B$ ?5 c2 i2 T  z, j1 m
通用定时器
  N' ?$ E1 q% ]5 r8 F0 UHRTIM 也可连接到其他片上定时器,有以下用途:, `9 \1 B' U4 E. S
作为外部事件;, {, _- }' T" e0 \
作为突发模式触发器或时钟;
6 g+ [6 @& \3 }; N用于 HRTIM 寄存器更新触发。$ h5 j! E; ^1 y# ?0 l

, v, @0 Y  K( j
1.4.6 HRTIM 功能检查
- R# F  s7 G. i- p/ y* o# P当所有初始化完成,可验证 HRTIM 能够利用下面的简单代码来运行。此示例代码HRTIM_BasicPWM 示例)使能了 HRTIM TD1 输出并通过软件对其进行切换。  ]% n- }6 q, X+ V
/* 使用 PLLx2 时钟来实现 HRTIM */2 B4 r( \: g+ v! n4 `- i) v
__HAL_RCC_HRTIM1_CONFIG(RCC_HRTIM1CLK_PLLCLK);DocID026506 Rev 1 [English Rev 1] 9/33/ U# ^9 x6 L7 ^& p3 R* |
/* 使能 HRTIM 时钟 */
) k, z0 j# O) }  g__HRTIM1_CLK_ENABLE();
: K$ `! _. l- {0 J3 B4 X/* DLL 校准:使能了周期校准,周期设置为 14µs */
6 @1 f7 B$ f( B  q2 I6 E2 M" ~HRTIM1->sCommonRegs.DLLCR = HRTIM_CALIBRATIONRATE_14| HRTIM_DLLCR_CALEN;
. A$ v- H+ p  Z4 D5 U2 q8 [/* 检查 DLL 校准完成的标志位 */# o/ g- R3 B( e+ o9 |
while(HRTIM1->sCommonRegs.ISR & HRTIM_IT_DLLRDY == RESET);- S8 ?7 ?$ O* q7 e5 \+ ]* A
HRTIM1->sCommonRegs.OENR = HRTIM_OENR_TD1OEN; /* 使能 TD1 输出 */; Q0 _3 ]& x, R
GPIO_HRTIM_outputs_Config(); /* 初始化 HRTIM 输出 */
( n6 j+ r+ \3 Y- bwhile(1)
! v; W0 b! e' F' j5 E {
: y- ]/ ~4 G7 y /* 通过软件来置位和复位 TD1 */
1 E. J2 I% ~+ ?  X! ~ HRTIM1->sTimerxRegs[HRTIM_TIMERINDEX_TIMER_D].SETx1R = HRTIM_SET1R_SST;" X% e) ]. K" W5 [, W
HRTIM1->sTimerxRegs[HRTIM_TIMERINDEX_TIMER_D].RSTx1R = HRTIM_RST1R_SRT;9 v. a0 I, Y* L, |/ K) v
}$ L! d' B. o8 p5 l, D0 s6 B! i

5 S) Z$ d  S% v& Q. N! U$ Z! m' ?
此处复制的代码片段可从 HRTIM_Snippets HRTIM_BasicPWM 示例中获取。两种情况下都须通过 #define HRTIM_CHECK 语句来选择示例。! k$ ~4 F7 X$ Y5 I' n  u! u
对于本文档其余部分,时钟和 DLL 初始化部分将不再重复,而代之以对HRTIM_Minimal_Config() 函数的调用。
' k* Z, M4 N: r3 t, h& @6 R  d0 v$ X! f
完整版请查看:附件; A( @% U0 |, E  X" r

DM00121475_ZHV1.pdf

下载

820.72 KB, 下载次数: 196

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

举报

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

下载看看

Goodluckone 回答时间:2025-12-4 13:49:18

下载看看

所属标签

相似技术帖

官网相关资源

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