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

HRTIM 指南

[复制链接]
STMCU小助手 发布时间:2022-7-14 18:00
前言( L7 n" O  O0 J- J) A4 Z
在 STM32 微控制器中, STM32F334xx 产品的目标市场是需要高度精确计时数字信号、尤其是数字功率转换应用的细分市场。包括:" M9 |, q1 ^/ c( |+ t% F9 H$ P
• 数字电源;
$ A! f2 q6 [  e. r  `8 x• 照明;
6 }! ^* d- {, g6 `• 不间断电源;0 A3 a8 z/ I- u3 A  ?) O
• 太阳能逆变器;' ]( ^4 I* X+ J
• 无线充电器。
+ S% Q* _' B& T4 B# o; A! q8 tSTM32F334xx 微控制器具有高分辨率定时器 (HRTIM)外设,可产生多达 10 个信号,能够处理用于控制、同步或保护的各种不同输入信号。其模块化架构允许对大部分转换拓扑和多并联转换器进行处理,并可在运行中重新配置它们。
4 O$ t! j7 t: m+ M. A通过 STM32F334 参考手册初步了解时,此外设可能看起来比较复杂,这主要是由于它有大量的控制寄存器组。为了补充这份详尽的说明,我们另外提供了一个文档,其中包括快速上手说明以及示例汇总。+ `2 O" V$ Y& n" |$ m. i1 \# P8 z
在其第一章中,本指南旨在表明 HRTIM 编程很简单。首先说明环境 (就像是有菜谱的同时也需要有厨房)设置,接着给出了若干简单示例,通过实践帮助理解。这些基本案例用来逐步介绍定时器功能,并提供编程指导。不熟悉 HRTIM 的读者应该仔细阅读本章。
: p% H; O& H, Q: \* K第二部分是转换器集合,可在开始新设计时使用,从中选取现成的代码示例,或者从中得到灵感和编程技巧来处理本文档中未描述的拓扑。但是需要注意,本指南不包括转换器设计本$ q) v/ k+ c8 k6 H6 F
身 (控制技术和元件设计),这些内容在专门的应用笔记中有描述。
( c+ l& \: y, l& i; }3 x如有必要,每个示例都提供了简要的转换器说明 (拓扑和到 MCU 的连接)、控制波形和代码段。, O7 y* @) Z8 I* j3 u4 c" l% H) y

$ a, D& z1 C$ Q1 |: T
1 完成环境的准备
6 I/ W/ [& _0 Z. P" X: A- S本章中,我们会确保在开始前所有必需的要素均准备就绪,因此可以仅关注 HRTIM 编程。6 k, m; ?  Q% u/ @/ [( c8 }' \; T" I
下列文件作为参考:
5 T2 Y" U0 l# wSTM32F334x4/x6/x8 数据手册
* J- L* G. Z9 N+ Y/ vSTM32F334x4/x6/x8 勘误表1 V2 J4 w' G! [
RM0364 参考手册 STM32F334xx 高级 ARM® 为基础的的 32 MCU4 `( Q- v4 ^! x/ R
UM1733STM32F334 探索套件入门% M- o( x: M2 G* ?; m
UM1735STM32F3 系列的探索套件 - 采用 STM32F334C8 MCU4 a2 B* @! e( A3 U: }+ w- u) C
UM1736STM32F334 探索软件开发工具入门
6 O+ F4 F+ M- Q' YAN4885:使用 STM32F3348 Discovery 进行高亮度 LED 调光5 S1 v* f: E, h- W8 c
预先阅读 RM0364 中的 HRTIM 章节会有帮助。) }" S$ M% o, A) |5 n& w2 i' E( p
1.1 必备条件* O* ^9 u$ h: ~. b  Q$ i3 R. p6 L
在享受 HRTIM 的优势之前,我们列出其前提条件。希望读者具有基本的 C 编程技巧,关于MCU 和开发环境的少量经验,以及关于开关模式电源的理论背景。控制策略和元件尺寸标注细节不在本应用笔记范围内,它们可在大量文献中获取。2 |& g5 J) F' p0 Q6 v
为简单起见,本指南仅考虑逻辑信号或直接由 MCU 处理的模拟电压,这样就是与电平无关的。不过有些参考文献涉及外部元件接口和电源切换影响 (当定时器或 MCU 具有处理它们的功能时)。
! `* W, v) y' u最后,需要提醒的是,如果 STM32F334 HRTIM 用于具有危险电压的应用中,则应由熟练的技术人员来操作功率应用,以避免电击、烧伤甚或死亡的风险。. \* e: I. X: E8 i* ?( x& l& Z
) D! }% N# Q. ^  a. j
1.2 硬件设置
: @% U/ |% D% r& M8 tSTM32F334 探索板是价格非常实惠的工具,是开始 (以及继续)用 HRTIM 做实验的最佳选择 (订购码:STM32F3348-DISCO)。它包含了编程接口,芯片编程和调试所需的附加材料只是 USB 连接线。所有 I/O 均可在 2.54 mm 间隔的引脚上使用,因此也可连接到穿孔 / 条状板 / 试验电路板。套件还有两个功率转换器:一个用于 LED 驱动的反向降压转换器和一个低电压降压 / 升压转换器,均具有独立的输入和输出。2 C/ @' R9 e: L: G7 {0 D
示波器是必备的,最后它与逻辑分析仪一起,用于配置对超过 4 个通道的监测。为了显示出细微的高分辨率步长,示波器的采样率必须至少超过 1GS/s,具有交错采样选项,可将时间精度提高超过 217ps 定时器分辨率。
: k+ u2 M2 _9 t& G9 h在早期调试阶段,一个或几个函数发生器可帮助仿真来自功率转换器的反馈 (逻辑脉冲或模拟信号)。该发生器必须有触发输入,用于一些特殊用途。如果缺少,也可利用空闲的定时单元,由 HRTIM 本身来仿真反馈信号,这需要多编写一些代码 (或重复利用软件示例)。
- o# r  t0 x/ W4 I" v& g; R5 e) O  U
1.3 工具设置
; n, z0 t$ W# {# I% J必须安装一个编译器 (所有示例均适用 32K)以及支持 ST-LINK-V2 调试接口的 IDE; h- f* i/ C% F9 l& e
下面给出的代码片段与编译器无关:
+ N* u$ g# X8 j* U9 @它们将被简单地复制到面向各种工具链的通用 HRTIM工程模板中。- G3 k* s# ^* c0 w) O! B* _0 T% s
对于下面的工具链,软件源随工作空间给出:* z7 t, N$ N2 n- S7 |
IAR (EWARM 7.10.3)
- F; T9 y: c- B+ @( T4 GKEIL® (MDK-ARM 4.7)
8 B; C! T9 v( t, h& M8 G/ S  J; T, L" h& V" A  `" s( l! R
1.4 STM32F334 HRTIM 设置
! E+ e/ t* A7 C4 q3 i! Y9 q$ ~1.4.1 系统时钟初始化" \+ ]1 M$ D4 K2 N' q  H& j, }
为了实现高分辨率, HRTIM 需要由 PLL 高频输出直接馈送。有两种选择可供使用:
: }# ]/ u5 g0 o& y9 z- V! E% X基于晶体的高速外部(HSE)振荡器,由 PLL 倍频后可提供 144MHz 的频率。这种情况下,此高分辨率为 217ps 144MHz 时钟周期的 1/32);! c7 B8 ^* y# {2 M9 `1 f$ v8 t. K
高速内部(HSI)振荡器,能够提供 128MHz 的频率(8MHz PLL 倍频 16 倍)。这种情况下,高分辨率步长为 244ps 128MHz 时钟周期的 1/32)。该选项适用于有限的温度范围,相关情况参见 STM32F334 数据手册。
$ B: _: S& M  u  `8 c+ e) c) oHAL 库初始化 (HAL_Init)后,立即在主程序中使用 SystemClock_Config() 函数,完成时钟初始化。/ Q  l# U" p5 D) [3 N7 B: J$ Q" k! l
CPU 时钟也来源于 PLL (除以 2 之后),因此它可达到 PLL 输出频率的一半 (使用 HSE* f" L$ c: [/ x/ c+ S0 |% \- h
时为 72MH,使用 HSI 时为 64MHz)。它还可被降低,以减少 MCU 功耗,同时保持高分辨& d: A+ n7 M9 y+ c: w. Q
率功能。2 v0 O9 I0 G3 @, P' }( [; f/ F& B
可最后在主程序中执行 SystemCoreClockUpdate 函数来验证 CPU 工作频率:该频率在1 J; {9 O# e' d# Y
SystemCoreClock 变量中更新。* ?; Z* d$ |" O0 _9 H" u$ L
1.4.2 HRTIM 初始化
) E" @3 y" y6 U7 W% ^: u8 z本章逐步地详细介绍如何初始化 HRTIM,包括各个函数调用。实际上,这在HAL_HRTIM_Init HAL_HRTIM_MspInit 程序中完成。
/ m$ r. z; X# l/ r/ P" V7 |' n$ E# Z
HRTIM 时钟初始化" |4 k  ^+ N/ x/ F( Y& |
MCU 上电并开始运行, HRTIM 在编程之前就必须进行时钟控制。这利用复位和时钟控制RCC)来实现,包括 2 个步骤:# K' x& `& H& ~, {3 z
1. ) A) ]8 D8 L& A- o/ Z$ y- M
RCC_CFGR3 寄存器中的 HRTIM 选择高速 PLL 输出:% D' [) i, @6 S, s3 H* k3 v
__HAL_RCC_HRTIM1_CONFIG(RCC_HRTIM1CLK_PLLCLK);0 `( c6 s' V, Y4 n# {6 `7 j
2. 为在 APB2 总线上映射的寄存器进行时钟使能。
' J4 N1 M1 T4 O8 U/ q" q- h* N__HRTIM1_CLK_ENABLE();
) u' ]* u- O& Y9 b2 c' ]4 `" _& N! k2 O2 B$ c% @
1.4.3 HRTIM DLL 初始化1 [2 j, N6 v& q7 Y2 e
HRTIM 的延迟锁相环 (DLL)可提供细粒度计时,将高频率 (144 128MHz)时钟周期分为 32 个均匀分布的间隔。
  q, G* \, I5 l# C) \8 P, B0 e; E在使用高分辨率前,此 DLL 必须至少校准一次。如果电压或温度条件发生改变,在 HRTIM操作过程中可透明地重新进行该校准。也可由硬件使能周期校准。
+ h) A' B4 T2 P1 |8 t1 j* f下面的代码段显示如何完成校准。当 DLLRDY 标志被置位后,高分辨率可用。5 y$ k- u  b) @0 e' |/ {
/* DLL 校准:使能了周期校准,周期设置为 14µs */HRTIM1->sCommonRegs.DLLCR = HRTIM_CALIBRATIONRATE_14| HRTIM_DLLCR_CALEN;/* 检查 DLL 校准完成的标志位 */5 O9 N/ w$ G# D+ E  `9 r
while(HRTIM1->sCommonRegs.ISR & HRTIM_IT_DLLRDY == RESET);$ B# e! O' r. H0 R2 z5 v7 b' N1 W
建议使能周期校准,默认情况下采用最小校准周期 (设为 14µs)。
& m4 s2 `# @7 a注: 如果 DLL 未锁定 (通常是由于 HSE 振荡器未正常配置),下面的代码将引起执行延迟。
- f. H% Z" y! o/ t4 O5 F$ |& YHAL 库包含一个函数来实现校准,它具有超时验证,如有必要可重定向至差错处理程序。基HAL 的软件示例中使用了此函数。, w* q& A! s( U& U" g& |! f  J8 a
1.4.4 HRTIM I/O 初始化+ L) a  u( q  c# B7 j% c
HRTIM 输入和输出映射到标准 I/O 端口,必须像其他 I/O 外设一样进行编程。 HRTIM 端口通道影射为:) W% F7 [  L+ a$ s
AF13 通道 (面向 HRTIM I/O 端口,位于端口 A B);# n1 T/ B5 _4 x* U+ t! o
AF3 通道 (面向 HRTIM I/O 端口,位于端口 C);
3 Q. }+ G2 c: K- s! wHRTIM I/O 初始化必须在两个阶段中完成。在 HRTIM 寄存器之前,首先在HAL_HRTIM_MspInit 函数中初始化 HRTIM 输入。5 B: M( K" i6 }
HRTIM 输出必须在 HRTIM 控制寄存器编程 (示例中它在 GPIO_HRTIM_outputs_Config 数中完成)后且当计数器使能时进行初始化。这是为了保证来自 GPIO 电路的控制信号传输HRTIM 定时器之前,在 HRTIM 中能够正确定义输出状态。
1 c( j) p& b% u' J# F. d, h/ C* c4 m: C3 u  Z+ V
1.4.5 其他外设初始化
7 S- r- n' R1 X8 dHRTIM 与多种 MCU 外设交互作用,如下所列。进行 IHRTIM 操作时不强制要求对它们全部
+ R- c$ T  \/ J# V: v& S进行初始化。下列外设的初始化代码在后面所述的一些示例中提供。
# @, ]" W/ O' H) d* y
2 s* o: S0 ]4 D0 k# P+ W* E; v
嵌套向量中断控制器 (Nested Vectored Interrupt ControllerNVIC. t2 D5 V( M, T2 p" j! d
HRTIM 中断请求分组为 7 种中断向量。所有错误均分组到一个特殊向量中,可设置为非常高的优先级。
0 H2 ?3 L8 ]- x. N- p; RHRTIM 相关的 NVIC 部分在 HAL_HRTIM_MspInit 函数中进行编程。* _; L- ~  N3 k5 d! o9 B  K) Q

- N9 z5 E. [% u6 {4 n3 @" j5 nDMA 控制器1 Z  F/ [! @6 }2 f
大部分中断请求可用作 DMA 请求,分组到 6 DMA 通道 (每个定时单元一个,包括主定时器)
# b# R6 i& j6 w" [0 d1 w. q* X当启动定时器时,基于 DMA HRTIM 操作使能,利用专门的开始 / 停止函数如HAL_HRTIM_WaveformCounterStart_DMA
1 S' t; y. N) w
7 n: i1 J- O. N6 I% q3 L2 Y比较器7 B4 q, l, i+ E" l6 V7 }
3 个内置比较器可用来调节模拟信号:它们必须在输出到达 HRTIM 前进行初始化。' r# ~% t( s6 R. Z
初始化包括模拟输入编程、时钟使能和极性。
$ L9 O& E: L0 R7 E: g4 h) X  g5 G. n; }. a. ?5 e
运算放大器  O+ n( c- ?8 {
内置运算放大器能够放大进入 ADC 或比较器的低电压信号,也可直接充当比较器 (相比普通比较器,它速率较低)。它必须与比较器一样进行初始化。  x0 \+ {8 j% n+ }; J7 e

( ^2 t/ I. x( j! X7 b2 \
ADC 转换器; P! {  P4 A0 ]- m4 U7 h1 V
HRTIM 能够触发两个 ADC 转换器中的任意一个。应初始化它们以接收外部触发器信号 (在其常规和 / 或注入转换序列上)。
* i6 [9 O: }0 `6 p: i9 w$ d/ b7 [- u! YADC 的另一个可能用途在于使用模拟看门狗在 HRTIM 上触发外部事件 (用于输出置位 / 位或计数器复位)。# Q& j1 q% c5 ?( |4 w

3 `* V; z5 N$ j- ~& m
DAC 转换器6 p+ [2 {7 f. {- _+ H
DAC 转换器通常用于定义比较器阈值。它们可利用 HRTIM DAC 触发器,与 HRTIM 操作同步更新。2 U1 c7 D+ c* {4 o

6 @8 C- E5 T( }
通用定时器+ i: x) B( I" g, z+ I
HRTIM 也可连接到其他片上定时器,有以下用途:
6 P5 l1 H# P' q" V* D4 f' L- t作为外部事件;' c0 R" N4 j. U
作为突发模式触发器或时钟;
8 F. {5 M1 U( j5 ~/ a0 v% a3 W用于 HRTIM 寄存器更新触发。
$ j6 w9 n* x6 y1 O& F5 H. L! I' o; I) Y1 F/ t* y* g+ O3 c0 n' U
1.4.6 HRTIM 功能检查
8 S( P/ e; v: J% M2 y& |% @- h/ l3 V当所有初始化完成,可验证 HRTIM 能够利用下面的简单代码来运行。此示例代码HRTIM_BasicPWM 示例)使能了 HRTIM TD1 输出并通过软件对其进行切换。% a4 q* G% S) M/ R8 {  u
/* 使用 PLLx2 时钟来实现 HRTIM */
& l7 k( Z" ~# E$ j; |7 m__HAL_RCC_HRTIM1_CONFIG(RCC_HRTIM1CLK_PLLCLK);DocID026506 Rev 1 [English Rev 1] 9/331 [- ~' r1 S8 X
/* 使能 HRTIM 时钟 */
: N+ p; j5 Y+ J__HRTIM1_CLK_ENABLE();$ X- B, A1 _: O% L
/* DLL 校准:使能了周期校准,周期设置为 14µs */7 W( Q& K1 A( a+ L( b: u
HRTIM1->sCommonRegs.DLLCR = HRTIM_CALIBRATIONRATE_14| HRTIM_DLLCR_CALEN;
  C3 L( j1 J, R1 x/* 检查 DLL 校准完成的标志位 */# V: J; k+ }- U, C" c- X  ^: ~
while(HRTIM1->sCommonRegs.ISR & HRTIM_IT_DLLRDY == RESET);
! e2 s: t# R" _5 e2 g. }HRTIM1->sCommonRegs.OENR = HRTIM_OENR_TD1OEN; /* 使能 TD1 输出 */
/ ^0 ?+ @( W2 s; v4 k( qGPIO_HRTIM_outputs_Config(); /* 初始化 HRTIM 输出 */' {3 f" G* I) t4 R% {
while(1)
2 }1 Q/ [+ D3 E: h {
* l* {; l8 q6 ^2 w /* 通过软件来置位和复位 TD1 */$ A# _  G+ {& K5 ~  S
HRTIM1->sTimerxRegs[HRTIM_TIMERINDEX_TIMER_D].SETx1R = HRTIM_SET1R_SST;. I! e! b- \; S# S# P$ h) X
HRTIM1->sTimerxRegs[HRTIM_TIMERINDEX_TIMER_D].RSTx1R = HRTIM_RST1R_SRT;
. S0 p5 V- H4 S& ~! h }! s- l6 K, Q' d) ?9 z! m% l
, n' ^0 P: Z: I7 G; r1 L1 T
此处复制的代码片段可从 HRTIM_Snippets HRTIM_BasicPWM 示例中获取。两种情况下都须通过 #define HRTIM_CHECK 语句来选择示例。% r$ \  U2 i. O6 V
对于本文档其余部分,时钟和 DLL 初始化部分将不再重复,而代之以对HRTIM_Minimal_Config() 函数的调用。
/ P! {& D! v3 T; ~$ E
4 ~! a- d9 b7 Y4 O' F完整版请查看:附件8 K! y9 h1 f9 @) w+ \8 \

DM00121475_ZHV1.pdf

下载

820.72 KB, 下载次数: 128

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