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

STM32CuBeMX(HAL库)实现定时器中断(STM32F407ZGT6)

[复制链接]
攻城狮Melo 发布时间:2022-11-9 14:54
STM32基本定时器具有以下功能:& C2 l5 K' `; ^* G7 E
16位向上、向下、向上/下自动装载计数器。( G+ s, B/ B# p& W9 i! T: T

3 R7 [# I/ }! F9 f3 E$ p9 U: h5 q16位可编程(可以实时修改)预分频器,计数器时钟频率的分频系数为1~65535之间的任意数值。; G$ x' {/ z0 u1 S6 V+ U4 O

) v, e$ t- l: J' e4 ^8 v定时触发ADC或者DAC以达到固定频率采用或者还原的目的(部分基本定时器具有此功能)。4 q# m3 t1 D  ]1 C* S" A( H

2 g9 V+ o& D. MSTM32通用定时器具有以下功能:

8 ~: e  ~0 j! F. Q
5 z/ M9 H$ S  ?16位向上、向下、向上/下自动装载计数器。
! b+ f! L& U+ n5 q( y
1 @, I# b  }0 W$ n, G5 C16位可编程(可以实时修改)预分频器,计数器时钟频率的分频系数为1~65535之间的任意数值。
( l7 h) ~4 S4 B6 }/ S3 g. D# \
4 个独立通道(TIMx_CH1~4)可以用作:! A( `/ d& B! x5 I# [
测量输入信号的脉冲长度( 输入捕获)。1 W, F# w- ?; i
输出比较。6 k/ ?8 a  L, `, T
单脉冲模式输出。
5 y8 N$ h' P' L8 |7 m' S0 GPWM输出(边缘或中间对齐模式)。: }& Z0 I! X3 ~, r) y+ J0 M

2 |' n& j9 w5 y6 w5 ~支持针对定位的增量(正交)编码器和霍尔传感器电路。
; i* ~$ L# Q/ f1 j# c( f( T
, }& W) d8 _, x: d2 n如下事件发生时产生中断/DMA:
3 `* s0 z; }$ h更新:计数器向上溢出/向下溢出,计数器初始化(通过软件或者内 部/外部触发)! }4 T7 A5 [7 q0 o8 Z- x
触发事件(计数器启动、停止、初始化或者由内部/外部触发计数)
# D9 I* _. Z! a' q- [/ v# f( w输入捕获
" U0 x+ v' D+ w5 X输出比较  Q: Q; Q3 h0 X

; `$ p  w. a8 r) t7 n& kSTM32高级定时器具有以下功能:+ O' k, j2 i! C2 H4 u
还具有控制交直流电动机所有的功能。
4 Y) ]% B  L8 k, N  [+ n  z+ A
. o/ A, d0 C/ o输出6路互补带死区的信号,刹车功能等等。' W6 Q2 P' @( j6 a& K2 n

; m' s; W: z: p# f* \还具有一般定时器的功能。
0 c6 T) t. t4 T- G* Q) w. H/ P/ |  S' p' J
6 V: p! R5 Z# O1 e2 [+ u, n
时钟树配置:
- R: ?7 G; T" ?) n& _, {4 l5 e" S/ O5 j6 |* {
13cd2092350e4e01ae0babcfa4c96704.png
! L  Y! M8 S5 t: g4 z
! Z/ Y# A  C) s; p 配置GPIO:0 K. L  ^( y* ^0 B1 ~

0 [$ y* o, r/ G# Y1 Y 7419852b2189468a95f479243560bad4.png % k/ V  B* g8 ]) U
+ a, F9 P  ?5 A7 C) P7 j/ o" C
PE3和PE4是两个LED灯。
# d0 m- l/ \, q! f3 v6 B0 d, Q0 y# x! `6 m/ |% R
配置定时器:
' d, ^# _8 T1 Q- E7 L; B3 F# V  I2 d. B  g: _
60145361d4d44487be40c9ffdd8917e6.png . X0 P" e  S6 h

' D5 z- S3 h7 S 点点鼠标CuBe就会自己配置相应参数,这是CuBe的强大的地方,节省很多时间!9 w( ~2 J2 T6 h9 O  k; ~( D1 Q9 Q
! h3 D1 t6 |$ Q1 z# R2 ]
7303804503f247da941f1b507cfd52e3.png
2 C$ S7 C% }4 x7 W) M: _" C$ p0 R* Q( k0 T& k$ K  H
其中参数含义分别为:
  t8 U' K& t+ I0 \4 V+ a7 _Prescaler 分频系数0 c  m- D, g0 q2 n
