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

【经验分享】STM32H7学习继续(STM32H7系列8) 定时中断,PWM输出,输入捕获

[复制链接]
STMCU小助手 发布时间:2021-12-24 18:00
定时器
7 l* {, \! X" i, ]+ b% C0 z1、STM32H743 内部包含 10 个通用定时器(TIM2TIM5,TIM12TIM17),1 Z, u- J' u' P& B$ x
每个定时器都可以用来产生 PWM 或者用作输入捕获
7 n6 E! G; s1 E不过 TIM2~TIM5 有 4 个通道,TIM12~TIM17 只有 2 个通道。
0 H0 s* h4 u1 g7 }2、STM32H743 的通用定时器可以被用于:测量输入信号的脉冲长度(输入捕获)或者产生输出波形(输出比较和 PWM)等。 使用定时器预分频器和 RCC 时钟控制器预分频器,脉冲长度和波形周期可以在几个微秒到几个毫秒间调整。STM32H743 的每个通用定时器都是完全独立的,没有互相共享的任何资源。! l/ P  Q3 S' U9 `

8 h3 Q. E. l7 R0 [! i3、如下事件发生时产生中断/DMA(TIM12~TIM14 不支持 DMA):1 ]' ~# D& j2 {% E, k% q
A.更新:计数器向上溢出/向下溢出,计数器初始化(通过软件或者内部/外部触发)
' E3 O5 X3 ?1 j$ ]B.触发事件(计数器启动、停止、初始化或者由内部/外部触发计数)
6 v. }7 {. s' ^# e' LC.输入捕获: j; R, T5 F7 U' n4 l& [4 ~
D.输出比较
& Q0 @4 m& f! D3 u; A7 sE.支持针对定位的增量(正交)编码器和霍尔传感器电路(TIM12~TIM17 不支持)
* j$ x* L7 I4 u6 N( ]5 D* XF.触发输入作为外部时钟或者按周期的电流管理(TIM9~TIM17 不支持)
7 x8 i$ H3 X/ M" I4 \% D$ \3 M7 r" b
4、通过修改 ARR 的值,可以改变定时时间。另外,通过修改 PSC 的值,使用不同的计数频率(改变图中 CNT 的斜率),也可以改变定时时间。0 @) L7 n* \" J+ v5 F

7 g! t8 d) V7 i) C/ ^* s相关寄存器) ?  I9 Z( Y) Y" r4 w2 f
DMA/中断使能寄存器(TIMx_DIER)。: p$ U& v, f& m; V
控制寄存器 1(TIMx_CR1)
; G5 M4 z, x: Z8 H模式选择寄存器(TIMx_SMCR)
9 D& a1 g* m1 S4 D9 R) R预分频寄存器(TIMx_PSC)
' h2 L7 D2 S$ fTIMx_CNT 寄存器,0 G0 r+ x" u$ N4 B

