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

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

[复制链接]
STMCU小助手 发布时间:2021-11-17 23:02
MCU:stm32L0( o4 H. T: y" C7 E( Y: ?
主要搞清楚系统时钟,我在上文设置系统时钟为HSE(外部高速时钟),设置为8M。, O  ?( @( _1 m3 l! ?

5 s1 |+ Y3 s2 H, A) m//SYSCLK=Fs*PLLMUL/PLLDIV;
% Q' B: o2 o0 ?% V! e. ~* k//Fusb=Fvco/pllq=Fs*(plln/(pllm*pllq));( U1 g7 G. {2 ?% _  n6 G6 o9 ]
//SYSCLK = $ ~$ z) k5 X) }, `+ ?
//Fs 8M 8 }: P# F3 ]' V( H+ i2 Z
//Fvco: 8M8 n. Q* \2 e( v" E7 L0 }
//SYSCLK: 系统时钟频率 8*8/2=32
- I8 I' D+ k* `' M& I# o! G//PLLMUL:倍频 8# R* c- M0 u+ b4 U4 l$ k
//PLLDIV:分频系数 2 & _( l4 A0 n! s% b
/ t' w6 y9 p" R6 Q5 C
以上配置,设置AHB为 32M,AHB1为4M,AHB2为32M( T2 {7 q& n/ ]7 z! z& p

/ b& @5 Z6 \& x5 K1 M3 f( s通用定时器时钟为AHB1时钟的2倍,8M。
* Q: [+ V: U6 D  l8 R0 O2 M: W6 O( U8 T
可以由如下公式计算定时时间,假设定时时间为10s,设置计数值(Period)为9999,4 V& k% E# R* T
. i0 v3 [- u( X! D2 p# I
则计数频率为(计数值+1)/(计数值)=1000Hz% [: T1 v& E4 [4 \3 Z( O7 p% L
# S, q; ^0 T" B$ i' G9 U4 h6 u
分频系数(Prescaler )为定时器时钟(8M)/计数频率 = 分频系数+1,为7999。/ V/ R0 X1 ?) u% O/ d
) q7 h$ \" O$ p0 _9 v6 r0 X
配置定时器代码如下:# D2 x& W( J# V( g: q0 G& |
6 i6 J& \4 f# s: |- q
  1. TIM_HandleTypeDef TIM2_Handler;      //定时器句柄   z2 x+ k/ A% `* G

  2. & d. @" \1 t' `' @2 |0 L
  3. 8 q5 i/ \5 }$ ~9 |
  4. void TIM2_Init(void)            //定时10s/ g9 p6 `; U( V+ L8 M% d& J
  5. {
    . M- Y/ E7 k* S  i+ x) X
  6.     TIM2_Handler.Instance = TIM2;) |% c( Z" F) k3 @0 O
  7.     TIM2_Handler.Init.Prescaler = 7999;0 k; }9 ^+ x# o: f& B# W
  8.     TIM2_Handler.Init.CounterMode = TIM_COUNTERMODE_UP;# B3 D6 n0 [$ ^6 r" [$ ~. u- M
  9.     TIM2_Handler.Init.Period = 9999;
    . \4 }8 w8 x& U  B; c" ]+ w
  10.     TIM2_Handler.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;) e* G: M8 R4 G8 Q; O7 y" O! H
  11.     HAL_TIM_Base_Init(&TIM2_Handler);2 q& _+ r8 [$ T* ^0 r
  12. ; B4 `( \* V6 Z9 v: ^
  13.     HAL_TIM_Base_Start_IT(&TIM2_Handler); //使能定时器2和定时器2更新中断:TIM_IT_UPDATE   9 t9 |1 P( G, M% @  q
  14.   x4 n: j! R+ I4 q2 t4 ^0 G
  15. }7 b3 _. S; P+ H+ J
  16. ( I8 O4 X  Y, Z% I; m  a6 Y+ d+ G
  17. ( `( v$ F& r2 u7 s; |# @: U
  18. //定时器底册驱动,开启时钟,设置中断优先级
    $ q; x8 T& F' k( \* `
  19. //此函数会被HAL_TIM_Base_Init()函数调用/ G" f4 l& q9 Q, c) O4 r
  20. void HAL_TIM_Base_MspInit(TIM_HandleTypeDef *htim)
    % r1 U' Y! B0 j, h1 B. _
  21. {
    ! d- }8 g& J5 T: l+ ~. S( g
  22.     if(htim->Instance==TIM2)
    . I; m! d2 x+ e1 [  I  k) {1 V# Z
  23.     {* c5 b4 c; \3 [. e) W, _
  24.         __HAL_RCC_TIM2_CLK_ENABLE();            //使能TIM3时钟
    " }* S8 Q4 _4 Z6 A
  25.         HAL_NVIC_SetPriority(TIM2_IRQn,1,3);    //设置中断优先级,抢占优先级1,子优先级3* C  _! Q! ^" A0 E7 x
  26.         HAL_NVIC_EnableIRQ(TIM2_IRQn);          //开启ITM3中断   8 L3 B; y4 u0 _  n7 P
  27.     }
    , s+ k6 q- F! y1 c1 X2 ~2 R5 n9 c
  28. }
    0 q' d3 b7 ^0 B8 [! B3 v
  29. 0 ]5 ~! \/ U6 A
  30. //定时器2中断服务函数
    8 n) N. U$ Z, T3 ~" @
  31. void TIM2_IRQHandler(void)* k% n8 G5 ~% e4 M
  32. {
    5 V6 Z; e. P, u( }9 D
  33.     HAL_TIM_IRQHandler(&TIM2_Handler);
    ) h* Q3 @8 \9 X/ G$ F, k
  34. }
    : Y- ?2 K5 I0 s
  35. 4 u/ g1 N: K- F

  36. - O9 k( f8 g" o& T+ I5 l! v
  37. uint16_t sec_10 = 0;2 }0 L" Y" u. @7 A  q. C
  38. ; p- |! \, T8 o+ h+ a7 H: Q
  39. //回调函数,定时器中断服务函数调用+ p* W* ^9 A, |; Z# a5 B# X% M8 j
  40. void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)6 C; l$ }% P% r
  41. {  ?8 e/ g; R9 w* ~; X
  42.     if(htim==(&TIM2_Handler))
    . l" N: Y8 e7 \1 \2 r
  43.     {
    - o0 d! Z* i0 S% h8 V& f
  44. //        LED1=!LED1;        //LED1反转   
    " f( C( }  O, h$ r$ X+ n* ?1 ?( Q% r
  45.         sec_10++;
    1 k9 Y4 Q6 G" o/ ?. }% ^5 R0 N! H5 M3 A
  46.     }
      q1 F5 h" |% _: G
  47. }- v) h5 m1 H! l+ V7 Z
  48. ; _4 O) S1 }* \' @
复制代码

, k0 H$ \3 M  q7 R8 }. P' L% x/ }. a4 k& Z7 P
收藏 评论0 发布时间:2021-11-17 23:02

举报

0个回答

所属标签

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