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

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

[复制链接]
STMCU小助手 发布时间:2021-11-17 23:02
MCU:stm32L0
+ P; m4 R) M) X8 w4 p主要搞清楚系统时钟,我在上文设置系统时钟为HSE(外部高速时钟),设置为8M。# f% x8 s( r6 ~

, v, z5 W; S0 [6 z7 |: D; f$ T7 h//SYSCLK=Fs*PLLMUL/PLLDIV;! ]8 S$ p: R! A6 E' B: L4 d$ G
//Fusb=Fvco/pllq=Fs*(plln/(pllm*pllq));+ P8 u4 s6 Z( G' `
//SYSCLK =
. h5 K0 ~0 t* [7 d/ r//Fs 8M
1 o) ~  r+ J5 t" x//Fvco: 8M4 I' d& J6 \5 a3 x
//SYSCLK: 系统时钟频率 8*8/2=32
! x, H) l: ~. d/ r& p& R//PLLMUL:倍频 8! B& b: p, _6 n# g8 A2 o; n
//PLLDIV:分频系数 2 8 F, Y, a# f! L1 G! z
$ k, q1 r# W, \% J: ]  I8 q
以上配置,设置AHB为 32M,AHB1为4M,AHB2为32M
( T: [* I2 Z. }5 E% {) l7 q
4 l0 S& H: O# E通用定时器时钟为AHB1时钟的2倍,8M。0 K3 \/ r+ x  i4 Z; X
( `1 o1 z& F2 M2 v% l& \# E
可以由如下公式计算定时时间,假设定时时间为10s,设置计数值(Period)为9999,* M, w+ c8 k) b: w
1 J* Q, P" P; r, U, w0 A
则计数频率为(计数值+1)/(计数值)=1000Hz+ d6 |" G$ w8 Z5 _
" Y; B2 W! m& O' i, u$ H) U; n
分频系数(Prescaler )为定时器时钟(8M)/计数频率 = 分频系数+1,为7999。
5 f7 f* @# g" @% e
+ K* B3 N, [% e8 I- c0 G3 c: }配置定时器代码如下:6 I6 D3 ]% Y, D* f

9 [5 }+ x" G* ?4 b$ Y
  1. TIM_HandleTypeDef TIM2_Handler;      //定时器句柄 : K) I; r5 c7 C2 j5 t' Q% f+ ?
  2. 1 s. q: m% L4 w- \6 w1 E% s7 ?
  3. - `' s- G; ~$ o! h+ m( s2 \: s# g
  4. void TIM2_Init(void)            //定时10s
    + F; Z8 I/ g6 h/ A# g6 Y
  5. {
    1 m; t. e; g. g4 c( b! f
  6.     TIM2_Handler.Instance = TIM2;
    8 x! |) |6 E  [. h: J' G& u
  7.     TIM2_Handler.Init.Prescaler = 7999;2 F0 C+ f1 k3 S
  8.     TIM2_Handler.Init.CounterMode = TIM_COUNTERMODE_UP;) \6 r/ P6 L5 s# \" d
  9.     TIM2_Handler.Init.Period = 9999;2 t3 H9 F7 L* G8 f6 J# F
  10.     TIM2_Handler.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;! L3 i  O$ V6 a+ i. G+ l  X
  11.     HAL_TIM_Base_Init(&TIM2_Handler);
    7 w3 _% u; a8 P9 `. }

  12. * F0 P6 H" ?& s; N) I7 R" d9 k' l! B
  13.     HAL_TIM_Base_Start_IT(&TIM2_Handler); //使能定时器2和定时器2更新中断:TIM_IT_UPDATE   
    - @6 r0 O9 C$ n
  14. ) |; v+ R) c1 }0 y( j9 P
  15. }! d$ ?9 t; h; n* W3 U7 ^! A! |
  16. + d1 N% Z) e# T6 ^

  17. ( o; r: W8 b! r3 y! ?
  18. //定时器底册驱动,开启时钟,设置中断优先级: V' g' S! U% t5 B7 X0 o
  19. //此函数会被HAL_TIM_Base_Init()函数调用, z+ ]( H0 ~; ~: _! r8 P4 ^# P4 B+ [4 q& L
  20. void HAL_TIM_Base_MspInit(TIM_HandleTypeDef *htim)
    2 g/ U+ q4 W0 @6 n6 d
  21. {
    - \6 E7 R# b0 J0 A+ V$ {2 {
  22.     if(htim->Instance==TIM2)
    5 ]8 ~8 W9 n. B/ r' A' z  n
  23.     {0 c/ W( a5 i0 N8 q
  24.         __HAL_RCC_TIM2_CLK_ENABLE();            //使能TIM3时钟5 I9 N% d( Q( y+ q
  25.         HAL_NVIC_SetPriority(TIM2_IRQn,1,3);    //设置中断优先级,抢占优先级1,子优先级3, }3 ~0 d8 L* C# G/ \
  26.         HAL_NVIC_EnableIRQ(TIM2_IRQn);          //开启ITM3中断   + O/ I/ m# M1 A0 }; b
  27.     }
    / Y# f3 `& J; C4 t9 ^9 J# |- p
  28. }
    , R/ C' K7 U1 |6 J6 [3 K( i- j

  29. - \4 N7 L9 @! Y
  30. //定时器2中断服务函数% p3 V- s2 e( ?. c0 C! Q6 U
  31. void TIM2_IRQHandler(void)) g/ q* k, K9 M  M
  32. {
    # K- h" j' A+ P) j' V
  33.     HAL_TIM_IRQHandler(&TIM2_Handler);
    # B+ k' m& m* Y4 J; z
  34. }4 z$ u& p/ Y1 Z# }. z& E) B

  35. 2 j2 Q3 R( }& p. s
  36. $ }8 u( C+ A0 d/ z3 k0 L
  37. uint16_t sec_10 = 0;
    4 j) V" R5 d, ?; z6 l, u- ^( v. C5 ^. P
  38. . r* C8 q8 \+ q' N, W
  39. //回调函数,定时器中断服务函数调用
    4 K3 |! Z7 w/ ~  H3 a* L& U( W
  40. void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)3 \- w7 g3 q3 K  o$ R# b
  41. {
    5 P% P9 [4 v+ R9 H- m0 J9 h
  42.     if(htim==(&TIM2_Handler))$ I9 }; i$ r2 {7 B& u
  43.     {9 z0 d2 ~7 S& `; U
  44. //        LED1=!LED1;        //LED1反转    ; \5 F- m7 T' V, S( X- y! o! R) u
  45.         sec_10++;5 {) K' r; J: h  g7 {6 P& R
  46.     }
    # ^2 Z( f* U  o  x2 o3 U6 @
  47. }: H7 K9 c. M+ w3 @1 ^: v% w8 x

  48. 1 A' k; S/ {# |% G# I
复制代码
- j3 n& q* _2 W+ A) @2 g/ Z
% ]' v% l3 `4 e% X3 s+ Q
收藏 评论0 发布时间:2021-11-17 23:02

举报

0个回答

所属标签

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版