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

STM32L4的TIMER定时器中断

[复制链接]
STMCU小助手 发布时间:2021-8-10 14:28
一、CubeMX的配置3 U- s( {! W% e- A
使能定时器6即可
8 g& B& p& i3 s  r- D1 s 1.png
7 B  g% o$ C! F0 P  C$ T7 e( f. a* j1 v
8 \* e- I$ T) ]! ~( d9 p8 \
' Q8 _' |$ s6 l( Q+ H
然后重要的是工程设置里,将HAL改成LL  k: U1 o4 M4 e3 r
2.png ) ]' L4 M+ l1 }, D+ R9 }2 t2 l9 B+ f1 M9 E

. x6 Y3 J+ @1 N7 T3 f% G' i6 H" s% x
' \" W8 w. n4 \9 B+ @) N# a
然后便可以生成代码+ s( p/ j* `( ^$ e6 T6 M; d5 P
3.png
6 v3 S% ?8 g' o8 a" o3 U6 h& M
# r+ D% U7 w2 k" x
9 z& K0 i! n  k/ {5 ?9 D
1 J/ j( G. Q& o3 A& [- c

; R3 Z: Z# y0 v8 M二、用户代码修改3 u% ~# Q- z7 a( s, e  ~
将TIM6初始化代码修改为如下,放入新建的timer6.c文件
. X) g4 t: }0 g. l4 K5 v8 J
  1. <font face="微软雅黑" size="3">/**: d% M2 }- T% `7 d6 U
  2. * @brief        基本定时器6中断初始化函数' i' G" K* q5 ?, w( S. \, j2 H7 m
  3. *                        定时器溢出时间计算方法:Tout=((arr+1)*(psc+1))/Ft us.5 J" m% X! M* D8 C0 A. g
  4. *                        Ft=定时器工作频率,单位:Mhz
    - V: n; D9 x# U6 ~/ q
  5. *                        这里使用的是定时器6!(定时器6挂在APB1上,时钟为HCLK:80Mhz)( \" N( x! _4 g) T6 R9 K
  6. *
    ( C4 P+ N/ Q. L: h  m
  7. * @param   arr                自动重装值。: b5 L) m( A/ o+ {+ ]" A
  8. * @param   psc                时钟预分频数7 y. g9 u% w- m. w: r
  9. *+ Y# f$ G, O2 X( P! V' ^% g2 g, M
  10. * @return  void2 h: Z, _4 h" }% u* U( O: \
  11. */
    - s1 X$ _0 c7 M& R
  12. void TIM6_Int_Init(u16 arr,u16 psc)$ W" _7 d* V, m8 r
  13. {1 j  G" O. h' v0 p' P* y) P
  14.         LL_TIM_InitTypeDef TIM_InitStruct;
    0 L: s# [/ `7 j% f. b

  15. 0 `! w) O+ C" J1 [
  16.         LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_TIM6);//使能TIM6时钟
    - l9 O$ Y! ^) a. Y
  17. " z* ]' v: V% B5 U
  18.         /* TIM6 interrupt Init */# y1 b# G% l. O  ~
  19.         NVIC_SetPriority(TIM6_DAC_IRQn, NVIC_EncodePriority(NVIC_GetPriorityGrouping(),1, 3));% ^$ z0 A3 O2 B0 E6 v
  20.         NVIC_EnableIRQ(TIM6_DAC_IRQn);( L$ }" U# ^# k6 x
  21. / W* O2 ]# v$ a6 L+ h! G
  22.         TIM_InitStruct.Prescaler = psc;  //定时器分频
    & W5 N1 [3 e7 b, g1 R4 d7 s
  23.         TIM_InitStruct.CounterMode = LL_TIM_COUNTERMODE_UP; //向上计数模式* R) W2 m) N& G3 K5 J
  24.         TIM_InitStruct.Autoreload = arr;         //自动重装载值/ H. S+ O& E& B4 J
  25.         TIM_InitStruct.ClockDivision = LL_TIM_CLOCKDIVISION_DIV1;//时钟分频因子
    8 z* w) q, x$ U& o* c% c" b
  26.         LL_TIM_Init(TIM6, &TIM_InitStruct);
    0 |4 f' ~3 o6 F7 c" S  }2 C

  27.   a8 ?- Q/ d( J0 D% O5 \: n9 Q# ]! O
  28.         LL_TIM_EnableIT_UPDATE(TIM6);        //允许更新中断
    8 ?2 s, l  k( _- M
  29.         
    - x; x1 M* i: }3 K! {
  30.         LL_TIM_EnableCounter(TIM6);                //使能定时器6
    $ x( \8 E' b* B  O! i8 o. [' {3 }
  31.         
    . r/ ^  J# C7 c3 Z/ {
  32. }
    ' I2 g) h0 T0 B9 b: j" ?
  33. </font>
复制代码
然后在定时器中断服务函数里加入LED翻转; o: X; ~' m( h/ t6 a& S3 j# F' y
  1. <font face="微软雅黑" size="3">//定时器6中断服务函数
    " X* ?8 b$ g  Q9 ?! m# C
  2. void TIM6_DAC_IRQHandler(void)+ q0 R7 ~. }1 @' Q
  3. {" _. m% ?7 k2 x6 r6 x3 S" D; O' H
  4.         if(LL_TIM_IsActiveFlag_UPDATE(TIM6)==SET)        //溢出中断4 D  n# P& c1 q4 j* d# Z- Z: m1 X* S
  5.         {
    - {4 c3 U9 X1 [# r4 c
  6.                 LED_TogglePin();        //LED翻转% l, s8 a0 p+ _4 b- Z: e! O, i
  7.         }" z: r# Q5 p) F& b
  8.         LL_TIM_ClearFlag_UPDATE(TIM6);        //清除中断标志位 6 C5 M4 w2 I( h( ?9 C
  9. }" Y8 w. [: ]: X
  10. </font>
复制代码
在主函数里将tim6初始化+ H1 v* _& i$ W$ M( b/ k# [7 X
  1. <font face="微软雅黑" size="3">TIM6_Int_Init(2000,8000 - 1);        //200ms</font>
复制代码
编译链接下载到开发板里,测试测试成功
+ {3 V8 n9 a6 K' T
6 _& T( _% Q" x
) |6 e" i2 U9 P/ i0 N2 F0 k- @& S* Y$ Y# `
赞 收藏 评论0 发布时间:2021-8-10 14:28

举报

0个回答

所属标签

相似技术帖

官网相关资源

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