Counter Mode 计数模式(分为向上和向下)
: b- t6 H) y; E+ b$ dCount Period 计数周期9 [  |* K) ^& m/ |
auto-reload preload 自动重装载
5 I+ R9 s" Z. H  Q- K) C) QTRGO Event Selection 触发事件4 V. H) _, X& j2 L
ac722732fd054eafbb2ad77cba64f47f.png
) w/ \! `1 d  m" M" Y! k: s  ?0 J6 z! {4 Y
其中时间溢出公式为:
6 p% c. H) t. M% g5 I) ~1 n" B( X* E: p/ I  h/ a( }$ M" x
其他参数无须修改,用到再查资料。
% d! T- A$ Q2 F" o) U0 ]) K0 `! {8 Z7 Z) Q; E% A2 o
d5607da88c6b4430ae8669caef01bfd4.png ' M3 o: s0 M- Y- P" \: T
/ g% O, T3 d2 f
7 ]( n5 l' ?8 m- F- V
CuBe的配置就这样完成了,接下来进入MDK了。# y) X7 o6 I1 f2 Y- J
% ?0 }# J$ P4 F( {7 K; U
首先是启动驱动器:) C% w/ Q, f9 b& @# {* v# T

! ], ]6 ~( \; B5 l* s这个过程想要手动启动定时器,系统才能进入定时器中断(这个放在main函数开头的地方)0 [( l' e9 \% F7 E+ Y0 G

6 f- L+ h$ \8 g' ]+ D& r  W6 C
  1. HAL_TIM_Base_Start_IT(&htim6);
复制代码
+ ^  u% Z1 Q( ^5 n% Z
注意,如果使用HAL_TIM_Base_Start(&htim6);函数打开定时器,则定时器会启动,但不会进入定时器中断。6 N' H2 F' @: g7 k

1 Q) R. L/ i" ]1 d7 n; ^. E! g) u主函数中就不需要再编写其他的代码了。' h2 y0 c$ e6 w$ O( j
7 q% j# c& s( m4 I! i  g* a7 _& k
然后我们来到stm32f4××_it.c文件,找到TIM6中断,在里面添加自己的代码即可。我这里就只添加了这个:  s/ f; V* [. r$ f
7 P  y! k8 F3 \5 ]& I
db5a88623f22487fb8a8f40ff1033a0a.png
* B  D/ b7 B7 v
5 d2 Z, D2 k; o  _4 X
  1.   HAL_GPIO_TogglePin(GPIOE,GPIO_PIN_3);
复制代码

2 {. ~- v" y# I然后我代码的效果就是PE3每隔500ms翻转一次,PE4保持常亮。大家记得还要配置debug里面的东西,之后就是编译、下载程序了。具体参考下面:
3 L/ n* U6 c# e" L: N: [8 Z$ z1 W) Q/ ~& M4 ]. m/ R; f0 X7 H
0cc9804b4a1d490c8b389092214c77e3.png
' S) E) @0 Y+ T  R, D6 W
* ?% y+ @% u, C+ P3 W; J/ G! i( L 9569cbb7f1894e7d83bf8d15d39425d6.png
  N  w4 @/ ^: A: r9 |7 p
4 s; U! H( O. K————————————————
, P8 Y+ V5 d/ w! W8 ^: B! {版权声明:不会创建对象
' ^6 P. B, ^. ?9 e* b9 A$ C
  F2 c0 D" i9 C0 v& Z
0 ?0 f3 [) H7 W" H" C) c
赞 收藏 评论0 发布时间:2022-11-9 14:54

举报

0个回答

所属标签

相似技术帖

官网相关资源

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