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

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

[复制链接]
STMCU小助手 发布时间:2021-11-17 23:02
MCU:stm32L0
8 _+ k! A: ^0 ^% B. j. F, l8 D# ]主要搞清楚系统时钟,我在上文设置系统时钟为HSE(外部高速时钟),设置为8M。
7 f& ^% U3 I3 k6 @5 s
" n- q! J# u3 w  l& ~/ ^//SYSCLK=Fs*PLLMUL/PLLDIV;$ {* }/ L+ L4 q+ a- M
//Fusb=Fvco/pllq=Fs*(plln/(pllm*pllq));" X5 A) Z& f( l8 b
//SYSCLK = 1 H; ?! G  F# O* I( y1 o
//Fs 8M $ v8 w4 G/ f! k7 _' `9 u. c
//Fvco: 8M
4 Q# m+ R% f  s//SYSCLK: 系统时钟频率 8*8/2=321 D' N/ ~. a' q8 S
//PLLMUL:倍频 8; d& a% }6 n# U, |3 D
//PLLDIV:分频系数 2
) T+ `, Z8 Z* g6 G' l
. o) ]5 l: t4 J) r# M# R8 B以上配置,设置AHB为 32M,AHB1为4M,AHB2为32M
5 i) v% O8 }! g8 H: a: r9 N- m& n$ }5 a
通用定时器时钟为AHB1时钟的2倍,8M。
- O0 S# \! V: n: S& o! j7 D+ A' Q, r1 g% A7 Q
可以由如下公式计算定时时间,假设定时时间为10s,设置计数值(Period)为9999,
; Q/ X, G2 m9 Q
" P# b4 g+ E2 P" b" X( i1 w( r则计数频率为(计数值+1)/(计数值)=1000Hz* N8 u8 z. Q6 H1 w/ y6 U# f* V& N. x0 C

2 u- c6 a! ?( T# Z# I+ H分频系数(Prescaler )为定时器时钟(8M)/计数频率 = 分频系数+1,为7999。
/ e9 U$ T$ ~% f/ Z- F, n% r& \' [9 m6 P1 {1 V8 {( ]
配置定时器代码如下:
- E' q5 @) s8 X# z5 e: }0 M  m
& e, N/ W1 S. q+ l% B  P
  1. TIM_HandleTypeDef TIM2_Handler;      //定时器句柄
    2 L4 t4 g" L& t6 e) E% _
  2. ! m  B7 h) {1 ]

  3. ; o! y) c- u1 n3 _
  4. void TIM2_Init(void)            //定时10s
    0 L- Q0 P2 U+ n& h2 }' l1 a3 X
  5. {7 E; [& R2 t/ _* d  [
  6.     TIM2_Handler.Instance = TIM2;0 f3 s: g' a3 @# |% }
  7.     TIM2_Handler.Init.Prescaler = 7999;" J# U8 @: }: V: N" l
  8.     TIM2_Handler.Init.CounterMode = TIM_COUNTERMODE_UP;
    6 i5 Y# q7 V. V" I8 f3 {6 f
  9.     TIM2_Handler.Init.Period = 9999;' E4 Y( e) u) V- r  M  j3 O+ n# j* w
  10.     TIM2_Handler.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;, l, W1 b: C) H4 L% F
  11.     HAL_TIM_Base_Init(&TIM2_Handler);
    : J* U. ]* g% F. x
  12.   O: X: k  Y( G% ]( r: k
  13.     HAL_TIM_Base_Start_IT(&TIM2_Handler); //使能定时器2和定时器2更新中断:TIM_IT_UPDATE   
    ; o% l5 _) W) x( t
  14. , o5 {8 t2 K6 ?+ f
  15. }0 Q' X. t8 s  x  m2 L0 P0 V% S

  16. 2 @& b/ b: d6 Q5 F% I) Y9 k

  17. & \! n! W5 Q( _8 A  Z9 T! [
  18. //定时器底册驱动,开启时钟,设置中断优先级
    3 j/ r1 {: v! l6 f+ c
  19. //此函数会被HAL_TIM_Base_Init()函数调用
    : q* A) I  d- I
  20. void HAL_TIM_Base_MspInit(TIM_HandleTypeDef *htim)
    + e0 S6 }% K3 {
  21. {% O/ K; j2 k* {- v+ T
  22.     if(htim->Instance==TIM2)6 ?+ ?' r1 G: R* W3 p; ]: g
  23.     {. |/ ?1 a, ~9 _5 V0 W6 ^
  24.         __HAL_RCC_TIM2_CLK_ENABLE();            //使能TIM3时钟" B- K& h. ]+ _6 C$ E, u
  25.         HAL_NVIC_SetPriority(TIM2_IRQn,1,3);    //设置中断优先级,抢占优先级1,子优先级3; h2 h* I( ]1 C. d7 z4 D+ ~
  26.         HAL_NVIC_EnableIRQ(TIM2_IRQn);          //开启ITM3中断   6 R  L1 ?& N) t" C5 i- {' `, j
  27.     }. z4 d9 a7 z1 W( S
  28. }
    0 p' B  ^/ e) u) v" b
  29. ' f- I( |1 O6 A: }; o3 E4 f
  30. //定时器2中断服务函数
    7 H( E1 S( E  b/ f
  31. void TIM2_IRQHandler(void)
    * Q8 _( u7 X9 Y2 J3 R* O
  32. {
    ' D5 N! ]! z! v
  33.     HAL_TIM_IRQHandler(&TIM2_Handler);% F+ z3 o" l2 ~* i9 u
  34. }' s* E8 z, B2 o
  35. ( z3 M/ D- ?# g4 U/ ]( l/ N
  36. 3 P, b, u+ j# j1 H- ^
  37. uint16_t sec_10 = 0;
    ' D5 n. `& T8 ^* N) [
  38. - A: S9 x  W  P3 X
  39. //回调函数,定时器中断服务函数调用
    9 _/ g1 h  c+ l  ?- g6 Z
  40. void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
    " z( [; A& z5 q+ l) U6 D
  41. {
    " S, K- s$ M  Q: h
  42.     if(htim==(&TIM2_Handler))
    " t3 ~) z. }( R$ L' C# w8 G
  43.     {
    4 T3 Z8 \* q" l3 W+ o
  44. //        LED1=!LED1;        //LED1反转   
    6 a# x* F; `4 u4 Z4 }" ?3 O
  45.         sec_10++;
    7 D  Z0 T! U0 Q+ L" D6 E8 b
  46.     }
    0 D- s% @$ C8 M/ r" l
  47. }
    * A# V# j; _* P' }, _: \% g
  48. 4 o8 p0 f: q2 {8 s
复制代码

2 w5 N) Z4 h5 v4 E7 m& h; l$ ]/ V" _( _5 l* m% b4 \
收藏 评论0 发布时间:2021-11-17 23:02

举报

0个回答

所属标签

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