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

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

[复制链接]
STMCU小助手 发布时间:2021-11-17 23:02
MCU:stm32L0
5 K  P6 N/ {/ o主要搞清楚系统时钟,我在上文设置系统时钟为HSE(外部高速时钟),设置为8M。
) u3 J/ g' U/ ^: M+ }' T! A1 u1 v6 B4 @, E6 d
//SYSCLK=Fs*PLLMUL/PLLDIV;
6 U4 `- X" u4 z! {( h: V! Z, H//Fusb=Fvco/pllq=Fs*(plln/(pllm*pllq));# ~8 s; m5 I; K' R# C% n
//SYSCLK = # z" ^- `. ?) o5 |+ A
//Fs 8M
) m" P. Y% L. [5 C! _//Fvco: 8M
" S2 Q7 s  {/ c3 `. E//SYSCLK: 系统时钟频率 8*8/2=326 i# I5 B% C* n" T4 G6 \
//PLLMUL:倍频 8
. l% {+ S* S! p( g% ~( y. n0 r+ ^//PLLDIV:分频系数 2 0 ~& H' i' M$ ~) I- M
+ r  q8 F  s( I0 D3 s
以上配置,设置AHB为 32M,AHB1为4M,AHB2为32M4 P. H9 [& b% u9 _2 ~

7 o# r& p: ~- ?3 u5 f通用定时器时钟为AHB1时钟的2倍,8M。
& w( F; t& g# Z+ G7 r: W7 u3 M" Y  A$ q
+ t- U: ~, H) f8 E% ^1 w9 a9 [) t可以由如下公式计算定时时间,假设定时时间为10s,设置计数值(Period)为9999,
3 x8 h7 O5 Q- F3 y+ Y$ ?0 E
8 J8 }' l$ L' b( ~! Q则计数频率为(计数值+1)/(计数值)=1000Hz
9 x1 Z# H2 w3 G( W# p4 M" W5 a1 T1 j; o' U/ ^$ x& j0 Q; X
分频系数(Prescaler )为定时器时钟(8M)/计数频率 = 分频系数+1,为7999。
% K1 @4 n7 n8 t- ^3 U! [' ^" W/ v* x; v, f& ?
配置定时器代码如下:6 U+ x$ T  B# P/ S! f
: f$ @5 M8 T' C+ Z8 J
  1. TIM_HandleTypeDef TIM2_Handler;      //定时器句柄
    & ^, F  O' Y4 f5 E
  2. * W$ q3 O% s; U" h9 v# a. _

  3.   I; r" G- g. r9 [" K
  4. void TIM2_Init(void)            //定时10s
    4 K7 O/ R% X( |
  5. {
    . l5 i9 P8 E- Q2 p9 T
  6.     TIM2_Handler.Instance = TIM2;
    + j( D( B$ z6 g3 Z4 F
  7.     TIM2_Handler.Init.Prescaler = 7999;& b' V( y9 H0 r) M: e
  8.     TIM2_Handler.Init.CounterMode = TIM_COUNTERMODE_UP;! w$ o  H4 c' {* ]* @0 q6 l! o- O
  9.     TIM2_Handler.Init.Period = 9999;6 M( \8 q0 u1 a! ^  E9 h
  10.     TIM2_Handler.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;9 h, Z1 n  V2 D( Q; [, D( ?& l! |
  11.     HAL_TIM_Base_Init(&TIM2_Handler);2 s5 _  k1 c4 ~) M5 V/ O8 G

  12. 5 z2 U+ j8 z0 d: r' G
  13.     HAL_TIM_Base_Start_IT(&TIM2_Handler); //使能定时器2和定时器2更新中断:TIM_IT_UPDATE   
    + u+ H, E, _& }* u

  14. 4 K' c/ y# W# B9 ^: @6 q
  15. }
    % c0 p- O: S+ L0 c( R" |+ o

  16. ' R1 P  S( [7 ^9 G6 r
  17. 0 e$ ~2 G+ Q/ g  J3 D1 c+ y  u% I& y
  18. //定时器底册驱动,开启时钟,设置中断优先级: y5 w) b' Q' {" h; r, u
  19. //此函数会被HAL_TIM_Base_Init()函数调用
    / P0 E; T- F( m4 _7 O1 _, q) ^
  20. void HAL_TIM_Base_MspInit(TIM_HandleTypeDef *htim)# g2 d3 _; E. }4 V9 r0 n, k; k
  21. {
    * Y  L0 h  `0 [( h* E
  22.     if(htim->Instance==TIM2)5 e$ X, }& B% x# O) M
  23.     {7 T+ Q1 D* t1 F4 v# n" \8 K
  24.         __HAL_RCC_TIM2_CLK_ENABLE();            //使能TIM3时钟/ k. L/ B+ J  G' y5 r
  25.         HAL_NVIC_SetPriority(TIM2_IRQn,1,3);    //设置中断优先级,抢占优先级1,子优先级3
    8 o) C  `! ^' a4 H
  26.         HAL_NVIC_EnableIRQ(TIM2_IRQn);          //开启ITM3中断   ' K/ q4 ~6 x' X/ D: @
  27.     }
    * D" G! h. q4 n2 g1 t
  28. }0 S/ z3 U$ z6 C/ O+ X; H# T# ]

  29. + y5 ?& e9 S' b+ H
  30. //定时器2中断服务函数7 y( F: Z# h7 d( _8 U! W
  31. void TIM2_IRQHandler(void)
    # h& |# x: O1 K7 X
  32. {* P: B$ R% r3 _) w* @& H  Q
  33.     HAL_TIM_IRQHandler(&TIM2_Handler);2 e; r2 `: x6 ?* q: e
  34. }: S9 |3 o3 s$ @8 D1 \

  35. 0 G* y( F0 e/ P0 U# d
  36. 2 ~! L' B( r: P% ~' D: B
  37. uint16_t sec_10 = 0;
      v. `9 `0 }- n& Q) I: i7 r. w
  38. + j. B9 [- F8 Z/ `0 N
  39. //回调函数,定时器中断服务函数调用! W# V4 F& ~1 |% x! I1 D2 M
  40. void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)# S$ |/ X9 Y, G& j
  41. {' l" D2 G+ c* A- @4 d
  42.     if(htim==(&TIM2_Handler))
    : }% k3 K5 P" O. q# P
  43.     {" z8 q, F* `( l
  44. //        LED1=!LED1;        //LED1反转    ; X! a/ n) Y8 J/ F2 u& w
  45.         sec_10++;9 p5 @: @; \, q) p
  46.     }
    , A8 A- Z5 E0 ]5 [: r" l# ^
  47. }6 U. t- M8 ~, y7 |# p9 R

  48. / y, A8 |( d, y5 c& e; d. }
复制代码
" t2 a4 X! ]" R( ~5 Y- x* B

' i/ \& E. v1 H7 E7 M- y5 c
收藏 评论0 发布时间:2021-11-17 23:02

举报

0个回答

所属标签

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