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

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

[复制链接]
STMCU小助手 发布时间:2021-11-17 23:02
MCU:stm32L00 U, z( Q9 Q5 d6 V8 M
主要搞清楚系统时钟,我在上文设置系统时钟为HSE(外部高速时钟),设置为8M。* u& ]" s' P% }6 S( E/ S

8 G, ~) J2 K! W) V+ A7 ^7 b& g$ R//SYSCLK=Fs*PLLMUL/PLLDIV;8 e2 A% t1 m2 w9 N& l; x1 t* O
//Fusb=Fvco/pllq=Fs*(plln/(pllm*pllq));
' Z1 Z# y: [3 M//SYSCLK = 4 y! i8 ^  z' r5 {
//Fs 8M " S! i" I1 [% F  K) r+ a  k
//Fvco: 8M
2 g7 o% ]  K0 I! M//SYSCLK: 系统时钟频率 8*8/2=32
4 }4 k. ^: B; p5 g//PLLMUL:倍频 80 _* `  n3 b  A' A9 Q
//PLLDIV:分频系数 2
3 ~2 V4 s. J8 K* U
4 a% H6 G6 H2 Q4 S0 W以上配置,设置AHB为 32M,AHB1为4M,AHB2为32M
! L& S( k& m8 u, l7 B0 g5 m2 u
' `5 D4 f4 i/ h8 T7 M! i$ d通用定时器时钟为AHB1时钟的2倍,8M。7 i0 M" Y% V+ O* b
1 A+ ~% w" P# f/ Q
可以由如下公式计算定时时间,假设定时时间为10s,设置计数值(Period)为9999,
! m( I0 J- }6 ~8 j! {2 o1 c6 m
/ y. o/ O& n5 H1 \5 e+ Q: X1 L则计数频率为(计数值+1)/(计数值)=1000Hz
+ Z+ g# h' U9 B0 {
/ f" q0 h3 {0 F! Y分频系数(Prescaler )为定时器时钟(8M)/计数频率 = 分频系数+1,为7999。' {; Z1 n: n8 U$ n; K- R. A0 K
& M0 r% {( l/ v8 R  h5 V$ \& P
配置定时器代码如下:
) u% f0 B; f9 E' E7 Y% y* n3 b0 O1 m& n! F' N+ D, u2 ~+ T% I
  1. TIM_HandleTypeDef TIM2_Handler;      //定时器句柄
    / T- u! O# ]4 v. z
  2. * r) d- f9 z# w6 _/ D! D
  3. 1 ?1 e" D1 s2 `2 O3 d
  4. void TIM2_Init(void)            //定时10s
    ! E- r- N/ @+ \4 N2 O/ I! k1 j
  5. {
    ' C0 j8 p+ W5 t9 I$ q- n
  6.     TIM2_Handler.Instance = TIM2;
    ! v6 c/ }- g% `% `0 |
  7.     TIM2_Handler.Init.Prescaler = 7999;7 i- j$ r8 t/ w8 R8 g
  8.     TIM2_Handler.Init.CounterMode = TIM_COUNTERMODE_UP;2 f' R& Z* t; a) x, M: o
  9.     TIM2_Handler.Init.Period = 9999;( K5 B8 l# [4 }4 _  {
  10.     TIM2_Handler.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
    . D9 F8 W7 [7 {- C0 S9 C9 P4 u
  11.     HAL_TIM_Base_Init(&TIM2_Handler);$ o& M7 ]8 b, D" ?# h1 n, d
  12. + K$ ]% c$ b, {) m! ?- V
  13.     HAL_TIM_Base_Start_IT(&TIM2_Handler); //使能定时器2和定时器2更新中断:TIM_IT_UPDATE   & R7 _) w$ ]) ]8 B, q
  14. : S, f9 y# B8 L4 `$ m# _4 R9 d# L5 v
  15. }
    ; F/ F8 j+ w. P; }, [
  16. ' [; T3 t/ V+ m: D; l1 E' u
  17. ! a0 E* y) b! y& y
  18. //定时器底册驱动,开启时钟,设置中断优先级# q0 I. Z+ v. @( W$ |
  19. //此函数会被HAL_TIM_Base_Init()函数调用
    4 d7 B* i- h+ N! P5 D  [2 V- o
  20. void HAL_TIM_Base_MspInit(TIM_HandleTypeDef *htim)
    / ^. `; k- b' h: Q
  21. {
    2 e" o' \( _1 r" L
  22.     if(htim->Instance==TIM2)( |  s& p4 ]9 ~2 J
  23.     {( Z* X. }$ t0 J9 t" X6 e
  24.         __HAL_RCC_TIM2_CLK_ENABLE();            //使能TIM3时钟
    0 a4 Z) B1 Y- a$ {
  25.         HAL_NVIC_SetPriority(TIM2_IRQn,1,3);    //设置中断优先级,抢占优先级1,子优先级3
    + y- d: E' B. U+ Z' I$ S) U$ z
  26.         HAL_NVIC_EnableIRQ(TIM2_IRQn);          //开启ITM3中断   * i5 `3 i% z0 h8 @- K+ Q
  27.     }
    * q2 R* G) T5 }; m; `/ @
  28. }0 `3 ?. Y: A' I" [3 F& h+ C% E9 W
  29. % C8 Y2 u* b1 x  g7 C2 a4 {4 r% T" h
  30. //定时器2中断服务函数& r& P$ P, K" J
  31. void TIM2_IRQHandler(void)) ]7 Q# I+ n8 g; V& M" a( ], I
  32. {; R1 Q- v7 _, @5 b3 ~- [9 M
  33.     HAL_TIM_IRQHandler(&TIM2_Handler);
    3 h0 v& a- U) Y1 d1 z0 q9 g- M: i8 [
  34. }$ Q. `' E* S/ D  u: M* ?

  35. ' y. V$ x0 Y; y  Z
  36. 2 Q  s. `2 F! a4 d
  37. uint16_t sec_10 = 0;
    - W& L( p: [8 r7 A4 o" |5 T$ r5 R$ b

  38. : e& n8 X* F* B. H5 r2 [
  39. //回调函数,定时器中断服务函数调用) V, l( x& i6 z; w+ E* r4 v
  40. void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
    ' g$ m8 q# j1 B
  41. {
    ( p5 n) s6 i1 P* z7 g+ B3 V8 F9 g
  42.     if(htim==(&TIM2_Handler))
    $ ?7 F' T9 o& z/ x
  43.     {
    3 |) q6 Z5 T  E9 B6 C
  44. //        LED1=!LED1;        //LED1反转   
    1 H8 e7 u$ }  o# Z" c; q
  45.         sec_10++;
    ) l; `$ e  p) o0 u% z, v
  46.     }
    / z, T; Q6 s; i+ {9 b4 o% ]
  47. }' }0 D/ i" R, V# K7 K2 o) _6 _' M4 n
  48. 6 R) \) [9 P! q9 c3 `
复制代码
) L0 v3 J! n4 a- \" B3 x$ ?( _
2 a6 n. z" I. k
收藏 评论0 发布时间:2021-11-17 23:02

举报

0个回答

所属标签

相似分享

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