请选择 进入手机版 | 继续访问电脑版

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

HRTIM 指南

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

4 m- A; b( Q; F, P4 @+ H
1.2 硬件设置) q  M( X5 f7 h' _3 {2 h+ n) ]$ Y
STM32F334 探索板是价格非常实惠的工具,是开始 (以及继续)用 HRTIM 做实验的最佳选择 (订购码:STM32F3348-DISCO)。它包含了编程接口,芯片编程和调试所需的附加材料只是 USB 连接线。所有 I/O 均可在 2.54 mm 间隔的引脚上使用,因此也可连接到穿孔 / 条状板 / 试验电路板。套件还有两个功率转换器:一个用于 LED 驱动的反向降压转换器和一个低电压降压 / 升压转换器,均具有独立的输入和输出。
% S2 |. Q$ F. C示波器是必备的,最后它与逻辑分析仪一起,用于配置对超过 4 个通道的监测。为了显示出细微的高分辨率步长,示波器的采样率必须至少超过 1GS/s,具有交错采样选项,可将时间精度提高超过 217ps 定时器分辨率。7 p7 X( L% d0 W( c7 t
在早期调试阶段,一个或几个函数发生器可帮助仿真来自功率转换器的反馈 (逻辑脉冲或模拟信号)。该发生器必须有触发输入,用于一些特殊用途。如果缺少,也可利用空闲的定时单元,由 HRTIM 本身来仿真反馈信号,这需要多编写一些代码 (或重复利用软件示例)。
6 o7 M, m- r; i. q3 i9 C: [; H, {% h/ b: b
1.3 工具设置
/ t8 R4 ~) ]% S" }/ a' u必须安装一个编译器 (所有示例均适用 32K)以及支持 ST-LINK-V2 调试接口的 IDE1 m0 s0 C0 v& m8 [
下面给出的代码片段与编译器无关:9 n: Z; x, Z2 J; i
它们将被简单地复制到面向各种工具链的通用 HRTIM工程模板中。
$ [" l4 A1 X: b' s+ g对于下面的工具链,软件源随工作空间给出:, y" J; s( J3 \6 v4 R% c! i
IAR (EWARM 7.10.3) 7 d. s/ H& _  [% J# {% B  }8 K
KEIL® (MDK-ARM 4.7)
3 H8 ?% |, _: ]+ g1 k
( K. G) |6 V3 V+ L! ^/ z9 ?: ^
1.4 STM32F334 HRTIM 设置0 t" [& V/ m; U7 Q+ s
1.4.1 系统时钟初始化
  d& X2 |: K% L# x. L$ c) Q为了实现高分辨率, HRTIM 需要由 PLL 高频输出直接馈送。有两种选择可供使用:
( x/ T; h, K% Z1 r! Y基于晶体的高速外部(HSE)振荡器,由 PLL 倍频后可提供 144MHz 的频率。这种情况下,此高分辨率为 217ps 144MHz 时钟周期的 1/32);* @' h4 [- C! f# _, ]6 Z3 e1 D
高速内部(HSI)振荡器,能够提供 128MHz 的频率(8MHz PLL 倍频 16 倍)。这种情况下,高分辨率步长为 244ps 128MHz 时钟周期的 1/32)。该选项适用于有限的温度范围,相关情况参见 STM32F334 数据手册。$ n: J5 B1 D: f  o" L
HAL 库初始化 (HAL_Init)后,立即在主程序中使用 SystemClock_Config() 函数,完成时钟初始化。, r( \: T9 l# [8 y) I
CPU 时钟也来源于 PLL (除以 2 之后),因此它可达到 PLL 输出频率的一半 (使用 HSE+ S/ V. f1 K5 P! B: h
时为 72MH,使用 HSI 时为 64MHz)。它还可被降低,以减少 MCU 功耗,同时保持高分辨
3 v5 b2 p) m8 _8 C7 c( L率功能。: _7 R' r; ~( h" |. Z  x8 Y9 [
可最后在主程序中执行 SystemCoreClockUpdate 函数来验证 CPU 工作频率:该频率在0 I3 P8 X" E6 _$ h
SystemCoreClock 变量中更新。
7 ]1 L9 n; p' O! D4 s" A1.4.2 HRTIM 初始化
7 |/ k$ y5 F  D7 ]本章逐步地详细介绍如何初始化 HRTIM,包括各个函数调用。实际上,这在HAL_HRTIM_Init HAL_HRTIM_MspInit 程序中完成。
/ ?% g0 w; L  A( [# m# w$ v5 A" E' j* u+ B, I
HRTIM 时钟初始化% f5 d9 a8 z# E( `: l5 v
MCU 上电并开始运行, HRTIM 在编程之前就必须进行时钟控制。这利用复位和时钟控制RCC)来实现,包括 2 个步骤:) m4 a% z) l* d4 C- N
1. 6 m/ U; a- ?$ [3 C# w9 _
RCC_CFGR3 寄存器中的 HRTIM 选择高速 PLL 输出:
6 l% `+ j: a% A( T) t__HAL_RCC_HRTIM1_CONFIG(RCC_HRTIM1CLK_PLLCLK);  x# n8 @  x% T5 E9 n4 Q; }
2. 为在 APB2 总线上映射的寄存器进行时钟使能。
# s9 ?9 N0 c( W0 h) f__HRTIM1_CLK_ENABLE();4 y& {7 g1 i  ?# L: V) L2 m
5 s2 M) h. o0 n- N7 j
1.4.3 HRTIM DLL 初始化: s" k( X1 e6 |; X0 g1 ?' k
HRTIM 的延迟锁相环 (DLL)可提供细粒度计时,将高频率 (144 128MHz)时钟周期分为 32 个均匀分布的间隔。
% N2 s; Y# |& z5 g, T在使用高分辨率前,此 DLL 必须至少校准一次。如果电压或温度条件发生改变,在 HRTIM操作过程中可透明地重新进行该校准。也可由硬件使能周期校准。2 [5 o. V8 T3 K  u* O3 Z5 n5 b
下面的代码段显示如何完成校准。当 DLLRDY 标志被置位后,高分辨率可用。
/ d5 e. e$ K% K7 g/* DLL 校准:使能了周期校准,周期设置为 14µs */HRTIM1->sCommonRegs.DLLCR = HRTIM_CALIBRATIONRATE_14| HRTIM_DLLCR_CALEN;/* 检查 DLL 校准完成的标志位 */* |& {: s- O8 m1 J5 \/ D
while(HRTIM1->sCommonRegs.ISR & HRTIM_IT_DLLRDY == RESET);  a' M0 u& [- {4 Q$ W% Q) C
建议使能周期校准,默认情况下采用最小校准周期 (设为 14µs)。
2 N! M8 P# W* H2 U& ~注: 如果 DLL 未锁定 (通常是由于 HSE 振荡器未正常配置),下面的代码将引起执行延迟。$ P% s+ \1 u7 A. x
HAL 库包含一个函数来实现校准,它具有超时验证,如有必要可重定向至差错处理程序。基HAL 的软件示例中使用了此函数。8 }& A+ T1 a: n
1.4.4 HRTIM I/O 初始化
  I) p7 e3 I+ I7 jHRTIM 输入和输出映射到标准 I/O 端口,必须像其他 I/O 外设一样进行编程。 HRTIM 端口通道影射为:
0 f9 j0 C- G2 w6 S( d' q; w  cAF13 通道 (面向 HRTIM I/O 端口,位于端口 A B);% C& g3 O  {" Q' e, X# |$ I6 z: h
AF3 通道 (面向 HRTIM I/O 端口,位于端口 C);
6 k. E+ l* [  WHRTIM I/O 初始化必须在两个阶段中完成。在 HRTIM 寄存器之前,首先在HAL_HRTIM_MspInit 函数中初始化 HRTIM 输入。
) E7 m- W, H! o2 QHRTIM 输出必须在 HRTIM 控制寄存器编程 (示例中它在 GPIO_HRTIM_outputs_Config 数中完成)后且当计数器使能时进行初始化。这是为了保证来自 GPIO 电路的控制信号传输HRTIM 定时器之前,在 HRTIM 中能够正确定义输出状态。( J( O" q' c) _% Z
8 l6 j6 x# y; p8 C3 j" m! o: Y& S' L
1.4.5 其他外设初始化2 \7 w3 ?) D5 |
HRTIM 与多种 MCU 外设交互作用,如下所列。进行 IHRTIM 操作时不强制要求对它们全部5 M( o# s8 }# n& k
进行初始化。下列外设的初始化代码在后面所述的一些示例中提供。% K* Y+ K7 \" u& t3 b8 Q9 o
9 s' [  ^: Y# `
嵌套向量中断控制器 (Nested Vectored Interrupt ControllerNVIC6 H' v) r& v  s8 j& W+ n0 n. V$ y
HRTIM 中断请求分组为 7 种中断向量。所有错误均分组到一个特殊向量中,可设置为非常高的优先级。7 L- ~7 G5 q) }
HRTIM 相关的 NVIC 部分在 HAL_HRTIM_MspInit 函数中进行编程。" h" u- Q) o3 Y- u- h7 h8 u

# B1 p4 c2 _# l( JDMA 控制器
0 {9 w* U) o0 c& ^大部分中断请求可用作 DMA 请求,分组到 6 DMA 通道 (每个定时单元一个,包括主定时器)
% v% M% {% N5 B1 r当启动定时器时,基于 DMA HRTIM 操作使能,利用专门的开始 / 停止函数如HAL_HRTIM_WaveformCounterStart_DMA* h0 W  a# F$ g0 A5 J
& O( I$ e2 X3 k) b2 l; C
比较器/ I5 t" O" e  x7 C; Y
3 个内置比较器可用来调节模拟信号:它们必须在输出到达 HRTIM 前进行初始化。$ m% D4 W* q9 s8 l4 v
初始化包括模拟输入编程、时钟使能和极性。6 F! X8 u& I& u3 I4 |! k
1 ^$ F) o! U4 j6 S
运算放大器
& R: E2 P/ F% }+ U$ z! R( T1 E内置运算放大器能够放大进入 ADC 或比较器的低电压信号,也可直接充当比较器 (相比普通比较器,它速率较低)。它必须与比较器一样进行初始化。# c5 ~6 x1 ~- t

6 T* E7 i* E# w% K' T2 Q2 s! T3 v
ADC 转换器- V/ }2 H% Y) c" H8 t1 t
HRTIM 能够触发两个 ADC 转换器中的任意一个。应初始化它们以接收外部触发器信号 (在其常规和 / 或注入转换序列上)。
1 u  `, o0 @+ G# P% j9 y7 e  J7 j# ZADC 的另一个可能用途在于使用模拟看门狗在 HRTIM 上触发外部事件 (用于输出置位 / 位或计数器复位)。
  I6 {; }) z4 S4 B5 q7 \4 y, L. S* D4 s* K) o  T7 q3 b% u
DAC 转换器
, x- c. I: @$ G; oDAC 转换器通常用于定义比较器阈值。它们可利用 HRTIM DAC 触发器,与 HRTIM 操作同步更新。
) v* `/ Z+ O& j: G1 r
5 H9 i' I$ g: D( Y
通用定时器
$ Y1 n% F, X/ W) x9 \! lHRTIM 也可连接到其他片上定时器,有以下用途:
3 S5 y8 U' c7 ^作为外部事件;( a" t. `0 r. U# j
作为突发模式触发器或时钟;
5 d9 ^- e9 j8 p, R" E/ k( ?用于 HRTIM 寄存器更新触发。
3 e0 M1 f' v; U, f9 K9 ~6 R* r
  |: q" d2 ?1 a
