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

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

[复制链接]
STMCU小助手 发布时间:2021-11-17 23:02
MCU:stm32L0
. h# Q' T* D, t. Z主要搞清楚系统时钟,我在上文设置系统时钟为HSE(外部高速时钟),设置为8M。" H- |  X2 z5 \
) N7 D" i5 R6 N2 @# p
//SYSCLK=Fs*PLLMUL/PLLDIV;) O1 R& I& }0 X- J
//Fusb=Fvco/pllq=Fs*(plln/(pllm*pllq));7 \, ^, N  d( a. D
//SYSCLK = . k1 E6 F5 ]( V7 |
//Fs 8M
4 C+ N1 j+ K* k' |! n) ~. `//Fvco: 8M
, [1 S( R) k: P2 X+ R" A//SYSCLK: 系统时钟频率 8*8/2=32/ t) W/ Q( d/ d. Q( d7 F* {
//PLLMUL:倍频 8
% e+ ^+ C, O; S//PLLDIV:分频系数 2 , n$ z& a# M# K5 U& o: j

- i4 c+ C: V- Z以上配置,设置AHB为 32M,AHB1为4M,AHB2为32M& o3 Q7 w) @, N* A
9 v4 L/ u2 @. d8 t/ E
通用定时器时钟为AHB1时钟的2倍,8M。" y9 S( t7 \7 d1 ~5 l3 G( A" {

4 `7 z3 E2 J6 V  k  Y" j- C1 C可以由如下公式计算定时时间,假设定时时间为10s,设置计数值(Period)为9999,# i# L  X( T: |

+ o' v3 r) J9 H0 B! J( g- F则计数频率为(计数值+1)/(计数值)=1000Hz: G( s  e& d, v' U5 s1 m# z& \: E4 R) [

7 m$ S6 x/ {- u3 Y* g分频系数(Prescaler )为定时器时钟(8M)/计数频率 = 分频系数+1,为7999。3 w9 Z, n9 ^1 b* M
2 g0 E+ _/ _# E4 _3 l
配置定时器代码如下:
& A, B; n' o3 F1 {" @. W3 V2 W
) e$ ?4 v! s! H
  1. TIM_HandleTypeDef TIM2_Handler;      //定时器句柄
    ) z# U5 d, Q2 k$ g  j7 X& Z2 u

  2. + h6 ?' L$ j! F( |" s7 Y

  3. * N& G9 I  F4 X4 J  v
  4. void TIM2_Init(void)            //定时10s' X9 i2 F6 d6 X. B' d+ [
  5. {' y# g: x/ h, P! V$ q  m' L
  6.     TIM2_Handler.Instance = TIM2;
    3 |* `) Z8 e+ ^4 q. d( G; L
  7.     TIM2_Handler.Init.Prescaler = 7999;
    * F5 n! f4 Z0 A! |# p: ], p" ^- X. k
  8.     TIM2_Handler.Init.CounterMode = TIM_COUNTERMODE_UP;7 w4 J, t2 N) I
  9.     TIM2_Handler.Init.Period = 9999;; r; a  {) ~9 N1 F3 W  q
  10.     TIM2_Handler.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;+ F" d0 e7 b$ y: Q
  11.     HAL_TIM_Base_Init(&TIM2_Handler);% C# w; f& l( P$ t

  12. ) Y' A8 G7 c4 \7 ?: g
  13.     HAL_TIM_Base_Start_IT(&TIM2_Handler); //使能定时器2和定时器2更新中断:TIM_IT_UPDATE   
    & ?# k- T. p( [4 B# ?7 v  \
  14. ; V8 d+ j' i# y" y0 i
  15. }( J: N* t* T" e3 ^! ^: t  A

  16. ; `6 Z# f$ X  L2 O7 T9 z% S

  17. 6 G7 @2 _+ ~$ C+ T7 o, G
  18. //定时器底册驱动,开启时钟,设置中断优先级
    5 h1 [: ~1 c2 J
  19. //此函数会被HAL_TIM_Base_Init()函数调用4 y; D* Q0 t( Z2 }/ n9 O( {
  20. void HAL_TIM_Base_MspInit(TIM_HandleTypeDef *htim)* Y1 o. t9 q) G( n6 g
  21. {
    : e; |8 _. {7 m/ ^% j7 ?$ |
  22.     if(htim->Instance==TIM2): R- |/ q+ u3 U
  23.     {
    * \. l% n" E" ?' J8 S2 J
  24.         __HAL_RCC_TIM2_CLK_ENABLE();            //使能TIM3时钟
    $ M/ p6 ?7 d, t1 }- c
  25.         HAL_NVIC_SetPriority(TIM2_IRQn,1,3);    //设置中断优先级,抢占优先级1,子优先级3) |  K; v- u, F  e
  26.         HAL_NVIC_EnableIRQ(TIM2_IRQn);          //开启ITM3中断   
    2 G$ h, q) q) D( B" K3 ~+ }
  27.     }
    + x' b; Z$ G/ b, r* Y( B
  28. }
    # g# O& O, w: p# L5 u

  29. . T+ ], |" B' `
  30. //定时器2中断服务函数
    : `! ]0 f) b" z$ X6 h
  31. void TIM2_IRQHandler(void)) u+ O  _7 K$ N! M" S" c# b
  32. {1 b1 b) C1 A. ^  B6 v. A% \1 N
  33.     HAL_TIM_IRQHandler(&TIM2_Handler);
    3 F3 W# A, W6 U
  34. }- f% q  h, |* ~

  35. & J) j' D& W' Z' D: l5 R# M/ c
  36. ) p1 j: J7 P+ i6 ]% t$ ]
  37. uint16_t sec_10 = 0;" @1 k' _, I7 e$ b  b
  38.   }& A* |4 {# z/ h' S/ |
  39. //回调函数,定时器中断服务函数调用
    5 a" G5 j( y2 L2 x. I, q- U& \
  40. void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
    " n2 B# x, `! }% ]: ~
  41. {, M. [' |0 L- j$ N! T
  42.     if(htim==(&TIM2_Handler))& J, ]( ]" n2 z6 P3 F  z
  43.     {4 `  P, @  V; I7 U
  44. //        LED1=!LED1;        //LED1反转    : v* X8 g, f: J& G
  45.         sec_10++;
    ! l0 _- \# d0 v/ n$ Y: F
  46.     }
    2 T2 v) z2 v" {8 F
  47. }
      ?9 S* D. v' ^5 Z; p2 |, x

  48. 0 r5 q- }" @% m
复制代码

2 J! P; I: y! A1 g' [+ @+ a; W; C, k2 V% x! j. J+ J( l
收藏 评论0 发布时间:2021-11-17 23:02

举报

0个回答

所属标签

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