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

STM32L4的TIMER定时器中断

[复制链接]
STMCU小助手 发布时间:2022-8-27 14:47
在上新建工程的基础上添加使用TIMER功能(新建工程见STM32使用LL库建立工程)' w8 ~, s+ A0 T) N: [3 B
/ e  ?, O2 I7 {( C# J  U
一、CubeMX的配置* D) n  l9 G$ w( `
使能定时器6即可
$ I) n  `; `# i' D, \# C( | 20200202214222123.png $ o4 |( @7 S+ R4 W* u+ }; K% v

9 t2 I% ~: D4 ~然后重要的是工程设置里,将HAL改成LL
- Z& L( ~* D( P9 l# M/ x" D3 L; e6 y, ]2 \! c+ [
20200202214307954.png
; q  G1 l! n8 n' C- g: w6 f* }% d1 ]; i" ~
然后便可以生成代码
  J5 a9 f) A8 V: W
$ K/ _: u5 P2 ]" Q 20200110160627106.png
, `0 E" b- I6 ?. [. P' U1 W% ]* b0 B( }7 v4 b7 M3 p3 ]3 \. }7 Y
二、用户代码修改
$ O( b# W3 _0 f4 N4 G; G将TIM6初始化代码修改为如下,放入新建的timer6.c文件+ q8 a% d1 t1 M; f
: c+ y% D* W' i. p
  1. /**1 Y. D7 l: g+ B1 v, n: |4 Z& u) K/ Q
  2. * @brief        基本定时器6中断初始化函数
    ! d. X2 ~2 G9 @- s
  3. *                        定时器溢出时间计算方法:Tout=((arr+1)*(psc+1))/Ft us.4 |' }( n; [5 |, {: Y+ W' @' w$ Y
  4. *                        Ft=定时器工作频率,单位:Mhz
    . X3 U0 R- ]9 n. e4 [4 h
  5. *                        这里使用的是定时器6!(定时器6挂在APB1上,时钟为HCLK:80Mhz)+ D+ n) m/ L, V" x. t, f
  6. *) V! m) z+ T1 f
  7. * @param   arr                自动重装值。8 S- R$ v; ]& t1 x6 I' e. Z  F
  8. * @param   psc                时钟预分频数
    7 \3 y: e" c; y. e" J# D" z
  9. *
    / w9 ?, O8 W8 E' d! q5 v: |* j, Q( x
  10. * @return  void: Y5 j+ M9 N4 h+ K+ e# |% v3 T8 W
  11. */7 B& y9 d' o" Z; L+ Y. n* c
  12. void TIM6_Int_Init(u16 arr,u16 psc)8 @! Z' ^) F( M& d% }
  13. {
      E# V' l; |2 s* F) `1 V
  14.         LL_TIM_InitTypeDef TIM_InitStruct;
    ) t; P, E7 K, J- z; B
  15. 5 h9 J5 @' ^  D( a1 t
  16.         LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_TIM6);//使能TIM6时钟6 M$ b$ _) I' K) p; r- _' l

  17. 4 H' E; \! S) n1 C$ w% U4 V
  18.         /* TIM6 interrupt Init */
    8 j3 T$ m- E1 B; T0 B; N
  19.         NVIC_SetPriority(TIM6_DAC_IRQn, NVIC_EncodePriority(NVIC_GetPriorityGrouping(),1, 3));
    : j, g: \: n8 i  X1 o6 N# d
  20.         NVIC_EnableIRQ(TIM6_DAC_IRQn);
    # A: M+ `# T4 u) R* {1 n

  21. + W( \# G8 u% O
  22.         TIM_InitStruct.Prescaler = psc;  //定时器分频
    0 [( O  d# R* D5 A9 C+ J& a
  23.         TIM_InitStruct.CounterMode = LL_TIM_COUNTERMODE_UP; //向上计数模式+ L9 x( D6 T2 m
  24.         TIM_InitStruct.Autoreload = arr;         //自动重装载值
    0 A) M- T  H  H$ k  _" U9 H
  25.         TIM_InitStruct.ClockDivision = LL_TIM_CLOCKDIVISION_DIV1;//时钟分频因子
    6 O. ^% q: D2 O7 R  E& f
  26.         LL_TIM_Init(TIM6, &TIM_InitStruct);
    ) @% U1 h5 U1 T6 @8 [9 J# T8 v

  27. ; z: e9 H* R- R8 c
  28.         LL_TIM_EnableIT_UPDATE(TIM6);        //允许更新中断$ L, b. z: ]# ]- u
  29.         
    : r. V& q9 K* r" s+ X9 w5 a: H
  30.         LL_TIM_EnableCounter(TIM6);                //使能定时器63 x/ V5 P; T2 [& }: ~% s7 p
  31.         
    ; m# q) f' |& p) @
  32. }
复制代码

. L0 S9 u/ d+ L/ |然后在定时器中断服务函数里加入LED翻转) K7 k+ O) A- X; }
9 c/ _! U$ l. V7 `' B* \
  1. //定时器6中断服务函数% s$ e  R7 X+ o- b' I
  2. void TIM6_DAC_IRQHandler(void)
      H! A2 ]6 v5 o$ l4 @* W1 M4 f
  3. {
      f  [0 H7 }& o. ^9 t7 c( t: \
  4.         if(LL_TIM_IsActiveFlag_UPDATE(TIM6)==SET)        //溢出中断1 {- Q/ C; }- X6 {9 g1 I
  5.         {
    9 q! r, {2 ]6 K+ t
  6.                 LED_TogglePin();        //LED翻转
    + U6 g9 C8 M/ W0 ^' |
  7.         }* T# ?; h' \+ J( F" k# ~1 n7 C7 v
  8.         LL_TIM_ClearFlag_UPDATE(TIM6);        //清除中断标志位
    / h' d% ]9 h7 a: E4 k3 v( k
  9. }1 x- D% E9 e, R
复制代码

# p) r# q& \6 y) S$ b$ C# j在主函数里将tim6初始化
; v, E8 ~3 {$ q1 z9 ^+ E  A5 Y3 \" e. x
  1. TIM6_Int_Init(2000,8000 - 1);        //200ms
复制代码
% v2 W# \  j4 k& M/ A; z' V
编译链接下载到开发板里,测试测试成功
+ D9 i  [: R  d! v, G! t$ {  |————————————————
+ |7 p' A! @( I' f2 e5 y& t转载:Willliam_william! e9 s2 I  B. ]& b% u

& n! J2 K3 H4 [! ?8 [" ?  k
, x7 y( w+ W& Q% P
赞 收藏 评论0 发布时间:2022-8-27 14:47

举报

0个回答

所属标签

相似技术帖

官网相关资源

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