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

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

[复制链接]
STMCU小助手 发布时间:2021-11-17 23:02
MCU:stm32L00 y) g7 p8 R1 I$ M, p8 V
主要搞清楚系统时钟,我在上文设置系统时钟为HSE(外部高速时钟),设置为8M。
3 `+ b* [& z( `0 P  j1 t# H2 _) }! j1 [# ?# k  @, |3 e
//SYSCLK=Fs*PLLMUL/PLLDIV;& O* k, ]2 Z5 j  e/ S: G1 ]6 M/ d
//Fusb=Fvco/pllq=Fs*(plln/(pllm*pllq));: e# N+ y' U1 g2 p3 e! _
//SYSCLK =
2 c. S4 ~6 j% s$ l/ Q) Y//Fs 8M ! u7 K. M0 ]; K+ I; P
//Fvco: 8M: B/ P. n, E1 k! T! A2 t; \: B, g
//SYSCLK: 系统时钟频率 8*8/2=326 S& R$ w0 G# p, X! r+ h/ y+ _6 }
//PLLMUL:倍频 8
5 H; |! a$ x, `% F- `//PLLDIV:分频系数 2 ! g# J/ r2 V6 }+ O3 T7 Q

0 A/ D; T* f% z0 \2 z以上配置,设置AHB为 32M,AHB1为4M,AHB2为32M1 ]) x! g$ w' c7 M2 \  z

8 k, w+ Z( X, H* O8 ?$ M通用定时器时钟为AHB1时钟的2倍,8M。
8 ?; c+ ~" r& O* {/ [
) C. {1 V3 V* f2 p1 I; v可以由如下公式计算定时时间,假设定时时间为10s,设置计数值(Period)为9999,
; ], i" h. }* e* _  `/ c; o% a5 P5 g* Q2 @6 B" D
则计数频率为(计数值+1)/(计数值)=1000Hz7 L# b4 o& W' `' E# x

! A0 z: Z. j- n6 ?( E) T& k, G分频系数(Prescaler )为定时器时钟(8M)/计数频率 = 分频系数+1,为7999。
  m- w0 h1 u) b* f- b1 Y; \
; G, t( `' A4 @5 q  ~5 i$ \配置定时器代码如下:. P0 M, e' T3 s( K# d; r

2 W) f# C6 V8 o
  1. TIM_HandleTypeDef TIM2_Handler;      //定时器句柄
    : L6 j' @2 E. C6 l6 [

  2. % @4 W, j: S* u0 E8 V$ j  t/ S

  3. 5 }+ L7 f( u  u" i3 O4 x
  4. void TIM2_Init(void)            //定时10s1 ~5 @2 O- y# @$ @0 h0 K2 r
  5. {
    # k+ n  a, j, U) ^) @
  6.     TIM2_Handler.Instance = TIM2;# t* J- A! s8 Q4 A+ W" T1 Z, V
  7.     TIM2_Handler.Init.Prescaler = 7999;
    : p. X! n6 t: g+ }4 {
  8.     TIM2_Handler.Init.CounterMode = TIM_COUNTERMODE_UP;" N5 ^" ?7 Y; `$ [; _& u' z8 N8 `% [
  9.     TIM2_Handler.Init.Period = 9999;: F: C9 V. P! \. ?% H
  10.     TIM2_Handler.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;! F- g( n0 y0 {2 g
  11.     HAL_TIM_Base_Init(&TIM2_Handler);! u2 Z1 L2 k) g  T) y( w+ q

  12. # j8 l* X5 n* B+ S6 i
  13.     HAL_TIM_Base_Start_IT(&TIM2_Handler); //使能定时器2和定时器2更新中断:TIM_IT_UPDATE   0 B, N( M. A& O6 J" m+ s6 p3 ^9 N
  14. / v6 y) Y4 W3 `8 ~
  15. }8 |8 p0 \; _/ h/ Q. @9 O1 G

  16. & l: O$ f+ E# ~  X
  17. 4 r; [+ s; U1 Z# R5 }; O
  18. //定时器底册驱动,开启时钟,设置中断优先级4 O6 i9 y0 o8 S1 z% f
  19. //此函数会被HAL_TIM_Base_Init()函数调用8 [7 A8 z8 c! q% |
  20. void HAL_TIM_Base_MspInit(TIM_HandleTypeDef *htim)
    1 ~9 b+ \, K" ^# @# I1 r
  21. {* O0 W+ F- [8 j, @& P
  22.     if(htim->Instance==TIM2)7 r* i- P# }5 b+ R" r3 m, F2 T; O
  23.     {7 u! y, e9 j) G' `
  24.         __HAL_RCC_TIM2_CLK_ENABLE();            //使能TIM3时钟( t! y5 {2 W& A9 k5 t1 w5 K  }
  25.         HAL_NVIC_SetPriority(TIM2_IRQn,1,3);    //设置中断优先级,抢占优先级1,子优先级3
    3 S9 t, {$ y" }# U- c1 b6 ~( |
  26.         HAL_NVIC_EnableIRQ(TIM2_IRQn);          //开启ITM3中断   
    " F/ B2 L3 Y, l( U( u
  27.     }  X. X3 ]7 N( m& q; V; l
  28. }8 h3 a' v( _/ V. F# m

  29. / O# y* P, Q. I0 u% Z' _5 {7 q
  30. //定时器2中断服务函数. d7 I$ R3 C9 h- i
  31. void TIM2_IRQHandler(void)
    : Z0 V# {- \3 K
  32. {% ~0 L% F/ p6 p) S" \+ e3 \
  33.     HAL_TIM_IRQHandler(&TIM2_Handler);
    * i, }, |2 e  x' E0 |
  34. }* c. x% J' I( E7 x

  35. 6 g. }) W) v) d! K
  36. , w9 h2 X, ?) Q& u' b
  37. uint16_t sec_10 = 0;+ B. F1 t% p; c5 O! y4 s% r

  38. 6 M; S6 j- K  `& t/ g  g/ E- r" e& c
  39. //回调函数,定时器中断服务函数调用5 e/ z- Q9 Q4 _) n( m$ {
  40. void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
    2 x1 N4 P+ L1 I! l
  41. {
    ! [4 I" s2 [) B) K, T
  42.     if(htim==(&TIM2_Handler))
    3 F+ F% U2 [$ Z2 [6 h
  43.     {* O' H: X' [; G' Z4 s4 R; ?
  44. //        LED1=!LED1;        //LED1反转   
    / d9 p1 w+ r0 k: ~  A! \  J
  45.         sec_10++;
    3 E' [' X  g. A  W
  46.     }+ X* v+ R' T/ {) F4 r7 e
  47. }
    7 U8 H( U) {/ i! {3 q1 I

  48. 4 j0 V. e  c) f  v# y# N
复制代码

2 Q3 {/ r: B/ j5 R( s4 |- D, i# f1 s/ ^# O6 o
收藏 评论0 发布时间:2021-11-17 23:02

举报

0个回答

所属标签

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版