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

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

[复制链接]
STMCU小助手 发布时间:2021-11-17 23:02
MCU:stm32L01 _- Z  S! t0 W
主要搞清楚系统时钟,我在上文设置系统时钟为HSE(外部高速时钟),设置为8M。
+ G# [, ]/ X- N5 c6 q+ V8 g/ H$ _' t. w: i: j! A5 v
//SYSCLK=Fs*PLLMUL/PLLDIV;
% V" k4 \. t+ u" M, Y3 S//Fusb=Fvco/pllq=Fs*(plln/(pllm*pllq));( D& A* _6 g) {& T1 B6 J7 N
//SYSCLK =
$ Y. r0 ?6 V( ?3 x1 A, `6 U, s//Fs 8M
* Z0 d4 {  i! ~& t5 X$ X3 F1 [' W//Fvco: 8M7 G) W- Y' E) T  p: |' y
//SYSCLK: 系统时钟频率 8*8/2=32
1 ?$ _; m+ H$ r& I9 s5 s+ }//PLLMUL:倍频 8
4 j; Y$ m4 E# `' C//PLLDIV:分频系数 2
3 d: b+ Q, @/ C7 W
9 s8 G. O" ^' T. c7 v  _以上配置,设置AHB为 32M,AHB1为4M,AHB2为32M
7 W; z6 Q, m. R1 L; C; l2 ~  B; t9 s  c" g
通用定时器时钟为AHB1时钟的2倍,8M。9 B! n" `3 ?3 J+ b- }
8 B/ ]- `, A7 \2 c9 L- T. c7 D
可以由如下公式计算定时时间,假设定时时间为10s,设置计数值(Period)为9999,
' R1 ^  Q8 Z$ F0 y+ p  X0 V2 R4 d, k( a% m
则计数频率为(计数值+1)/(计数值)=1000Hz
4 p7 a- B! N' h+ h1 r! V$ u9 C6 i2 Z) o* |
分频系数(Prescaler )为定时器时钟(8M)/计数频率 = 分频系数+1,为7999。' z0 o7 C$ Y% j* s. b  B( L1 k  v
$ j! i3 d: p/ s% x
配置定时器代码如下:
( i! t& r# `$ A0 M2 p
5 L5 a# V' L) \. L  f- K7 j) d
  1. TIM_HandleTypeDef TIM2_Handler;      //定时器句柄
    0 x9 r+ I# e0 e& O3 x  ^0 x

  2. / A3 U: D+ l: y% C
  3. . I* p2 A$ l" x. |/ Q* E% ]9 G
  4. void TIM2_Init(void)            //定时10s
    2 t$ {. N9 ^! o$ z
  5. {1 x2 z5 E6 d1 T- m- c! n
  6.     TIM2_Handler.Instance = TIM2;/ U6 B& S4 p, T1 A$ r: @' M% H
  7.     TIM2_Handler.Init.Prescaler = 7999;% V" v5 ^& C, P3 S8 B6 J1 k2 I
  8.     TIM2_Handler.Init.CounterMode = TIM_COUNTERMODE_UP;
    . |8 t; @' w- j; g/ V5 h* S. F- j
  9.     TIM2_Handler.Init.Period = 9999;/ }  l4 \( G- l( l  l0 @, ]# [
  10.     TIM2_Handler.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
    ! V+ {" q2 C8 g$ V! [7 r
  11.     HAL_TIM_Base_Init(&TIM2_Handler);$ [* ^9 B( a; r" M6 E* P
  12. - c7 U/ h  F1 `0 p! m
  13.     HAL_TIM_Base_Start_IT(&TIM2_Handler); //使能定时器2和定时器2更新中断:TIM_IT_UPDATE   
    0 O! I* a7 |$ r; B; C( ~/ G% g

  14. 4 v- T7 a! b7 t8 U
  15. }
    $ H; m  }8 Q0 q: z- x. S4 d
  16. + ?" j+ E" G2 A! Y6 `: p
  17. : ~& T4 J8 ]' {, h8 ^0 Z! J
  18. //定时器底册驱动,开启时钟,设置中断优先级0 \* g! v7 a" i5 o5 P
  19. //此函数会被HAL_TIM_Base_Init()函数调用
    ( i$ W8 Z7 ~4 k8 Z
  20. void HAL_TIM_Base_MspInit(TIM_HandleTypeDef *htim)5 n( z' b/ b  N. O. l7 ]8 a; Y
  21. {& h+ b$ L5 h) w/ p( i' \0 o1 ]( F
  22.     if(htim->Instance==TIM2)% ^9 @" u" ~2 U
  23.     {
    9 A- w2 C' K& @, N' J* @; x. m
  24.         __HAL_RCC_TIM2_CLK_ENABLE();            //使能TIM3时钟
    : n1 T, G' N: `% t" y) r( `$ i7 T
  25.         HAL_NVIC_SetPriority(TIM2_IRQn,1,3);    //设置中断优先级,抢占优先级1,子优先级3
    1 a& D2 `+ Y7 W4 f
  26.         HAL_NVIC_EnableIRQ(TIM2_IRQn);          //开启ITM3中断   & V4 |# y" ?- R( X2 E5 m
  27.     }8 V8 F4 q6 M/ a" r; y
  28. }
    4 f4 l. S9 o* U; C% n

  29. , U) I& G2 q! W
  30. //定时器2中断服务函数
    0 P- A3 X6 P& O) z- m
  31. void TIM2_IRQHandler(void)7 ]2 D8 d, |* C: i! ~. d0 X9 E
  32. {
    : ]" T" `; a3 Z! w/ M* W! M
  33.     HAL_TIM_IRQHandler(&TIM2_Handler);' ?5 z5 I) A+ m8 C/ [) T4 r1 z* s
  34. }
    $ m' u: T( ~2 B+ Y: b- r' f) U

  35. + b% q4 `& |7 y/ u0 Y1 k8 t' F
  36. 4 L# Z6 i4 B* a
  37. uint16_t sec_10 = 0;
    . @9 o: J$ b, U, W, H0 Y

  38. - O' A3 x, C! y! Q5 g
  39. //回调函数,定时器中断服务函数调用
    6 \* C: _, ?; v, S7 Z
  40. void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim); L# V; v) Q, D2 I, X
  41. {# P0 w$ L: E0 }2 F
  42.     if(htim==(&TIM2_Handler))
    1 O3 D9 W/ y1 m0 ], k2 ~$ A# C/ T
  43.     {
    $ {' M! R+ a, [+ g8 W' d) C' h
  44. //        LED1=!LED1;        //LED1反转   
    2 J; ]& D" T/ h1 j5 L
  45.         sec_10++;' Q3 n5 e# z; _1 E
  46.     }0 @8 L4 ~9 S$ t# s! e" t
  47. }
    7 Y2 T( J$ Z: i2 A" t% N
  48. 4 h1 m3 |8 o! k/ y
复制代码
- J2 @! @( q' \, u) R

# T' I0 f: R, d1 s8 {. g
赞 收藏 评论0 发布时间:2021-11-17 23:02

举报

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