1.4.6 HRTIM 功能检查
2 m6 R/ V" E: @. R% x6 {当所有初始化完成,可验证 HRTIM 能够利用下面的简单代码来运行。此示例代码HRTIM_BasicPWM 示例)使能了 HRTIM TD1 输出并通过软件对其进行切换。
+ {4 I0 @$ L" W' O/* 使用 PLLx2 时钟来实现 HRTIM */2 q/ I# l: B* P
__HAL_RCC_HRTIM1_CONFIG(RCC_HRTIM1CLK_PLLCLK);DocID026506 Rev 1 [English Rev 1] 9/33, h6 J# w% g8 D6 G% D
/* 使能 HRTIM 时钟 */
+ ?2 }: B1 `+ ~7 x3 i: j  R__HRTIM1_CLK_ENABLE();1 a/ O( L' V- Q; l
/* DLL 校准:使能了周期校准,周期设置为 14µs */& P$ w; J1 |2 u; w- s
HRTIM1->sCommonRegs.DLLCR = HRTIM_CALIBRATIONRATE_14| HRTIM_DLLCR_CALEN;
$ v: F, h6 }' y7 |# A/* 检查 DLL 校准完成的标志位 */
; P" [6 g1 r: g% d, W% Kwhile(HRTIM1->sCommonRegs.ISR & HRTIM_IT_DLLRDY == RESET);4 K- T5 |& y* Z4 D2 H( u8 x1 S/ F
HRTIM1->sCommonRegs.OENR = HRTIM_OENR_TD1OEN; /* 使能 TD1 输出 */
- N0 Q* N4 d5 e9 E4 g$ VGPIO_HRTIM_outputs_Config(); /* 初始化 HRTIM 输出 */
0 |% T1 N! G( H2 z3 |while(1)' P' z  w% Z! i+ H
{, Z5 Q6 [$ W. k2 U& F! N
/* 通过软件来置位和复位 TD1 */
. n. g! w* m1 w8 T HRTIM1->sTimerxRegs[HRTIM_TIMERINDEX_TIMER_D].SETx1R = HRTIM_SET1R_SST;
& f  z  \3 `! a! n' v7 u$ z9 n HRTIM1->sTimerxRegs[HRTIM_TIMERINDEX_TIMER_D].RSTx1R = HRTIM_RST1R_SRT;
7 h! w* ^/ s1 x& e }
6 L, a+ i& X$ m' K  ?; [/ o" Q) d# z+ s# ?; B" g( x1 E  [
此处复制的代码片段可从 HRTIM_Snippets HRTIM_BasicPWM 示例中获取。两种情况下都须通过 #define HRTIM_CHECK 语句来选择示例。
5 j. @, f) C3 J# Y5 }! _  ]对于本文档其余部分,时钟和 DLL 初始化部分将不再重复,而代之以对HRTIM_Minimal_Config() 函数的调用。: ]" J5 s+ D7 z  j* s
. N: s- K3 d& u2 [) |0 r; ^5 I
完整版请查看:附件
  E" C& l. v" g# I9 a$ W& r

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 手机版