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

【经验分享】stm32L0(二) 定时器配置

[复制链接]
STMCU小助手 发布时间:2021-11-17 23:02
MCU:stm32L0
  t' U. W; ^( b! `- v. v4 E主要搞清楚系统时钟,我在上文设置系统时钟为HSE(外部高速时钟),设置为8M。
! w0 g5 X1 f4 a
3 |" n, Q/ n" ~- f0 a+ C0 z$ j//SYSCLK=Fs*PLLMUL/PLLDIV;. C' W) V% y% @* J1 w2 B/ S- I
//Fusb=Fvco/pllq=Fs*(plln/(pllm*pllq));/ a1 S# v8 i7 S! l- c* x7 o
//SYSCLK =
1 W( n: @7 W4 o( h" \% Z/ d//Fs 8M # S8 U' B5 k# {
//Fvco: 8M
# X. f! T+ n3 O, T+ I//SYSCLK: 系统时钟频率 8*8/2=32: m  Z# g9 k  q. J
//PLLMUL:倍频 8
8 D! v' [7 V4 E+ R8 w" b8 ?1 Y//PLLDIV:分频系数 2 * y; ^* U2 k3 v# a0 m$ n

: k9 M: G" M+ ~" b以上配置,设置AHB为 32M,AHB1为4M,AHB2为32M
( a( c1 l% i1 y& x: G" u# R/ e, h; v& ~# U- U
通用定时器时钟为AHB1时钟的2倍,8M。
" d4 r: |. s8 M, x. ]% P2 F  W
0 f6 a2 h0 T) B  T; o可以由如下公式计算定时时间,假设定时时间为10s,设置计数值(Period)为9999,; k( w, d+ i6 x: r
- F# @" o) ?1 ]$ k7 R
则计数频率为(计数值+1)/(计数值)=1000Hz( V3 k7 q; @1 o! S0 }
4 [2 ^9 O* g" E, @3 y( I
分频系数(Prescaler )为定时器时钟(8M)/计数频率 = 分频系数+1,为7999。
* X( G2 o* B, Z! l' J8 ^% X! s; W
1 {9 B1 C& i+ M3 r0 i, F; H配置定时器代码如下:
, e% b. ?% j( X9 u# j: j! A  k+ ^
, g$ ?$ C: L  k& ~  e
  1. TIM_HandleTypeDef TIM2_Handler;      //定时器句柄
    & a9 s5 I& k" m- u

  2. 1 s  p! f! j) M$ G/ a8 b
  3. ! q/ v& N# N( n- q! F) T7 Y8 Z
  4. void TIM2_Init(void)            //定时10s  P& p/ g% Q: e! k
  5. {
    & }# ]$ q  t0 [$ K$ g
  6.     TIM2_Handler.Instance = TIM2;1 d* W* e. O# m) i
  7.     TIM2_Handler.Init.Prescaler = 7999;+ }9 ]9 a( e) [
  8.     TIM2_Handler.Init.CounterMode = TIM_COUNTERMODE_UP;
    9 C1 Q( c' W1 n
  9.     TIM2_Handler.Init.Period = 9999;
    % i: d/ o+ F) x2 i) D) ^+ Q
  10.     TIM2_Handler.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
    * i& |$ I1 q6 e$ p8 d* L
  11.     HAL_TIM_Base_Init(&TIM2_Handler);
    & Y9 |1 m( e7 x2 Z: Z- r; M
  12. * D/ ^; ?( V! K$ f8 {
  13.     HAL_TIM_Base_Start_IT(&TIM2_Handler); //使能定时器2和定时器2更新中断:TIM_IT_UPDATE   
    4 i5 z' b+ t1 m  i& O9 C- m
  14. * L1 C# R4 c# F( D: c
  15. }
    , p, S6 r( X2 V

  16. - z5 {, f& ]) J! |7 Q9 i7 e

  17. - h; v2 r' N1 l. E) |
  18. //定时器底册驱动,开启时钟,设置中断优先级+ S0 }2 y! s" U" ]6 e3 U
  19. //此函数会被HAL_TIM_Base_Init()函数调用7 D1 h! \" ], o3 O
  20. void HAL_TIM_Base_MspInit(TIM_HandleTypeDef *htim)2 s6 w: h2 G, s* B8 _& H
  21. {
    , v0 }0 p6 K8 m, J
  22.     if(htim->Instance==TIM2)
    $ E8 w+ B0 W7 J' ]7 w
  23.     {
    7 E1 y  K8 ]5 P  r
  24.         __HAL_RCC_TIM2_CLK_ENABLE();            //使能TIM3时钟
    1 l+ `5 A  A9 V9 i5 h* K3 g
  25.         HAL_NVIC_SetPriority(TIM2_IRQn,1,3);    //设置中断优先级,抢占优先级1,子优先级3
    : c6 @# L3 f5 N5 Q
  26.         HAL_NVIC_EnableIRQ(TIM2_IRQn);          //开启ITM3中断   3 S' m$ ?4 V7 M; P8 m
  27.     }
      b" ~; h# Q4 y. N. G' L
  28. }$ N- d9 J" B+ L) c5 v

  29. # R: n% o" Y  J/ E- S
  30. //定时器2中断服务函数
    ' U  {( R2 w, j; D4 G
  31. void TIM2_IRQHandler(void)
      R2 C$ p/ g! q
  32. {
    . `, d7 g" z' Z/ i
  33.     HAL_TIM_IRQHandler(&TIM2_Handler);5 Q3 F, `$ j0 s) ^# E% Y4 P, c5 @
  34. }
    9 L+ ~9 e5 ~# B9 u" l2 ?" \/ M1 `" t
  35. 1 K* u8 M( J9 e( t
  36. 5 e$ L, P( l7 j' ~$ {1 h
  37. uint16_t sec_10 = 0;
    + ?& u! G" k1 a! s

  38. ' _; N+ f. k' V4 Z6 p# f( m2 f
  39. //回调函数,定时器中断服务函数调用6 L" }5 u3 Z: ]
  40. void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim): J* G* K8 W, Y4 {
  41. {3 D( G7 e6 ~0 g+ I
  42.     if(htim==(&TIM2_Handler))
    ( x& c$ F: G. @9 a
  43.     {
    / W$ _* A1 ^/ {# B2 ]
  44. //        LED1=!LED1;        //LED1反转    ( o8 B& K! t" r  G! a
  45.         sec_10++;
    8 J  M. w. f0 o/ Z
  46.     }
    , u: \: O% e, p. `" m8 C
  47. }
    ( j7 s6 j+ v3 x: z; K# P
  48. ! n5 f# l' j- Y% P6 I0 p
复制代码

( h0 B5 Z& }& x" q  [0 G7 q$ H2 ]- s
* D/ r" z) H9 S  M( l- q  G
收藏 评论0 发布时间:2021-11-17 23:02

举报

0个回答

所属标签

相似分享

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版