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

HRTIM 指南

[复制链接]
STMCU小助手 发布时间:2022-7-14 18:00
前言; f6 _' Q# S% k; a6 e" y& I. @5 n
在 STM32 微控制器中, STM32F334xx 产品的目标市场是需要高度精确计时数字信号、尤其是数字功率转换应用的细分市场。包括:
. ?+ s& c: n& C( W  Q) Z: h) W• 数字电源;2 o, E" b0 w6 x) M: v8 v
• 照明;
  Q) F" L8 w( k  l; _# @• 不间断电源;9 f: Y0 G, o; v6 l7 K6 K5 V
• 太阳能逆变器;
5 D' s0 `) U. x/ }/ f• 无线充电器。
7 X( G. V. ^. H& u' A2 X' `! ~STM32F334xx 微控制器具有高分辨率定时器 (HRTIM)外设,可产生多达 10 个信号,能够处理用于控制、同步或保护的各种不同输入信号。其模块化架构允许对大部分转换拓扑和多并联转换器进行处理,并可在运行中重新配置它们。
3 u: f& V4 o8 x3 J/ W; j通过 STM32F334 参考手册初步了解时,此外设可能看起来比较复杂,这主要是由于它有大量的控制寄存器组。为了补充这份详尽的说明,我们另外提供了一个文档,其中包括快速上手说明以及示例汇总。
4 ^1 L& |! T6 G3 m! A在其第一章中,本指南旨在表明 HRTIM 编程很简单。首先说明环境 (就像是有菜谱的同时也需要有厨房)设置,接着给出了若干简单示例,通过实践帮助理解。这些基本案例用来逐步介绍定时器功能,并提供编程指导。不熟悉 HRTIM 的读者应该仔细阅读本章。
( n- m& [% K8 Y3 X  r! f3 B第二部分是转换器集合,可在开始新设计时使用,从中选取现成的代码示例,或者从中得到灵感和编程技巧来处理本文档中未描述的拓扑。但是需要注意,本指南不包括转换器设计本
! |9 {1 `8 Y0 i# ^# X* F' \身 (控制技术和元件设计),这些内容在专门的应用笔记中有描述。/ j* Q5 x" ?/ ]9 m/ m
如有必要,每个示例都提供了简要的转换器说明 (拓扑和到 MCU 的连接)、控制波形和代码段。
) t8 {3 X9 c  D4 Q% ?/ c( p
: Z* k+ D4 M9 }' V5 P; Z2 ^) l
1 完成环境的准备
. b' a3 B. |9 ~. ]& U本章中,我们会确保在开始前所有必需的要素均准备就绪,因此可以仅关注 HRTIM 编程。1 I6 Y! o4 b) w0 A6 B$ p
下列文件作为参考:! l0 E  I; R( R0 d5 @  F
• STM32F334x4/x6/x8 数据手册- Z0 N/ H/ U2 D/ J0 B
• STM32F334x4/x6/x8 勘误表" i5 G) Q5 [" f9 O
• RM0364 参考手册 STM32F334xx 高级 ARM® 为基础的的 32 位 MCU# O& }# e4 ~/ q3 {. d
• UM1733:STM32F334 探索套件入门. C+ ~0 z8 a; O
• UM1735:STM32F3 系列的探索套件 - 采用 STM32F334C8 MCU9 h3 i5 B: ^  I# p4 h$ E* z9 O
• UM1736:STM32F334 探索软件开发工具入门. t% X6 g$ t2 x# }7 h) N" P
• AN4885:使用 STM32F3348 Discovery 进行高亮度 LED 调光4 ]6 t8 Z+ d0 m
预先阅读 RM0364 中的 HRTIM 章节会有帮助。
* e! m* q$ `  _9 W, A
1.1 必备条件
6 {& N& x1 p  j* N在享受 HRTIM 的优势之前,我们列出其前提条件。希望读者具有基本的 C 编程技巧,关于MCU 和开发环境的少量经验,以及关于开关模式电源的理论背景。控制策略和元件尺寸标注细节不在本应用笔记范围内,它们可在大量文献中获取。
. ?& e9 G+ n) f为简单起见,本指南仅考虑逻辑信号或直接由 MCU 处理的模拟电压,这样就是与电平无关的。不过有些参考文献涉及外部元件接口和电源切换影响 (当定时器或 MCU 具有处理它们的功能时)。
6 y1 n& z" b% x# f5 Q最后,需要提醒的是,如果 STM32F334 和 HRTIM 用于具有危险电压的应用中,则应由熟练的技术人员来操作功率应用,以避免电击、烧伤甚或死亡的风险。
0 E: e6 P2 y! o( M6 Q( T% z+ v
+ i5 Q* R' Z7 T7 \8 n
1.2 硬件设置1 S* C% o0 Q) {+ N  e6 O* B5 l8 Y
STM32F334 探索板是价格非常实惠的工具,是开始 (以及继续)用 HRTIM 做实验的最佳选择 (订购码:STM32F3348-DISCO)。它包含了编程接口,芯片编程和调试所需的附加材料只是 USB 连接线。所有 I/O 均可在 2.54 mm 间隔的引脚上使用,因此也可连接到穿孔板 / 条状板 / 试验电路板。套件还有两个功率转换器:一个用于 LED 驱动的反向降压转换器和一个低电压降压 / 升压转换器,均具有独立的输入和输出。8 O9 X1 \: v. G  A( p# _% v# G
示波器是必备的,最后它与逻辑分析仪一起,用于配置对超过 4 个通道的监测。为了显示出细微的高分辨率步长,示波器的采样率必须至少超过 1GS/s,具有交错采样选项,可将时间精度提高超过 217ps 定时器分辨率。
- m5 b4 a: _7 \1 B4 }在早期调试阶段,一个或几个函数发生器可帮助仿真来自功率转换器的反馈 (逻辑脉冲或模拟信号)。该发生器必须有触发输入,用于一些特殊用途。如果缺少,也可利用空闲的定时单元,由 HRTIM 本身来仿真反馈信号,这需要多编写一些代码 (或重复利用软件示例)。
2 d, F2 \( d* j, C6 [$ c9 I3 p, o1 M! y4 R# C; w
1.3 工具设置1 F. }" \3 R! J4 B
必须安装一个编译器 (所有示例均适用 32K)以及支持 ST-LINK-V2 调试接口的 IDE。
( h4 _" n" w3 V, C2 |& c下面给出的代码片段与编译器无关:2 b6 o" k# P5 A; k( ~' m' m- Z
它们将被简单地复制到面向各种工具链的通用 HRTIM工程模板中。! T: I+ n! e8 I( |6 }
对于下面的工具链,软件源随工作空间给出:8 I0 e/ U, z) s3 T& G
• IAR (EWARM 7.10.3) ;
! Y) k  E3 R6 W6 d• KEIL® (MDK-ARM 4.7)。
1 g" a; }' f) F6 z2 }
8 q' v; Q; j7 n
1.4 STM32F334 和 HRTIM 设置
! B, I2 O' Y# P8 R% H1.4.1 系统时钟初始化- ?! Q8 K3 Y* R- r, L# H8 q5 l
为了实现高分辨率, HRTIM 需要由 PLL 高频输出直接馈送。有两种选择可供使用:9 j2 Q! \2 u5 Y1 I
• 基于晶体的高速外部(HSE)振荡器,由 PLL 倍频后可提供 144MHz 的频率。这种情况下,此高分辨率为 217ps (144MHz 时钟周期的 1/32);( U. Z+ E2 u: t& c, n
• 高速内部(HSI)振荡器,能够提供 128MHz 的频率(8MHz 由 PLL 倍频 16 倍)。这种情况下,高分辨率步长为 244ps (128MHz 时钟周期的 1/32)。该选项适用于有限的温度范围,相关情况参见 STM32F334 数据手册。
  L2 V4 H& p) r% |3 \8 w* Z在 HAL 库初始化 (HAL_Init)后,立即在主程序中使用 SystemClock_Config() 函数,完成时钟初始化。
, d9 q7 D( i/ ^! g3 cCPU 时钟也来源于 PLL (除以 2 之后),因此它可达到 PLL 输出频率的一半 (使用 HSE
8 N% e: E' R! l0 S1 A+ N时为 72MH,使用 HSI 时为 64MHz)。它还可被降低,以减少 MCU 功耗,同时保持高分辨; T2 d. b/ z5 d9 v: w; ^7 C
率功能。7 G7 I4 @7 K! L. Y& `
可最后在主程序中执行 SystemCoreClockUpdate 函数来验证 CPU 工作频率:该频率在& ]' @; @) c0 g  n  n7 d; N$ W
SystemCoreClock 变量中更新。
7 q5 j, s; e% A  g, U1.4.2 HRTIM 初始化
. f( j, |$ s, q' v: ~+ D本章逐步地详细介绍如何初始化 HRTIM,包括各个函数调用。实际上,这在HAL_HRTIM_Init 和 HAL_HRTIM_MspInit 程序中完成。
+ r* f' U3 |4 ^, q6 i7 d0 |
& I5 [) N$ Z0 u# t9 D+ i/ W6 _
HRTIM 时钟初始化
: O* p9 z3 U! o* h3 s* X8 C$ T当 MCU 上电并开始运行, HRTIM 在编程之前就必须进行时钟控制。这利用复位和时钟控制 (RCC)来实现,包括 2 个步骤:
! A3 Z5 j6 B2 _/ A/ i4 y1. 6 n$ ?5 q, J- [4 Z- O) V
为 RCC_CFGR3 寄存器中的 HRTIM 选择高速 PLL 输出:
3 U+ Y+ D7 A: i9 o$ D__HAL_RCC_HRTIM1_CONFIG(RCC_HRTIM1CLK_PLLCLK);
+ z+ s; X' V* z; e4 n2. 为在 APB2 总线上映射的寄存器进行时钟使能。
2 @; ~0 N/ B0 M__HRTIM1_CLK_ENABLE();! Q1 s$ p5 @1 f/ B" X* g# f

" f( Z& H5 X4 N4 p# G( H, l& e7 j% m! |
1.4.3 HRTIM DLL 初始化0 q$ n9 W2 A: s$ L
HRTIM 的延迟锁相环 (DLL)可提供细粒度计时,将高频率 (144 或 128MHz)时钟周期分为 32 个均匀分布的间隔。
7 i' v. G8 W6 @0 W+ m/ R在使用高分辨率前,此 DLL 必须至少校准一次。如果电压或温度条件发生改变,在 HRTIM操作过程中可透明地重新进行该校准。也可由硬件使能周期校准。
! D( V; o1 y" R下面的代码段显示如何完成校准。当 DLLRDY 标志被置位后,高分辨率可用。
0 E  P8 ]! T. {2 C1 a* \9 x/* DLL 校准:使能了周期校准,周期设置为 14µs */HRTIM1->sCommonRegs.DLLCR = HRTIM_CALIBRATIONRATE_14| HRTIM_DLLCR_CALEN;/* 检查 DLL 校准完成的标志位 */5 ]: y/ f% p* F9 a3 a  E
while(HRTIM1->sCommonRegs.ISR & HRTIM_IT_DLLRDY == RESET);
6 B6 z2 }$ ^+ f建议使能周期校准,默认情况下采用最小校准周期 (设为 14µs)。
6 r/ ?4 ]8 m# t注: 如果 DLL 未锁定 (通常是由于 HSE 振荡器未正常配置),下面的代码将引起执行延迟。
+ A/ ]9 f# @" D5 o2 L% }HAL 库包含一个函数来实现校准,它具有超时验证,如有必要可重定向至差错处理程序。基于 HAL 的软件示例中使用了此函数。( S: s$ s2 @% d% B8 x! W/ ]" x9 ?
1.4.4 HRTIM I/O 初始化
& W' k& ]% c+ Y5 {% v% d& `1 S4 B% gHRTIM 输入和输出映射到标准 I/O 端口,必须像其他 I/O 外设一样进行编程。 HRTIM 端口通道影射为:
1 r8 Q4 `/ \1 P! _* R% F) g• AF13 通道 (面向 HRTIM I/O 端口,位于端口 A 和 B);0 v; E4 x. f6 V9 e( J2 ^$ B" k
• AF3 通道 (面向 HRTIM I/O 端口,位于端口 C);% Q% Y  F( b) e" B1 p
HRTIM I/O 初始化必须在两个阶段中完成。在 HRTIM 寄存器之前,首先在HAL_HRTIM_MspInit 函数中初始化 HRTIM 输入。3 E0 @% v- r1 j. b# p& \( R
HRTIM 输出必须在 HRTIM 控制寄存器编程 (示例中它在 GPIO_HRTIM_outputs_Config 函数中完成)后且当计数器使能时进行初始化。这是为了保证来自 GPIO 电路的控制信号传输到 HRTIM 定时器之前,在 HRTIM 中能够正确定义输出状态。* s' W5 Q: p8 s( ~
4 ?1 A+ R2 M, a
1.4.5 其他外设初始化
/ J3 f4 }5 `1 @0 @7 A$ O1 F) Z  ^" [HRTIM 与多种 MCU 外设交互作用,如下所列。进行 IHRTIM 操作时不强制要求对它们全部
. A  h; s$ n4 \. E( |% X; A* t+ T8 U4 Y进行初始化。下列外设的初始化代码在后面所述的一些示例中提供。
/ C# x& h4 X! n' ^0 a, x0 @* Q3 m* P# h+ l+ e3 P% K* ~7 [7 v
嵌套向量中断控制器 (Nested Vectored Interrupt Controller, NVIC): |  }+ o. }+ c1 W5 |
HRTIM 中断请求分组为 7 种中断向量。所有错误均分组到一个特殊向量中,可设置为非常高的优先级。
1 {* |0 F1 M7 E( g$ h3 C与 HRTIM 相关的 NVIC 部分在 HAL_HRTIM_MspInit 函数中进行编程。/ C$ ^7 X# p: B

% C: J- B/ }' |1 G3 PDMA 控制器5 d' A. w" ]$ S3 J/ B5 ~
大部分中断请求可用作 DMA 请求,分组到 6 个 DMA 通道 (每个定时单元一个,包括主定时器)。+ X' I$ B6 j) c; p( [) I
当启动定时器时,基于 DMA 的 HRTIM 操作使能,利用专门的开始 / 停止函数如HAL_HRTIM_WaveformCounterStart_DMA。6 G, u( a2 X" A! g
! [% o4 {6 \1 q% Q
比较器
# S! {! h# \' s& L3 a3 a8 T3 个内置比较器可用来调节模拟信号:它们必须在输出到达 HRTIM 前进行初始化。
5 m% p' W, _% D& ?2 ^1 `初始化包括模拟输入编程、时钟使能和极性。9 J) X; f, X& ?+ L" J' p  _3 K
3 I% Q4 K6 }  \- R
运算放大器
  M4 B) f* t' f7 Y内置运算放大器能够放大进入 ADC 或比较器的低电压信号,也可直接充当比较器 (相比普通比较器,它速率较低)。它必须与比较器一样进行初始化。
, C5 U5 j+ c: L$ U* ?% |, D' {$ K3 [
( y) x2 R. Q; p. z# T1 `5 C( o
ADC 转换器
) k. l5 ]1 l# z0 T0 jHRTIM 能够触发两个 ADC 转换器中的任意一个。应初始化它们以接收外部触发器信号 (在其常规和 / 或注入转换序列上)。1 A1 P" k5 K8 T1 J( e
ADC 的另一个可能用途在于使用模拟看门狗在 HRTIM 上触发外部事件 (用于输出置位 / 复位或计数器复位)。. y3 F, N* D1 Z- Z2 Q
) E" T9 f5 S: e0 {, P
DAC 转换器& N. B7 ^; t* c7 N9 o9 |% H5 W
DAC 转换器通常用于定义比较器阈值。它们可利用 HRTIM 的 DAC 触发器,与 HRTIM 操作同步更新。( c3 e, l  F  T

. u5 \3 F3 ]; l& j7 T' Q# h% B
通用定时器3 }$ B- x4 X0 h; S9 O
HRTIM 也可连接到其他片上定时器,有以下用途:# x' I, f! {3 z# c# e4 e
• 作为外部事件;. s4 w8 P& c# u2 c
• 作为突发模式触发器或时钟;
! B, ~3 j. N+ i! F7 i( M1 E9 ^3 y1 w• 用于 HRTIM 寄存器更新触发。
( m; K2 u7 x" P' w2 b  q3 Y# O: U0 d7 N  l; n
1.4.6 HRTIM 功能检查
$ H5 q: c0 T. H+ F8 D2 j当所有初始化完成,可验证 HRTIM 能够利用下面的简单代码来运行。此示例代码(HRTIM_BasicPWM 示例)使能了 HRTIM TD1 输出并通过软件对其进行切换。# A7 X/ F4 c+ R! U1 {  b( O* X" W6 L
/* 使用 PLLx2 时钟来实现 HRTIM */# i( Z2 P! }. W1 d2 s% i* D2 `
__HAL_RCC_HRTIM1_CONFIG(RCC_HRTIM1CLK_PLLCLK);DocID026506 Rev 1 [English Rev 1] 9/33. P! m5 x' h$ g1 Q/ B9 o
/* 使能 HRTIM 时钟 */
( A! [- c( ~; D- E__HRTIM1_CLK_ENABLE();
* C& w+ Y" E' X0 O( k! c- ~/* DLL 校准:使能了周期校准,周期设置为 14µs */
- @- {) I, v1 Q- G) m: GHRTIM1->sCommonRegs.DLLCR = HRTIM_CALIBRATIONRATE_14| HRTIM_DLLCR_CALEN;! ~1 M$ c- }: Y
/* 检查 DLL 校准完成的标志位 */
) s2 y- K+ h' X. w/ Wwhile(HRTIM1->sCommonRegs.ISR & HRTIM_IT_DLLRDY == RESET);
% L& z* D2 }" i: b2 Z; s% HHRTIM1->sCommonRegs.OENR = HRTIM_OENR_TD1OEN; /* 使能 TD1 输出 */
' C2 V, Y# o& V8 {/ bGPIO_HRTIM_outputs_Config(); /* 初始化 HRTIM 输出 */6 u% w1 _# H" f" p8 h, I' g
while(1)
5 t* w) P( o( t+ m/ C {' g; C. ]" z5 y* E. n# @8 J  K7 R
/* 通过软件来置位和复位 TD1 */
" C% N$ L/ k8 p7 K1 [ HRTIM1->sTimerxRegs[HRTIM_TIMERINDEX_TIMER_D].SETx1R = HRTIM_SET1R_SST;
0 P5 |- U  f7 D. F" F. g0 M: _- _" v( w5 [ HRTIM1->sTimerxRegs[HRTIM_TIMERINDEX_TIMER_D].RSTx1R = HRTIM_RST1R_SRT;
1 e# ?& ~$ N5 k2 j1 V1 C }
4 N0 C; n, e4 O1 N) Q
1 z0 @: \4 b. ^* q
此处复制的代码片段可从 HRTIM_Snippets 和 HRTIM_BasicPWM 示例中获取。两种情况下都须通过 #define HRTIM_CHECK 语句来选择示例。" w  ]; k2 w; N' ?, t( [0 U; d
对于本文档其余部分,时钟和 DLL 初始化部分将不再重复,而代之以对HRTIM_Minimal_Config() 函数的调用。) o7 z! k& \1 E5 x& o6 Z! w

! j0 X+ n2 f, ^) d6 d5 k完整版请查看:附件1 w  t4 f4 |8 [2 {9 K

DM00121475_ZHV1.pdf

下载

820.72 KB, 下载次数: 200

赞 收藏 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管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版