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

HRTIM 指南

[复制链接]
STMCU小助手 发布时间:2022-7-14 18:00
前言/ _1 L' V3 E' C, }- e$ u9 W9 r. N
在 STM32 微控制器中, STM32F334xx 产品的目标市场是需要高度精确计时数字信号、尤其是数字功率转换应用的细分市场。包括:  R; |/ E5 j- g: L! T
• 数字电源;
& r: V3 \/ @$ q/ v• 照明;2 t* b. h# M5 R) y. f
• 不间断电源;
( d  Q: R( i9 C; s7 l  C1 Q• 太阳能逆变器;3 ~) [6 w) K3 t6 C) [
• 无线充电器。& o6 g+ W% F. E6 U$ Z: F# O
STM32F334xx 微控制器具有高分辨率定时器 (HRTIM)外设,可产生多达 10 个信号,能够处理用于控制、同步或保护的各种不同输入信号。其模块化架构允许对大部分转换拓扑和多并联转换器进行处理,并可在运行中重新配置它们。" ~9 S! f" P7 b2 e" j8 b2 k7 Y
通过 STM32F334 参考手册初步了解时,此外设可能看起来比较复杂,这主要是由于它有大量的控制寄存器组。为了补充这份详尽的说明,我们另外提供了一个文档,其中包括快速上手说明以及示例汇总。
/ J# M' b' T0 k% D) b/ f1 o3 A3 v0 f在其第一章中,本指南旨在表明 HRTIM 编程很简单。首先说明环境 (就像是有菜谱的同时也需要有厨房)设置,接着给出了若干简单示例,通过实践帮助理解。这些基本案例用来逐步介绍定时器功能,并提供编程指导。不熟悉 HRTIM 的读者应该仔细阅读本章。
& x; e" h! M" ~* b' j/ _5 `第二部分是转换器集合,可在开始新设计时使用,从中选取现成的代码示例,或者从中得到灵感和编程技巧来处理本文档中未描述的拓扑。但是需要注意,本指南不包括转换器设计本
- S9 [! x. U6 ]. N4 g; B& ], H身 (控制技术和元件设计),这些内容在专门的应用笔记中有描述。
- N, o. C, ^" f9 z' `如有必要,每个示例都提供了简要的转换器说明 (拓扑和到 MCU 的连接)、控制波形和代码段。
9 D! k+ M) N" p! l/ f8 w& F6 ^, x. P) J
1 完成环境的准备
9 b" f6 j3 F# I& a本章中,我们会确保在开始前所有必需的要素均准备就绪,因此可以仅关注 HRTIM 编程。6 J2 L% u& p) o1 `, b  g
下列文件作为参考:
8 ?! a; Z$ M& N/ Q. S* L: BSTM32F334x4/x6/x8 数据手册1 t6 b, L5 a* c  l
STM32F334x4/x6/x8 勘误表2 v: i8 e9 v  T' ?
RM0364 参考手册 STM32F334xx 高级 ARM® 为基础的的 32 MCU
/ Z9 h6 M; I* W  [. ZUM1733STM32F334 探索套件入门6 N3 a8 O' r# j  s. _7 R5 }0 T4 _
UM1735STM32F3 系列的探索套件 - 采用 STM32F334C8 MCU- I- n' X& l: N# F; V1 r
UM1736STM32F334 探索软件开发工具入门3 z" d- m% O. o( R5 H& O- a
AN4885:使用 STM32F3348 Discovery 进行高亮度 LED 调光( z( s" t) V5 L: R( t! i( _; s* o) h1 Q
预先阅读 RM0364 中的 HRTIM 章节会有帮助。
" O8 c3 _8 _- j
1.1 必备条件& o+ w7 Q  t. E3 }( C! O# t
在享受 HRTIM 的优势之前,我们列出其前提条件。希望读者具有基本的 C 编程技巧,关于MCU 和开发环境的少量经验,以及关于开关模式电源的理论背景。控制策略和元件尺寸标注细节不在本应用笔记范围内,它们可在大量文献中获取。7 D  \  q4 w& ?. k
为简单起见,本指南仅考虑逻辑信号或直接由 MCU 处理的模拟电压,这样就是与电平无关的。不过有些参考文献涉及外部元件接口和电源切换影响 (当定时器或 MCU 具有处理它们的功能时)。) Y) l; b0 B$ l& T
最后,需要提醒的是,如果 STM32F334 HRTIM 用于具有危险电压的应用中,则应由熟练的技术人员来操作功率应用,以避免电击、烧伤甚或死亡的风险。, |2 w- w. p5 i/ G. V1 {
! G. b* {4 @1 a: M0 n1 L8 O. z
1.2 硬件设置
( [0 u! B$ [& o; ~( q( mSTM32F334 探索板是价格非常实惠的工具,是开始 (以及继续)用 HRTIM 做实验的最佳选择 (订购码:STM32F3348-DISCO)。它包含了编程接口,芯片编程和调试所需的附加材料只是 USB 连接线。所有 I/O 均可在 2.54 mm 间隔的引脚上使用,因此也可连接到穿孔 / 条状板 / 试验电路板。套件还有两个功率转换器:一个用于 LED 驱动的反向降压转换器和一个低电压降压 / 升压转换器,均具有独立的输入和输出。
4 B4 c" |& m! o2 ]" g示波器是必备的,最后它与逻辑分析仪一起,用于配置对超过 4 个通道的监测。为了显示出细微的高分辨率步长,示波器的采样率必须至少超过 1GS/s,具有交错采样选项,可将时间精度提高超过 217ps 定时器分辨率。
* B3 Z6 E+ j, H4 |  }, f" ~, i; h在早期调试阶段,一个或几个函数发生器可帮助仿真来自功率转换器的反馈 (逻辑脉冲或模拟信号)。该发生器必须有触发输入,用于一些特殊用途。如果缺少,也可利用空闲的定时单元,由 HRTIM 本身来仿真反馈信号,这需要多编写一些代码 (或重复利用软件示例)。+ \8 ^" o. T* }0 Y* k7 V
4 U1 P/ J1 D  {% O  F$ z0 d
1.3 工具设置
3 E; @  M( F6 b必须安装一个编译器 (所有示例均适用 32K)以及支持 ST-LINK-V2 调试接口的 IDE
" K' H; Q: ^4 }, `下面给出的代码片段与编译器无关:1 C$ [( u9 {( O) s2 M! Y: e6 a
它们将被简单地复制到面向各种工具链的通用 HRTIM工程模板中。, W- C5 V5 |" O2 M6 P
对于下面的工具链,软件源随工作空间给出:
% q0 x9 q; W- W% |IAR (EWARM 7.10.3) 0 r; I' I/ b& G
KEIL® (MDK-ARM 4.7)+ y# Q: m2 ]9 {2 s2 N# t

" x/ H% V" s, ]9 x1 ~6 @  m, ]
1.4 STM32F334 HRTIM 设置! [  _0 I* v: |* @. _/ h
1.4.1 系统时钟初始化
6 K5 X& s$ @3 |0 v& G; `为了实现高分辨率, HRTIM 需要由 PLL 高频输出直接馈送。有两种选择可供使用:% \5 h% T& o( u/ y, n: s' ?
基于晶体的高速外部(HSE)振荡器,由 PLL 倍频后可提供 144MHz 的频率。这种情况下,此高分辨率为 217ps 144MHz 时钟周期的 1/32);
( z( K* G0 R6 m6 z4 V% M高速内部(HSI)振荡器,能够提供 128MHz 的频率(8MHz PLL 倍频 16 倍)。这种情况下,高分辨率步长为 244ps 128MHz 时钟周期的 1/32)。该选项适用于有限的温度范围,相关情况参见 STM32F334 数据手册。/ H' ?8 L; h. C/ m* l' w
HAL 库初始化 (HAL_Init)后,立即在主程序中使用 SystemClock_Config() 函数,完成时钟初始化。2 G/ M+ t# ]. T  J$ ^: g8 M! M- X
CPU 时钟也来源于 PLL (除以 2 之后),因此它可达到 PLL 输出频率的一半 (使用 HSE) b% K2 t: h% q& F
时为 72MH,使用 HSI 时为 64MHz)。它还可被降低,以减少 MCU 功耗,同时保持高分辨
, ?& z- f$ {; I+ E率功能。1 e. W) a! y7 G, `6 I* L
可最后在主程序中执行 SystemCoreClockUpdate 函数来验证 CPU 工作频率:该频率在( Y6 L7 c0 C  `! Y5 i$ @
SystemCoreClock 变量中更新。
# d# l+ G. @/ P9 X: G0 J1.4.2 HRTIM 初始化' J2 g" o* Q2 e* P
本章逐步地详细介绍如何初始化 HRTIM,包括各个函数调用。实际上,这在HAL_HRTIM_Init HAL_HRTIM_MspInit 程序中完成。
$ L8 Q% U0 v" U' B+ m9 I
  s$ U) ?0 j# r7 l: L+ h
HRTIM 时钟初始化
# ]8 j6 M: K0 L  E. C$ eMCU 上电并开始运行, HRTIM 在编程之前就必须进行时钟控制。这利用复位和时钟控制RCC)来实现,包括 2 个步骤:
3 m  B' Y% E. b( P1.
4 [0 ]* ^* [! f! w# sRCC_CFGR3 寄存器中的 HRTIM 选择高速 PLL 输出:  u9 Y8 y7 e9 [) v) E
__HAL_RCC_HRTIM1_CONFIG(RCC_HRTIM1CLK_PLLCLK);# s, x( w( K+ p6 B; r9 ]- b
2. 为在 APB2 总线上映射的寄存器进行时钟使能。
  Z4 D6 X1 b' g6 r7 r__HRTIM1_CLK_ENABLE();
* @! e2 ]' U# X5 h& b2 r( [% ]
* n7 F% B0 F( p* c/ J
1.4.3 HRTIM DLL 初始化
) F- v, w9 S% k- D: SHRTIM 的延迟锁相环 (DLL)可提供细粒度计时,将高频率 (144 128MHz)时钟周期分为 32 个均匀分布的间隔。. ?7 H: ^; }+ c5 k$ H' s3 r7 m
在使用高分辨率前,此 DLL 必须至少校准一次。如果电压或温度条件发生改变,在 HRTIM操作过程中可透明地重新进行该校准。也可由硬件使能周期校准。
5 [, u* A) X0 f下面的代码段显示如何完成校准。当 DLLRDY 标志被置位后,高分辨率可用。% N: s- Q) }4 b& i/ T/ L& f- Z
/* DLL 校准:使能了周期校准,周期设置为 14µs */HRTIM1->sCommonRegs.DLLCR = HRTIM_CALIBRATIONRATE_14| HRTIM_DLLCR_CALEN;/* 检查 DLL 校准完成的标志位 */
; P  B$ G% e: W+ t3 f+ Q6 G while(HRTIM1->sCommonRegs.ISR & HRTIM_IT_DLLRDY == RESET);
8 C  {4 r. `: @! q5 Q7 z% A建议使能周期校准,默认情况下采用最小校准周期 (设为 14µs)。
% z# m4 L% `1 r# O& l3 b4 ]注: 如果 DLL 未锁定 (通常是由于 HSE 振荡器未正常配置),下面的代码将引起执行延迟。
9 j2 a, ]& U  ?" G5 L+ _6 W$ SHAL 库包含一个函数来实现校准,它具有超时验证,如有必要可重定向至差错处理程序。基HAL 的软件示例中使用了此函数。* c; l& p* U1 P3 V' b8 W$ x4 x# u
1.4.4 HRTIM I/O 初始化# O1 R7 O( U0 M! k# w. B
HRTIM 输入和输出映射到标准 I/O 端口,必须像其他 I/O 外设一样进行编程。 HRTIM 端口通道影射为:; ~0 H9 W1 _5 l) {7 ^
AF13 通道 (面向 HRTIM I/O 端口,位于端口 A B);; q! t$ v- y- o9 o5 u- W2 g
AF3 通道 (面向 HRTIM I/O 端口,位于端口 C);2 H% K  [  l. d
HRTIM I/O 初始化必须在两个阶段中完成。在 HRTIM 寄存器之前,首先在HAL_HRTIM_MspInit 函数中初始化 HRTIM 输入。
+ m5 B4 {- f- u- R2 w6 p4 VHRTIM 输出必须在 HRTIM 控制寄存器编程 (示例中它在 GPIO_HRTIM_outputs_Config 数中完成)后且当计数器使能时进行初始化。这是为了保证来自 GPIO 电路的控制信号传输HRTIM 定时器之前,在 HRTIM 中能够正确定义输出状态。
+ T4 H( R& C& o- p8 q4 C, j6 T; E. a: _' n% ~5 g
1.4.5 其他外设初始化+ d& L3 o) y3 `- o
HRTIM 与多种 MCU 外设交互作用,如下所列。进行 IHRTIM 操作时不强制要求对它们全部) O+ Z7 o. d- H9 ^3 _
进行初始化。下列外设的初始化代码在后面所述的一些示例中提供。
+ ^9 W3 g+ F( n0 }/ |( |% i
3 O! d( ~! w) S9 B* F
嵌套向量中断控制器 (Nested Vectored Interrupt ControllerNVIC& E+ C# s; M0 \# p
HRTIM 中断请求分组为 7 种中断向量。所有错误均分组到一个特殊向量中,可设置为非常高的优先级。4 c7 w; u$ {4 y  \( q
HRTIM 相关的 NVIC 部分在 HAL_HRTIM_MspInit 函数中进行编程。7 O0 c  S  [: A' i# r, N

+ Y  h( L" E2 A/ P1 iDMA 控制器% R. Y( N) L0 x6 k! x% i
大部分中断请求可用作 DMA 请求,分组到 6 DMA 通道 (每个定时单元一个,包括主定时器)9 }9 U6 T2 Y8 q3 U% O% g
当启动定时器时,基于 DMA HRTIM 操作使能,利用专门的开始 / 停止函数如HAL_HRTIM_WaveformCounterStart_DMA) H! [" N" J* z. P0 V0 U# Q- h$ y

: W) @. S0 {+ J1 M) ^/ f4 G比较器
* G7 |% n8 w0 s* Q; ]# |8 O4 e3 个内置比较器可用来调节模拟信号:它们必须在输出到达 HRTIM 前进行初始化。
2 v9 ?8 P0 A! v! x2 ?0 @初始化包括模拟输入编程、时钟使能和极性。
# p: x  g- Q% q5 t0 k5 w* q; h5 `! A- X5 }! ?! I5 M6 j9 N7 X+ c( o
运算放大器
4 J  {0 I$ _' T% _! l( P4 g内置运算放大器能够放大进入 ADC 或比较器的低电压信号,也可直接充当比较器 (相比普通比较器,它速率较低)。它必须与比较器一样进行初始化。
. r0 z. W# A( x* v# \. ?9 G( g; l: K7 A% G
ADC 转换器6 J- H4 z$ V" `
HRTIM 能够触发两个 ADC 转换器中的任意一个。应初始化它们以接收外部触发器信号 (在其常规和 / 或注入转换序列上)。& W- H' c* ^7 W
ADC 的另一个可能用途在于使用模拟看门狗在 HRTIM 上触发外部事件 (用于输出置位 / 位或计数器复位)。5 {( _3 ]& |. Y3 J+ H. A
7 c# t1 O! @  g
DAC 转换器8 M- p, K7 w1 @, U) r2 o/ ]( H
DAC 转换器通常用于定义比较器阈值。它们可利用 HRTIM DAC 触发器,与 HRTIM 操作同步更新。
" H, @% U- E3 A2 K: f; u# R
4 X( F8 a: v' @' N# j/ w9 n
通用定时器
$ d8 S5 T- D- W) z  I" pHRTIM 也可连接到其他片上定时器,有以下用途:
) o! T$ A9 Q/ i" k- q( J* [作为外部事件;
* H2 z9 D" ?" O" [! @  I作为突发模式触发器或时钟;# R9 d" m8 ]$ p; _
用于 HRTIM 寄存器更新触发。
/ t2 v4 X2 D3 Y+ p  ]3 r/ [7 A7 ^5 j: X- j% R! s! k
1.4.6 HRTIM 功能检查
2 u8 w; I9 |  a' s- t; \. l) ]% q当所有初始化完成,可验证 HRTIM 能够利用下面的简单代码来运行。此示例代码HRTIM_BasicPWM 示例)使能了 HRTIM TD1 输出并通过软件对其进行切换。" q- n5 t, N% m3 c7 Y
/* 使用 PLLx2 时钟来实现 HRTIM */
8 ]7 s2 c  f( [- t: m__HAL_RCC_HRTIM1_CONFIG(RCC_HRTIM1CLK_PLLCLK);DocID026506 Rev 1 [English Rev 1] 9/33
' z( k5 X/ L2 n6 K. h' \5 B* S/* 使能 HRTIM 时钟 */
1 F) x0 P, h0 f( s6 z  \- d__HRTIM1_CLK_ENABLE();
1 W& M% B  \6 o* s1 R/ X/* DLL 校准:使能了周期校准,周期设置为 14µs */
; U2 B5 [" i4 DHRTIM1->sCommonRegs.DLLCR = HRTIM_CALIBRATIONRATE_14| HRTIM_DLLCR_CALEN;
+ b5 [) Z" p: j/* 检查 DLL 校准完成的标志位 *// |+ |! M, i$ _: \, ?3 L8 m9 V4 ?
while(HRTIM1->sCommonRegs.ISR & HRTIM_IT_DLLRDY == RESET);5 ^" R3 Y( n) T' ^( j# Y
HRTIM1->sCommonRegs.OENR = HRTIM_OENR_TD1OEN; /* 使能 TD1 输出 */
5 K8 C2 {, s( w  L) @GPIO_HRTIM_outputs_Config(); /* 初始化 HRTIM 输出 */
7 |2 P7 Y7 q; y, w5 z: f3 d5 B' x7 xwhile(1)
5 x/ l7 \* ~5 t  G" \6 u* I/ W! H {
$ i% a+ J* h, g0 |' H /* 通过软件来置位和复位 TD1 *// f7 y( P5 _+ t6 q
HRTIM1->sTimerxRegs[HRTIM_TIMERINDEX_TIMER_D].SETx1R = HRTIM_SET1R_SST;
5 Y% ^5 _, K5 C7 t- l HRTIM1->sTimerxRegs[HRTIM_TIMERINDEX_TIMER_D].RSTx1R = HRTIM_RST1R_SRT;
0 c. T% {% W: m7 } }  e! h! g- P$ x* z

* @6 x4 R  r+ e+ o4 ?
此处复制的代码片段可从 HRTIM_Snippets HRTIM_BasicPWM 示例中获取。两种情况下都须通过 #define HRTIM_CHECK 语句来选择示例。+ V+ d- u0 p+ [4 Z8 \2 D
对于本文档其余部分,时钟和 DLL 初始化部分将不再重复,而代之以对HRTIM_Minimal_Config() 函数的调用。' X' f# l( N: N3 u3 g
8 t+ d% s6 H# \1 F% N: I
完整版请查看:附件
- v& E% U' S6 B  R

DM00121475_ZHV1.pdf

下载

820.72 KB, 下载次数: 135

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

举报

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

下载看看

所属标签

相似分享

官网相关资源

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