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

基于stm32通用定时器1s延时实现LED闪烁经验分享

[复制链接]
攻城狮Melo 发布时间:2023-5-11 17:41
stm32有很多定时器,每种定时器的功能也不尽相同,今天学习了如何用通用定时器实现1s延时,使LED灯闪烁,现总结如下:- W1 P8 Y8 g6 T# Q5 A7 n

8 x" N2 h2 d/ ]: R. L0 j步骤总结:
* s6 k$ o/ C& v: s7 P使能定时器时钟->配置定时器结构体->清空定时器标志位->开启定时器中断->使能定时器->编写中断服务函数8 A( s% T8 e0 W
' C  V* P: m) o5 q* d& V) V
Timer.c:
6 W1 n, @: ~$ [8 V8 I' h
  1. #include "Timer.h", T! ?" Z% T* X0 e+ u
  2. 9 U" u  L% r! X, N  ]) f
  3. void TimerBase_Config(void)/ E2 t8 w1 j* Z! X  |3 d
  4. {
      s' w3 Q% F  O* d( K
  5.         //开时钟
    % C8 ]( O6 w6 s( J. I
  6.         RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
    * a+ G) G% q5 l$ A
  7.         //定义结构体变量8 a& ]3 E/ i/ l  B/ ~( R
  8.         TIM_TimeBaseInitTypeDef TimerBaseInitStructure;2 N1 H: K6 J# e# b
  9.         NVIC_InitTypeDef NVICInitStructure;
    2 u/ h/ X2 x$ u7 \) e  h. W* ?
  10.         //配置定时器结构体
    ; \6 V" G+ L* s3 V6 D* S( R+ Y; S/ @. h
  11.         TimerBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1;
    7 {0 `" u* f4 t1 H$ t- [. u: @
  12.         TimerBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;
    5 N' m& m$ r" \+ R
  13.         TimerBaseInitStructure.TIM_Period = 10000;) \: r+ l6 |! T8 G/ Y
  14.         TimerBaseInitStructure.TIM_Prescaler = 7200;
    + b& M/ p7 s& B) Z! |- L
  15.         TIM_TimeBaseInit(TIM2, &TimerBaseInitStructure);
    5 [/ F0 e" T& o, O2 T7 p. U
  16.         //清空标志位
    " g8 ?. h5 S$ U+ Y1 l; T2 V
  17.         TIM_ClearFlag(TIM2,TIM_FLAG_Update);
    ; c/ X# B9 L9 R: W. Z$ r/ b$ ~
  18.         //开启定时器中断
    , X3 Z6 a5 O6 e9 [4 d" S- h7 G, ]
  19.         TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE);/ c; d* f% J+ b9 ^
  20.         //使能定时器1 [, h- V+ A0 t2 e
  21.         TIM_Cmd(TIM2,ENABLE);& A( d8 c4 \. d2 s6 q; p# B
  22.         //配置NVIC结构体( B9 ~) P4 L; o
  23.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);$ R: Y6 Q) F, G! V
  24.         NVICInitStructure.NVIC_IRQChannel = TIM2_IRQn;! N) m7 Q, E/ J8 w7 m
  25.         NVICInitStructure.NVIC_IRQChannelCmd = ENABLE;
    " p3 u$ E6 b, @7 A, y# F
  26.         NVICInitStructure.NVIC_IRQChannelPreemptionPriority = 1;
    $ \2 w* ?. q3 ]% J7 ^0 M
  27.         NVICInitStructure.NVIC_IRQChannelSubPriority = 1;
    8 {  \7 W6 u1 `8 k: x9 i3 u
  28.         NVIC_Init(&NVICInitStructure);) {6 x% R) Y# |- W- j! W! E0 k
  29. }
复制代码
( S1 Z# N" q& h0 A) x3 i5 q
stm32f103x_it.c:' m& R5 t6 |' F  |) Y- u
  1. void TIM2_IRQHandler(void)! F$ _: ]0 J  M6 E
  2. {/ D8 g5 ]) V+ P& u, u( F/ d
  3.         static uint16_t temp;" E! N# H9 Z& Q/ c/ h' Y; y
  4.        
    & K& [, B" H& L; `
  5.         if(TIM_GetITStatus(TIM2,TIM_IT_Update) != RESET)4 u3 [' `4 w7 H# [7 {0 Y
  6.         {" B# G, ^% u/ A; r1 P0 W, P
  7.                 if(temp ++ %2 == 1)* w8 [& w2 M5 q- W6 N& T) `
  8.                 {
    5 k. R+ p; o* N/ u8 e
  9.                         GPIO_ResetBits(LED_G_GPIO_PORT,LED_G_GPIO_PIN);
    - {% t% a3 F- e$ {
  10.                 }9 \4 H  Z5 r1 L( v6 D
  11.                 else 2 a# f4 t! E' X- U7 R$ x
  12.                 {
    7 W+ S0 W0 ]/ U5 n
  13.                         GPIO_SetBits(LED_G_GPIO_PORT,LED_G_GPIO_PIN);& P, ]5 _( [* a1 K8 _$ g4 f) X
  14.                 }
    4 o$ ^8 l6 M7 J/ x5 {& B
  15.         }
    * s  j( t4 L4 C" k  s
  16.         TIM_ClearITPendingBit(TIM2,TIM_IT_Update);! }2 k" T1 Q  E3 S# P
  17. }
复制代码

: l4 P/ s8 W- V4 y7 w& J- ^main.c:
$ ~3 v. H0 ^4 B" G" C
  1. #include "stm32f10x.h"# _) I0 t( U9 N$ X# e: J7 L
  2. #include "led.h"4 e! g  h4 P1 b. w
  3. #include "Timer.h"
    " ?) Q+ N  F: Y

  4. 5 T! h% ?" n& m' ^& E. o
  5. int main(void)
    " _0 r( x0 m7 P, a1 K  h
  6. {
    & [+ L1 }# o( t- L/ D4 z- W
  7.         TimerBase_Config();
    , m5 U9 j  {8 y+ q
  8.         LED_GPIO_Confing();- }- @" P1 s2 O1 o2 b& C
  9.         GPIO_SetBits(LED_G_GPIO_PORT,LED_G_GPIO_PIN);8 a  }2 o8 b( v) M% U% P5 p
  10.         while(1)) t6 b4 T: K9 U& ^/ o* j+ t# Y
  11.         {
    : T8 E# G0 H  Q/ M) y8 W- I
  12.         ) B1 z% `) s% v4 X
  13.         }
    . `/ Z% `) \/ k; `, v( D* ~
  14. }
复制代码
9 g! z' E% P/ m+ D9 D/ q( U
注意事项:
2 O0 u+ o" M" B( B' C9 d) `9 J一定要记得清空标志位,尤其是中断服务函数里的清空标志位,博主就因为此检查好长时间8 [8 }" K/ R/ g$ G
————————————————
5 J: p+ w6 a# G+ e% u1 @. T版权声明:fake 钢铁侠$ k1 t: @; X0 G$ K( k4 a8 t& h
如有侵权请联系删除
6 M3 P, A6 d; U* n1 c. k% G9 O4 ~: w
6 d; |! F5 q1 E$ H% Y! w' T2 q8 m- m: h7 D
赞 收藏 评论0 发布时间:2023-5-11 17:41

举报

0个回答

所属标签

相似技术帖

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