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

HRTIM 指南

[复制链接]
STMCU小助手 发布时间:2022-7-14 18:00
前言" i  P( Z* W! S- A; \) Y
在 STM32 微控制器中, STM32F334xx 产品的目标市场是需要高度精确计时数字信号、尤其是数字功率转换应用的细分市场。包括:
( g5 V" T; U2 e' i, A) ~# a# F• 数字电源;, }7 A4 y6 Z% ^0 B6 t) I1 c$ C* D
• 照明;
# e/ Z9 y( N  |! e: N• 不间断电源;
1 v( K# n& K2 C& @0 {& I• 太阳能逆变器;
3 M( S: f$ w& T• 无线充电器。  A- y) E' l7 C% |2 N
STM32F334xx 微控制器具有高分辨率定时器 (HRTIM)外设,可产生多达 10 个信号,能够处理用于控制、同步或保护的各种不同输入信号。其模块化架构允许对大部分转换拓扑和多并联转换器进行处理,并可在运行中重新配置它们。
$ O  y0 B7 L' p0 v/ ^( A# q通过 STM32F334 参考手册初步了解时,此外设可能看起来比较复杂,这主要是由于它有大量的控制寄存器组。为了补充这份详尽的说明,我们另外提供了一个文档,其中包括快速上手说明以及示例汇总。$ [/ D% q3 [; h
在其第一章中,本指南旨在表明 HRTIM 编程很简单。首先说明环境 (就像是有菜谱的同时也需要有厨房)设置,接着给出了若干简单示例,通过实践帮助理解。这些基本案例用来逐步介绍定时器功能,并提供编程指导。不熟悉 HRTIM 的读者应该仔细阅读本章。
' T* u( N1 o9 S: V5 I) }第二部分是转换器集合,可在开始新设计时使用,从中选取现成的代码示例,或者从中得到灵感和编程技巧来处理本文档中未描述的拓扑。但是需要注意,本指南不包括转换器设计本" o4 j4 l: j0 N, T. k' i8 z; r
身 (控制技术和元件设计),这些内容在专门的应用笔记中有描述。
1 ~7 k* }  i, J) J7 W  o8 a$ L& j) _+ Z如有必要,每个示例都提供了简要的转换器说明 (拓扑和到 MCU 的连接)、控制波形和代码段。. o' m: j! E! g3 D' K* }( M
7 G" L2 Z7 H: Y/ \8 O; L: Q" n
1 完成环境的准备
- U6 l  {  C: l本章中,我们会确保在开始前所有必需的要素均准备就绪,因此可以仅关注 HRTIM 编程。5 d5 H3 P7 t& \. L$ }2 _7 S' g
下列文件作为参考:% D; o, z3 u3 f/ g" ], y& ~
STM32F334x4/x6/x8 数据手册0 z# }  E, O3 t* U
STM32F334x4/x6/x8 勘误表
, j+ i/ w3 g1 BRM0364 参考手册 STM32F334xx 高级 ARM® 为基础的的 32 MCU
5 u9 Y! u5 M$ U4 Z5 T  C' }4 pUM1733STM32F334 探索套件入门
' `' x/ a/ `9 ^4 ~2 @! {$ YUM1735STM32F3 系列的探索套件 - 采用 STM32F334C8 MCU
7 R* U; x8 E" m- [! SUM1736STM32F334 探索软件开发工具入门
3 _4 [) b6 |9 T$ S) BAN4885:使用 STM32F3348 Discovery 进行高亮度 LED 调光& I3 Q+ V1 _- H+ `! X. Y0 t- W
预先阅读 RM0364 中的 HRTIM 章节会有帮助。7 L# M! O( d3 P1 z" N% L0 y
1.1 必备条件- R7 t/ d# J$ E( J' L
在享受 HRTIM 的优势之前,我们列出其前提条件。希望读者具有基本的 C 编程技巧,关于MCU 和开发环境的少量经验,以及关于开关模式电源的理论背景。控制策略和元件尺寸标注细节不在本应用笔记范围内,它们可在大量文献中获取。: C  p7 @' E# K3 V- ]# l6 O8 a
为简单起见,本指南仅考虑逻辑信号或直接由 MCU 处理的模拟电压,这样就是与电平无关的。不过有些参考文献涉及外部元件接口和电源切换影响 (当定时器或 MCU 具有处理它们的功能时)。
+ k1 e/ m0 f7 @3 B! o最后,需要提醒的是,如果 STM32F334 HRTIM 用于具有危险电压的应用中,则应由熟练的技术人员来操作功率应用,以避免电击、烧伤甚或死亡的风险。& O* P! i: z- k; A4 j4 E! L! t- f
3 v! S; D% W! H& X& N8 k4 `
1.2 硬件设置
& K6 m* H0 L# h( RSTM32F334 探索板是价格非常实惠的工具,是开始 (以及继续)用 HRTIM 做实验的最佳选择 (订购码:STM32F3348-DISCO)。它包含了编程接口,芯片编程和调试所需的附加材料只是 USB 连接线。所有 I/O 均可在 2.54 mm 间隔的引脚上使用,因此也可连接到穿孔 / 条状板 / 试验电路板。套件还有两个功率转换器:一个用于 LED 驱动的反向降压转换器和一个低电压降压 / 升压转换器,均具有独立的输入和输出。
( y' p7 z2 y9 G8 U) t示波器是必备的,最后它与逻辑分析仪一起,用于配置对超过 4 个通道的监测。为了显示出细微的高分辨率步长,示波器的采样率必须至少超过 1GS/s,具有交错采样选项,可将时间精度提高超过 217ps 定时器分辨率。# _: ^7 q3 n% P+ l+ H
在早期调试阶段,一个或几个函数发生器可帮助仿真来自功率转换器的反馈 (逻辑脉冲或模拟信号)。该发生器必须有触发输入,用于一些特殊用途。如果缺少,也可利用空闲的定时单元,由 HRTIM 本身来仿真反馈信号,这需要多编写一些代码 (或重复利用软件示例)。8 @* m4 }/ e% F' W$ y
" d2 u( x- A! b: K  o, t
1.3 工具设置
6 T- _, k( A" H) }( s# a必须安装一个编译器 (所有示例均适用 32K)以及支持 ST-LINK-V2 调试接口的 IDE5 w0 d: F1 @# m- V
下面给出的代码片段与编译器无关:8 O6 ^1 p& r4 R9 Q7 o
它们将被简单地复制到面向各种工具链的通用 HRTIM工程模板中。% S7 j5 m( ^& _9 e2 e$ V! Y
对于下面的工具链,软件源随工作空间给出:
# H$ p3 y, V5 T$ t+ N5 `! r1 cIAR (EWARM 7.10.3) 5 O% p9 M. T) E2 g7 @
KEIL® (MDK-ARM 4.7)
# `" m4 J* _7 F2 [! I& N) O" K
0 K, ~3 L. N8 x7 G- r; Y
1.4 STM32F334 HRTIM 设置2 u( D7 g8 _* Y" }3 R# L: p" H
1.4.1 系统时钟初始化4 j7 h4 t9 z+ _
为了实现高分辨率, HRTIM 需要由 PLL 高频输出直接馈送。有两种选择可供使用:
6 i1 a- P* E2 \  T基于晶体的高速外部(HSE)振荡器,由 PLL 倍频后可提供 144MHz 的频率。这种情况下,此高分辨率为 217ps 144MHz 时钟周期的 1/32);
/ T6 }* M* R  C( T5 \/ Z; V, A高速内部(HSI)振荡器,能够提供 128MHz 的频率(8MHz PLL 倍频 16 倍)。这种情况下,高分辨率步长为 244ps 128MHz 时钟周期的 1/32)。该选项适用于有限的温度范围,相关情况参见 STM32F334 数据手册。
0 g: z5 s- j' THAL 库初始化 (HAL_Init)后,立即在主程序中使用 SystemClock_Config() 函数,完成时钟初始化。% U! {" J) u1 e/ T1 l/ x; d
CPU 时钟也来源于 PLL (除以 2 之后),因此它可达到 PLL 输出频率的一半 (使用 HSE0 ?0 E% P5 m' @# J- j
时为 72MH,使用 HSI 时为 64MHz)。它还可被降低,以减少 MCU 功耗,同时保持高分辨, q' S" y! o! T& \
率功能。
5 `. S/ L1 s" T2 E. H" Q( g3 k可最后在主程序中执行 SystemCoreClockUpdate 函数来验证 CPU 工作频率:该频率在& @& T7 _! q9 Z% S% d+ v' F
SystemCoreClock 变量中更新。& Z* @) W$ l  H% f, g$ M
1.4.2 HRTIM 初始化& A+ h4 |! z) N3 B8 m" C
本章逐步地详细介绍如何初始化 HRTIM,包括各个函数调用。实际上,这在HAL_HRTIM_Init HAL_HRTIM_MspInit 程序中完成。
4 C% x, L5 J5 D( ]
% h& ~, t5 H, d$ N2 W, a4 j
HRTIM 时钟初始化
1 W7 _; y) S4 m, |% l) R" _% _1 bMCU 上电并开始运行, HRTIM 在编程之前就必须进行时钟控制。这利用复位和时钟控制RCC)来实现,包括 2 个步骤:
! W. ?. G+ b- I; N- A  i1.
. A: F2 B5 j; d2 Q  X5 t  WRCC_CFGR3 寄存器中的 HRTIM 选择高速 PLL 输出:
& O! W9 Z- ]3 T2 U$ X: X. E__HAL_RCC_HRTIM1_CONFIG(RCC_HRTIM1CLK_PLLCLK);
% P) N/ ?9 ^2 p$ c. ]2 Y2. 为在 APB2 总线上映射的寄存器进行时钟使能。  V: S7 p0 m9 G
__HRTIM1_CLK_ENABLE();$ g2 s$ q9 o/ Z1 T0 E2 m
9 k7 q% F2 t; r+ W8 Q
1.4.3 HRTIM DLL 初始化% Q; S# j* J3 A( Y! k/ F9 Q
HRTIM 的延迟锁相环 (DLL)可提供细粒度计时,将高频率 (144 128MHz)时钟周期分为 32 个均匀分布的间隔。
4 D3 X3 s. P) [2 i# a在使用高分辨率前,此 DLL 必须至少校准一次。如果电压或温度条件发生改变,在 HRTIM操作过程中可透明地重新进行该校准。也可由硬件使能周期校准。3 u/ G# B0 Z3 L, u
下面的代码段显示如何完成校准。当 DLLRDY 标志被置位后,高分辨率可用。0 O- m' G, a) s, K* e
/* DLL 校准:使能了周期校准,周期设置为 14µs */HRTIM1->sCommonRegs.DLLCR = HRTIM_CALIBRATIONRATE_14| HRTIM_DLLCR_CALEN;/* 检查 DLL 校准完成的标志位 */
/ R  s) N) e* y# s3 f) T while(HRTIM1->sCommonRegs.ISR & HRTIM_IT_DLLRDY == RESET);7 V& X4 a0 h: V
建议使能周期校准,默认情况下采用最小校准周期 (设为 14µs)。
: l3 Q% o0 E+ k, P注: 如果 DLL 未锁定 (通常是由于 HSE 振荡器未正常配置),下面的代码将引起执行延迟。
0 g! T: `: ^) g4 U4 C4 o: p8 OHAL 库包含一个函数来实现校准,它具有超时验证,如有必要可重定向至差错处理程序。基HAL 的软件示例中使用了此函数。
/ t6 P+ L/ ?4 I9 u: L9 d1.4.4 HRTIM I/O 初始化
3 u* s) c) I+ ~( F& i+ n  qHRTIM 输入和输出映射到标准 I/O 端口,必须像其他 I/O 外设一样进行编程。 HRTIM 端口通道影射为:/ M, Q4 k) x+ ?
AF13 通道 (面向 HRTIM I/O 端口,位于端口 A B);
# |4 d! V0 y  k: Z0 n8 M( I" TAF3 通道 (面向 HRTIM I/O 端口,位于端口 C);
6 o$ m6 J4 G  b, h; M) uHRTIM I/O 初始化必须在两个阶段中完成。在 HRTIM 寄存器之前,首先在HAL_HRTIM_MspInit 函数中初始化 HRTIM 输入。
+ J- Q, t7 v* @0 fHRTIM 输出必须在 HRTIM 控制寄存器编程 (示例中它在 GPIO_HRTIM_outputs_Config 数中完成)后且当计数器使能时进行初始化。这是为了保证来自 GPIO 电路的控制信号传输HRTIM 定时器之前,在 HRTIM 中能够正确定义输出状态。
; r) O$ [; g8 g0 e7 R2 I# t. @' ]$ i2 h
1.4.5 其他外设初始化( W3 L1 w/ l2 [$ z0 i
HRTIM 与多种 MCU 外设交互作用,如下所列。进行 IHRTIM 操作时不强制要求对它们全部
( o/ a( k: L$ |: S进行初始化。下列外设的初始化代码在后面所述的一些示例中提供。
& J1 g( J- u: Z* J, o+ O
( K6 I. p; ~; k, q+ n
嵌套向量中断控制器 (Nested Vectored Interrupt ControllerNVIC
# _7 B4 ]! d+ f$ }; l# G/ ?HRTIM 中断请求分组为 7 种中断向量。所有错误均分组到一个特殊向量中,可设置为非常高的优先级。. K4 f( T& y# ~* g- v
HRTIM 相关的 NVIC 部分在 HAL_HRTIM_MspInit 函数中进行编程。1 D4 z7 S( K. C" l$ E
6 |: e5 ?5 U% D' o# K
DMA 控制器
) g" \$ R. u5 l  _3 ~( z/ U0 _  L0 S7 v大部分中断请求可用作 DMA 请求,分组到 6 DMA 通道 (每个定时单元一个,包括主定时器)
1 V2 A% x, L2 @, o1 x当启动定时器时,基于 DMA HRTIM 操作使能,利用专门的开始 / 停止函数如HAL_HRTIM_WaveformCounterStart_DMA
0 ], T2 i5 P* }$ B- u% n
$ t. [- T' P" B0 V4 h3 Y比较器! e8 i7 l6 B0 ]( q) J, N5 b
3 个内置比较器可用来调节模拟信号:它们必须在输出到达 HRTIM 前进行初始化。; C1 t0 E/ G$ n: y$ v* B( n' X
初始化包括模拟输入编程、时钟使能和极性。
" }$ O+ h' b) E" Y* E6 f; e3 A  ]" E  G6 |9 `* L
运算放大器4 m; k" b3 d/ ?. U
内置运算放大器能够放大进入 ADC 或比较器的低电压信号,也可直接充当比较器 (相比普通比较器,它速率较低)。它必须与比较器一样进行初始化。
5 O, F7 H# I% G* X" w. ~+ z0 D3 T' i: c+ }: g
ADC 转换器
' o$ ^7 v$ }7 V* l! Y9 ZHRTIM 能够触发两个 ADC 转换器中的任意一个。应初始化它们以接收外部触发器信号 (在其常规和 / 或注入转换序列上)。
) [. `  H0 i0 j  ZADC 的另一个可能用途在于使用模拟看门狗在 HRTIM 上触发外部事件 (用于输出置位 / 位或计数器复位)。0 ]* Q8 @1 a# P1 {
8 K2 _& T0 p5 m1 E5 B1 e; h# U
DAC 转换器
( D# l- g0 {0 i! P# s( {" LDAC 转换器通常用于定义比较器阈值。它们可利用 HRTIM DAC 触发器,与 HRTIM 操作同步更新。
5 l5 I5 U* `' V) W, b. ]$ d% T( m+ a6 w, i/ r% t
通用定时器1 N( S2 Y4 y6 e9 G; D' H
HRTIM 也可连接到其他片上定时器,有以下用途:
; Y8 k" s+ V4 w. j7 R" a5 x0 P作为外部事件;: p$ W) e8 L" \8 ]3 p
作为突发模式触发器或时钟;
; x8 e+ S/ B5 B4 P( R  \# G. \0 L0 C用于 HRTIM 寄存器更新触发。
! B% C, I, g. g% {( O( k8 _" e/ A; R; [6 ]" G" D
1.4.6 HRTIM 功能检查* w0 q% q5 w& u7 c
当所有初始化完成,可验证 HRTIM 能够利用下面的简单代码来运行。此示例代码HRTIM_BasicPWM 示例)使能了 HRTIM TD1 输出并通过软件对其进行切换。
7 X  v2 R4 f1 B6 k, N/* 使用 PLLx2 时钟来实现 HRTIM */
" O, ?$ V- _0 o+ K# o__HAL_RCC_HRTIM1_CONFIG(RCC_HRTIM1CLK_PLLCLK);DocID026506 Rev 1 [English Rev 1] 9/33
2 M+ z% A7 f. N0 R( D/* 使能 HRTIM 时钟 */
1 X& Y1 J2 c1 ^__HRTIM1_CLK_ENABLE();' Z) J: z7 |  d/ f/ r! g
/* DLL 校准:使能了周期校准,周期设置为 14µs */& u8 e( [) z. V5 {+ v. G- u( M5 ~  T! _
HRTIM1->sCommonRegs.DLLCR = HRTIM_CALIBRATIONRATE_14| HRTIM_DLLCR_CALEN;
( J1 ~/ E, ~1 a3 h2 E+ y/* 检查 DLL 校准完成的标志位 */
) W4 H& I/ \, [' swhile(HRTIM1->sCommonRegs.ISR & HRTIM_IT_DLLRDY == RESET);
. M7 d; N0 ^9 ?8 G* MHRTIM1->sCommonRegs.OENR = HRTIM_OENR_TD1OEN; /* 使能 TD1 输出 */
) z6 f! F; Y- t2 w" Q+ S  J  WGPIO_HRTIM_outputs_Config(); /* 初始化 HRTIM 输出 */5 T8 B, d: `! g
while(1)
( s8 x! c6 z0 z8 Z% P$ h  p- i8 B7 \ {
3 F9 g  Y# F) r- v' d' k% @ /* 通过软件来置位和复位 TD1 */
: @8 `- N1 g. h  t  A HRTIM1->sTimerxRegs[HRTIM_TIMERINDEX_TIMER_D].SETx1R = HRTIM_SET1R_SST;+ Q1 c* P% w# C3 @: n" Z$ r
HRTIM1->sTimerxRegs[HRTIM_TIMERINDEX_TIMER_D].RSTx1R = HRTIM_RST1R_SRT;  |# ]/ C7 `9 `  Z4 r* P
}8 }% U7 R1 x1 s
8 h& l7 i5 U7 u; Q) @4 n; K
此处复制的代码片段可从 HRTIM_Snippets HRTIM_BasicPWM 示例中获取。两种情况下都须通过 #define HRTIM_CHECK 语句来选择示例。
6 e2 J3 h* J% D, E- t对于本文档其余部分,时钟和 DLL 初始化部分将不再重复,而代之以对HRTIM_Minimal_Config() 函数的调用。
# |! b5 _, m# i5 I& |$ ]' h3 I* d
" n& C, n& q2 Y. y+ I# g完整版请查看:附件
& C! W0 {2 Z" A6 S" P- D5 T

DM00121475_ZHV1.pdf

下载

820.72 KB, 下载次数: 123

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

举报

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

下载看看

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版