7 [$ p# n$ v$ x3 y% U( f& x程序设计( R" K' Z. Q% z& R2 l, p8 A+ x
TIM3_Init(u16 arr,u16 psc)函数中的两个参数可以计算中断时间,公式如下:# U, z$ m* d+ D) q& D6 u
Tout= ((arr+1)*(psc+1))/Tclk;+ z. E4 z" N8 d9 e2 Z

" Z! [+ y& y" t1 {9 ~PWM输出
) x" y/ T; W9 r1 \8 J4 K/ iSTM32H743 的定时器除了 TIM6 和 7。其他的定时器都可以用来产生 PWM 输出。其中高级定时器 TIM1 和 TIM8 可以同时产生多达 7 路的 PWM 输出。而通用定时器也能同时产生多达 4 路的 PWM 输出!这里我们仅使用 TIM3 的 CH4 产生一路 PWM 输出。- M  x$ u+ @$ _+ r* I  C2 `" [  w, X
首先是捕获/比较模式寄存器(TIMx_CCMR1/2),这里我们需要说明的是模式设置位 OC4M[3:0],此部分由 4位组成。总共可以配置成14种模式,我们使用的是PWM模式,所以这4位必须设置为0110/0111。这两种 PWM 模式的区别就是输出有效电平的极性相反。" v6 W4 P1 g. O  {$ n
TIM3 的捕获/比较使能寄存器(TIM3_CCER),该寄存器控制着各个输入输出通道的开关
7 l4 t& d: ?! i$ E如果是通用定时器,则配置以上三个寄存器就够了,但是如果是高级定时器,则还需要配置:刹车和死区寄存(TIMx_BDTR),
2 }0 A/ ]' _& \0 {6 h) \; E* L, |' @) s* X
步骤2 l: ]- X% |# _* B
1)开启 TIM3 和 GPIO 时钟,配置 PB1 选择复用功能 AF1(TIM3)输出。7 F4 l2 u" V/ v1 U
2)初始化 TIM3,设置 TIM3 的 ARR 和 PSC 等参数。
9 y& M' {/ L* K1 ?( f$ G0 O3)设置 TIM3_CH4 的 PWM 模式,输出比较极性,比较值等参数。
6 o9 c* b1 W( q4)使能 TIM3,使能 TIM3 的 CH4 输出。9 K7 R/ M" l  L& S" K: ~$ D
5)修改 TIM3_CCR4 来控制占空比。; S9 o* v' s+ F' N
7 E. \# E0 W( u1 J/ `8 n6 S
输入捕获:输入捕获模式可以用来测量脉冲宽度或者测量频率。$ [; r8 e& g. K# r* b2 I
原理
  N& g" l% K8 `$ M9 q输入捕获模式可以用来测量脉冲宽度或者测量频率。我们以测量脉宽为例,用一个简图来
, a& C& Y, Q4 L$ I0 f: ^说明输入捕获的原理,如图 14.1.1 所示:
" c! Z2 h1 R* ]  ]0 N8 p* A+ \! Y8 M' U6 A/ ~1 ?% ~/ V2 w5 D
20200113164705485.png
  f4 a7 ^: ?6 K1 M1 b& ^

" k$ O5 B/ ]. t. O& i6 V: L
图 14.1.1 输入捕获脉宽测量原理
% Z5 Q! I9 t- x& B
如图 14.1.1 所示,就是输入捕获测量高电平脉宽的原理,假定定时器工作在向上计数模式,图中 t1~t2 的时间,就是我们需要测量的高电平时间。测量方法如下:首先设置定时器通道 x为上升沿捕获,这样,t1 时刻,就会捕获到当前的 CNT 值,然后立即清零 CNT,并设置通道x 为下降沿捕获,这样到 t2 时刻,又会发生捕获事件,得到此时的 CNT 值,记为 CCRx2。这8 G$ |2 M; n: m) c
样,根据定时器的计数频率,我们就可以算出 t1~t2 的时间,从而得到高电平脉宽。
; F2 j! g9 K2 B4 }在 t1~t2 之间,可能产生 N 次定时器溢出,这就要求我们对定时器溢出做处理,防止高电平太长,导致数据不准确。如图 14.1.1 所示,t1~t2 之间,CNT 计数的次数等于:N*ARR+CCRx2,有了这个计数次数,再乘以 CNT 的计数周期,即可得到 t2-t1 的时间长度,即高电平持续时间。
" c5 |7 w; T* K7 G) t2 M1 I( s) b输入捕获的原理,我们就介绍到这。
/ L0 ~* x. f- s5 W) I; c# O
( D  M0 N7 u0 G+ i: U. P% e步骤
5 e  u' K3 O( B1 [- ]7 f; `5 B1)开启 TIM5 和 GPIOA 时钟,配置 PA0 为复用功能(AF2),并开启下拉电阻。8 w4 Y1 f, C  M% e. `6 W
2)初始化 TIM5,设置 TIM5 的 ARR 和 PSC。
  o- r" {1 m6 X0 g* A* g- C3)设置 TIM5 的输入捕获参数,开启输入捕获。
) h) `% ]5 f6 f( O, U8 g/ `4)使能捕获和更新中断(设置 TIM5 的 DIER 寄存器)% Q9 B, L+ X& l' f' Z7 e! j" y$ e
5)使能定时器(设置 TIM5 的 CR1 寄存器)/ w* ^  k) O, f# B9 D; }4 j" @0 X
6)设置 NVIC 中断优先级
; t! i; `8 P2 L* C7) 编写中断服务函数
7 T* O, B  Y% _! s0 P0 @- B3 h) @0 A3 M# P9 p. q' _

$ A9 o2 j3 D6 h5 w, r3 \2 ?$ F# T# F5 X
5 ]0 K% P0 X+ G' B, M/ }
5 z( _  \, G+ t, F7 E2 K4 ~0 ~
赞 收藏 1 评论0 发布时间:2021-12-24 18:00

举报

0个回答

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版