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

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

[复制链接]
STMCU小助手 发布时间:2021-11-17 23:02
MCU:stm32L06 q3 L1 M8 y: d3 F. S
主要搞清楚系统时钟,我在上文设置系统时钟为HSE(外部高速时钟),设置为8M。
. D1 c- m8 G* ?# ~; ?4 \
( h5 P- g& n+ a+ t$ ?  B: J/ {//SYSCLK=Fs*PLLMUL/PLLDIV;7 J! r( a& J; r) L7 O
//Fusb=Fvco/pllq=Fs*(plln/(pllm*pllq));% X9 i+ ~$ E3 W& W  X/ z8 P+ Y
//SYSCLK =
" `& z5 {: K8 k+ W' z" d9 }//Fs 8M ' W5 p4 K1 U; B& {4 N" L$ ?' I+ t
//Fvco: 8M# c% ]0 ?0 J& f- F( \: }, B& y2 M
//SYSCLK: 系统时钟频率 8*8/2=32/ |* t$ t7 o: _6 i) U  l7 |- D
//PLLMUL:倍频 8: U8 S/ o0 u+ z2 t) b+ S/ l, x
//PLLDIV:分频系数 2 0 C* q9 D) f# X7 J

( S" q) B& p, Z, e' k以上配置,设置AHB为 32M,AHB1为4M,AHB2为32M2 l" }- [" x+ \$ n5 ~3 q
7 z0 @- \3 }5 W7 A4 n7 p) J
通用定时器时钟为AHB1时钟的2倍,8M。; {9 {* Z$ V2 ~% R
9 X4 x2 N. D8 R
可以由如下公式计算定时时间,假设定时时间为10s,设置计数值(Period)为9999,1 ?: G  ~  Y2 L" \/ p3 G9 G

0 k# d( p1 S* s6 L- c6 D则计数频率为(计数值+1)/(计数值)=1000Hz6 o" s1 {0 R0 E

5 Y  @. Z) i% C) `# N分频系数(Prescaler )为定时器时钟(8M)/计数频率 = 分频系数+1,为7999。
+ h# R) G3 b; E( T- f7 ~" l$ a, A  A& h1 H+ l1 ~% _- V! f
配置定时器代码如下:
$ Z" S# @! e' |) q& K. }' `( U: S' e* z9 n) w$ R+ t. m3 N5 F
  1. TIM_HandleTypeDef TIM2_Handler;      //定时器句柄 : n* w1 o% G9 x  c. G1 O  Y; j/ q
  2. 1 N- j9 T/ g, j5 O9 g% |
  3. ' n+ O$ K: J9 J- |
  4. void TIM2_Init(void)            //定时10s- _' a- v% N1 ]& V0 D; Z- J- z: [
  5. {
    1 A5 E% ^9 u* I0 y  e6 G
  6.     TIM2_Handler.Instance = TIM2;3 w% i# M9 p, ^8 V8 Y
  7.     TIM2_Handler.Init.Prescaler = 7999;% I7 J. R0 v1 w( W* t
  8.     TIM2_Handler.Init.CounterMode = TIM_COUNTERMODE_UP;6 ]2 b& f* v2 [9 U5 G+ K) I1 o
  9.     TIM2_Handler.Init.Period = 9999;
    - Z; z! u' B# W0 n* |
  10.     TIM2_Handler.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
    / A( z7 P& i0 C$ E) T$ Q$ |6 q
  11.     HAL_TIM_Base_Init(&TIM2_Handler);" p$ N$ J& P& [9 w- T6 N
  12. : b+ a( T4 j) m6 R  a7 l, f+ `
  13.     HAL_TIM_Base_Start_IT(&TIM2_Handler); //使能定时器2和定时器2更新中断:TIM_IT_UPDATE   
    * L0 I) E2 l- k( ^2 w$ A

  14. * a6 j. i/ e/ K5 h# F- \' R
  15. }
    5 Q5 T6 l* |( b; P8 e
  16. 6 c) b! h+ @0 R, H) |  S
  17. 0 w+ f; u- V8 X& ^. \6 r" V) [1 J7 q5 z
  18. //定时器底册驱动,开启时钟,设置中断优先级. j, l6 D( ~7 S3 A- Q, I
  19. //此函数会被HAL_TIM_Base_Init()函数调用7 W6 c/ X: Q+ W8 e$ _
  20. void HAL_TIM_Base_MspInit(TIM_HandleTypeDef *htim)! m. `4 q& U( \
  21. {
    1 {$ ]8 I2 V. b- _- s3 x
  22.     if(htim->Instance==TIM2)9 a1 ?% e" X( b
  23.     {
    ; G0 M! m- |0 }: n- e3 j6 a
  24.         __HAL_RCC_TIM2_CLK_ENABLE();            //使能TIM3时钟) f& V, u) }' V3 V9 J7 P$ x" S
  25.         HAL_NVIC_SetPriority(TIM2_IRQn,1,3);    //设置中断优先级,抢占优先级1,子优先级37 \( \( T9 @' A* \
  26.         HAL_NVIC_EnableIRQ(TIM2_IRQn);          //开启ITM3中断   * |/ w! _  E3 _& F1 l. v
  27.     }3 a( n+ N6 q! _: H& Z+ x1 B
  28. }& c3 U+ B* i2 ?4 u2 S
  29. 8 h' z- U# t2 K: z& F1 Z& N3 r! Z2 ?
  30. //定时器2中断服务函数  C  c* n% P+ \' V0 M9 E0 v, l% `
  31. void TIM2_IRQHandler(void)* s, x, E- Z! n& {
  32. {' _1 p: J9 K: Q; A( K6 B
  33.     HAL_TIM_IRQHandler(&TIM2_Handler);; Y; r5 N" E& e' K) k! N
  34. }9 o0 s% k$ A: q+ q
  35. ; y* P! z/ @# M5 K$ Y' A: W" Y0 v+ X
  36. 8 c  @) g* H! ~9 K  u
  37. uint16_t sec_10 = 0;
    ; ]% O1 P  A4 [% Q% V2 o' D% C& O( Y

  38. & U8 j' N. e8 b: |& `
  39. //回调函数,定时器中断服务函数调用
    ( o! @" G+ z0 ]: v
  40. void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
    0 C( K; p5 c6 T- B$ A* \" {
  41. {; T* L0 `( O  Q: L  x  W) N
  42.     if(htim==(&TIM2_Handler))
    , [- o; P' [$ H) c+ \/ P
  43.     {
    + d5 P6 l0 j3 [! X: p4 H
  44. //        LED1=!LED1;        //LED1反转   
    - t4 M+ r& }) ]+ W" B( ?
  45.         sec_10++;
    " w3 r% _6 {( W& T! F
  46.     }( B" h! b& R) Y
  47. }/ N1 I7 `4 l) Y6 |0 q2 V

  48. & ]4 ~( _, d' |7 L& E. ]
复制代码

& Y& o& o4 ^: z" {/ f9 u5 B% ]6 X% M$ C4 p
赞 收藏 评论0 发布时间:2021-11-17 23:02

举报

0个回答
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版